Skip to content
Draft

No com #1446

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
0a9e171
feat: add VoidDimensionBuilder + rewrite: Builder.
iambibi Aug 15, 2026
7a76638
chore: DatapackInjector
iambibi Aug 15, 2026
e5a0b22
feat: WorldTemplateRegistry
iambibi Aug 15, 2026
0355ea0
feat: copyRegion to dim container
iambibi Aug 15, 2026
eb25c24
fix: empty biome wont work
iambibi Aug 15, 2026
17040af
fix: dimension, biome are in different namespace of dimension
iambibi Aug 15, 2026
45deafb
fix: missing dimension register XXDDDDD
iambibi Aug 15, 2026
2dbb3e4
fix: dimension type wrong path
iambibi Aug 15, 2026
08f45b4
fix: biome original (cant test error spam meeeee)
iambibi Aug 15, 2026
89e1b57
Merge remote-tracking branch 'upstream/master' into feat/singu
iambibi Aug 16, 2026
28daeeb
fix: chunk load wont react
iambibi Aug 16, 2026
c3cb576
fix: tests
iambibi Aug 16, 2026
6cfe4e4
change: delete ForceBiomeOnTemplateWorldListener
iambibi Aug 16, 2026
e81bb0d
feat: applyBiomeOnDimension + WorldBiomeNMS (à tester)
iambibi Aug 17, 2026
599c036
feat: config to not repeat actions
iambibi Aug 17, 2026
b98fb91
fix: init world template config
iambibi Aug 17, 2026
fd31178
fix: config and condition
iambibi Aug 17, 2026
40657ee
fix: biome apply + more optimized
iambibi Aug 17, 2026
c61fc0d
feat: HasGamerules and HasWorldBorder + onFirstLoad()
iambibi Aug 19, 2026
3efe022
feat: add gamerules to singu world
iambibi Aug 20, 2026
3424f61
chore: remove all world region
iambibi Aug 21, 2026
f7385e9
feat: ambient of wworld
iambibi Aug 22, 2026
b8716dc
feat: sfx singularity
iambibi Aug 23, 2026
7df5d90
Merge remote-tracking branch 'origin/master' into feat/swend
iambibi Aug 23, 2026
64a6d98
Merge remote-tracking branch 'origin/master' into feat/swend
iambibi Aug 23, 2026
0c6ed70
chore: optimize a lot particle
iambibi Aug 23, 2026
43ef7fc
change: reduce iterval instability
iambibi Aug 23, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 31 additions & 1 deletion src/main/java/fr/openmc/api/datapacks/DatapackInjector.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,41 @@

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import fr.openmc.api.datapacks.builders.ContentBuilder;

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

public interface DatapackInjector {
Gson GSON = new GsonBuilder().setPrettyPrinting().create();
String[] getPath();
ContentBuilder getBuilder();
String getNamespace();
String getId();
String getExtension();

void inject(File rootFile);
default void inject(File rootFile) {
if (getBuilder() == null) return;

Path root = rootFile.toPath().resolve("data").resolve(getNamespace());

for (String folder : getPath()) {
root = root.resolve(folder);
}

try {
Files.createDirectories(root);
Path biomeFile = root.resolve(getId() + "." + getExtension());
Files.createDirectories(biomeFile.getParent());
Files.writeString(biomeFile, GSON.toJson(getBuilder().toJson()));
} catch (IOException e) {
throw new IllegalStateException("Cannot write Content files", e);
}
}

default String getKey() {
return getNamespace() + ":" + getId();
}
}
4 changes: 1 addition & 3 deletions src/main/java/fr/openmc/api/datapacks/OMCDatapack.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,13 @@
@Getter
@SuppressWarnings("UnstableApiUsage")
public class OMCDatapack {
private final String packName;
private final String namespace;
private final Set<DatapackInjector> injectors = new HashSet<>();

public final String ID_DATAPACK_INJECTED = "openmc-injected";
private final String ID_TEMP_DATAPACK_FOLDER = "datapacks-openmc";

public OMCDatapack(String packName, String namespace) {
this.packName = packName;
public OMCDatapack(String namespace) {
this.namespace = namespace;
}

Expand Down
21 changes: 12 additions & 9 deletions src/main/java/fr/openmc/api/datapacks/builders/BiomeBuilder.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
* "temperature": 2
* }
*/
public final class BiomeBuilder {
public final class BiomeBuilder implements ContentBuilder {
private JsonObject attributes = new JsonObject();
private final JsonArray carvers = new JsonArray();
@Getter
Expand Down Expand Up @@ -58,17 +58,17 @@ public BiomeBuilder features(JsonElement id) {
}

public BiomeBuilder temperatureModifier(String id) {
this.temperatureModifier =id;
this.temperatureModifier = id;
return this;
}

public BiomeBuilder creatureSpawnProbability(Double value) {
this.creatureSpawnProbability=value;
this.creatureSpawnProbability = value;
return this;
}

public BiomeBuilder downfall(Float value) {
this.downfall=value;
this.downfall = value;
return this;
}

Expand Down Expand Up @@ -169,13 +169,16 @@ public JsonObject toJson() {
if (attributes != null) json.add("attributes", attributes);
if (temperatureModifier != null) json.addProperty("temperature_modifier", temperatureModifier);
if (creatureSpawnProbability != null) json.addProperty("creature_spawn_probability", creatureSpawnProbability);
if (carvers != null) json.add("carvers", carvers);
json.add("carvers", carvers);
if (downfall != null) json.addProperty("downfall", downfall);
if (effects != null) json.add("effects", effects);
if (features != null) json.add("features", features);
JsonObject effect = effects;
if (effect.get("water_color") == null)
effect.addProperty("water_color", "#000000");
json.add("effects", effects);
json.add("features", features);
if (hasPrecipitation != null) json.addProperty("has_precipitation", hasPrecipitation);
if (spawnCosts != null) json.add("spawn_costs", spawnCosts);
if (spawners != null) json.add("spawners", spawners);
json.add("spawn_costs", spawnCosts);
json.add("spawners", spawners);
if (temperatures != null) json.addProperty("temperature", temperatures);

return json;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package fr.openmc.api.datapacks.builders;

import com.google.gson.JsonObject;

// * Interface qui permet au classes de reconnaitre que c'est un builder de contenu
public interface ContentBuilder {
JsonObject toJson();
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
* "timelines": "#minecraft:in_overworld"
* }
*/
public final class DimensionTypeBuilder {
public final class DimensionTypeBuilder implements ContentBuilder {
private JsonObject attributes;
private Double ambientLight = 0.0;
private Double coordinateScale = 1.0;
Expand Down Expand Up @@ -155,7 +155,7 @@ public DimensionTypeBuilder timelines(String timelines) {
}

public DimensionTypeBuilder timelines(TimelinesInjector injector) {
this.timelines = injector.getNamespace() + ":" + injector.getId();
this.timelines = injector.getKey();
return this;
}

Expand All @@ -180,11 +180,4 @@ public JsonObject toJson() {
if (timelines != null) json.addProperty("timelines", timelines);
return json;
}

private JsonObject toOverridenEnvironnementAttribute(JsonElement value) {
JsonObject obj = new JsonObject();
obj.addProperty("modifier", "override");
obj.add("argument", value);
return obj;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import fr.openmc.api.datapacks.builders.sounds.AmbientSoundBuilder;
import org.bukkit.Particle;

import java.util.Map;
import java.util.function.Consumer;

public class EnvironnementAttributeBuilder {
Expand Down Expand Up @@ -36,9 +37,25 @@ public EnvironnementAttributeBuilder attributes(JsonObject attributes) {
* "minecraft:visual/ambient_particles": [ { "particle": { "type": "minecraft:crimson_spore" }, "probability": 0.025 } ]
*/
public EnvironnementAttributeBuilder ambientParticles(String particleType, double probability) {
return ambientParticles(particleType, probability, null);
}

/**
* Ajoute un attribut "minecraft:visual/ambient_particles" simple.
* Exemple :
* "minecraft:visual/ambient_particles": [ { "particle": { "type": "minecraft:crimson_spore" }, "probability": 0.025 } ]
*/
public EnvironnementAttributeBuilder ambientParticles(String particleType, double probability, Map<String, Integer> options) {
JsonObject entry = new JsonObject();
JsonObject particle = new JsonObject();
particle.addProperty("type", particleType);

if (options != null) {
for (var entry1 : options.entrySet()) {
particle.addProperty(entry1.getKey(), entry1.getValue());
}
}

entry.add("particle", particle);
entry.addProperty("probability", probability);

Expand Down Expand Up @@ -94,6 +111,10 @@ public EnvironnementAttributeBuilder ambientParticles(Particle particle, double
return ambientParticles(particle.getKey().toString(), probability);
}

public EnvironnementAttributeBuilder ambientParticles(Particle particle, double probability, Map<String, Integer> options) {
return ambientParticles(particle.getKey().toString(), probability, options);
}

public EnvironnementAttributeBuilder ambientSounds(AmbientSoundBuilder ambientBuilder) {
this.attributes.add("audio/ambient_sounds", ambientBuilder.toJson());
return this;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@
* }
* }
*/
public final class TimelineBuilder {
public final class TimelineBuilder implements ContentBuilder {
private String clock = "minecraft:overworld";
private Integer periodTicks = null;
private final Map<String, TrackBuilder> tracks = new LinkedHashMap<>();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package fr.openmc.api.datapacks.builders.dimensions;

import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import fr.openmc.api.datapacks.builders.ContentBuilder;
import fr.openmc.api.datapacks.injectors.BiomesInjector;
import fr.openmc.api.datapacks.injectors.DimensionTypesInjector;

/**
* Exemple simple d'une dimension vide, le but n'est pas de faire une API
* pour build des datapacks sans toucher a un .json et ttes la structure qu'il y a derriere:
* {
* "type": "minecraft:overworld",
* "generator": {
* "type": "minecraft:flat",
* "settings": {
* "biome": "draft:draft",
* "lakes": false,
* "features": false,
* "layers": []
* }
* }
* }
*/
public final class VoidDimensionBuilder implements ContentBuilder {
private String type = "minecraft:overworld";
private String biome = "minecraft:plains";

public VoidDimensionBuilder type(DimensionTypesInjector injector) {
this.type = injector.getKey();
return this;
}

public VoidDimensionBuilder biome(BiomesInjector injector) {
this.biome = injector.getKey();
return this;
}

public JsonObject toJson() {
JsonObject json = new JsonObject();
if (type != null) json.addProperty("type", type);
if (biome != null) {
JsonObject generator = new JsonObject();
generator.addProperty("type", "minecraft:flat");

JsonObject settings = new JsonObject();
settings.addProperty("biome", biome);
settings.addProperty("lakes", false);
settings.addProperty("features", false);
settings.add("layers", new JsonArray());

generator.add("settings", settings);
json.add("generator", generator);
}

return json;
}
}
62 changes: 31 additions & 31 deletions src/main/java/fr/openmc/api/datapacks/injectors/BiomesInjector.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,8 @@

import fr.openmc.api.datapacks.DatapackInjector;
import fr.openmc.api.datapacks.builders.BiomeBuilder;
import fr.openmc.api.datapacks.builders.ContentBuilder;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.function.Consumer;

/**
Expand All @@ -19,39 +14,44 @@
public class BiomesInjector implements DatapackInjector {

private final String namespace;
private final Map<String, BiomeBuilder> entries = new LinkedHashMap<>();
private final String id;
private final BiomeBuilder builder;

public BiomesInjector(String namespace) {
public BiomesInjector(String namespace, String id, BiomeBuilder builder) {
this.namespace = namespace;
this.id = id;
this.builder = builder;
}

public BiomesInjector add(String id, Consumer<BiomeBuilder> builder) {
BiomeBuilder instance = new BiomeBuilder();
builder.accept(instance);
entries.put(id, instance);
return this;
public BiomesInjector(String namespace, String id, Consumer<BiomeBuilder> builder) {
this.namespace = namespace;
this.id = id;
this.builder = new BiomeBuilder();
builder.accept(this.builder);
}

@Override
public String[] getPath() {
return new String[]{"worldgen", "biome"};
}

public BiomesInjector add(String id, BiomeBuilder builder) {
entries.put(id, builder);
return this;
@Override
public ContentBuilder getBuilder() {
return builder;
}

@Override
public String getNamespace() {
return namespace;
}

@Override
public String getId() {
return id;
}

@Override
public void inject(File rootFile) {
if (entries.isEmpty()) return;

Path root = rootFile.toPath().resolve("data").resolve(namespace)
.resolve("worldgen").resolve("biome");
try {
Files.createDirectories(root);
for (var entry : entries.entrySet()) {
Path biomeFile = root.resolve(entry.getKey() + ".json");
Files.createDirectories(biomeFile.getParent());
Files.writeString(biomeFile, GSON.toJson(entry.getValue().toJson()));
}
} catch (IOException e) {
throw new IllegalStateException("Cannot write biome files", e);
}
public String getExtension() {
return "json";
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package fr.openmc.api.datapacks.injectors;

import fr.openmc.api.datapacks.DatapackInjector;
import fr.openmc.api.datapacks.builders.ContentBuilder;

public class DimensionInjector implements DatapackInjector {

private final String namespace;
private final String id;
private final ContentBuilder builder;

public DimensionInjector(String namespace, String id, ContentBuilder builder) {
this.namespace = namespace;
this.id = id;
this.builder = builder;
}

@Override
public String[] getPath() {
return new String[]{"dimension"};
}

@Override
public ContentBuilder getBuilder() {
return builder;
}

@Override
public String getNamespace() {
return namespace;
}

@Override
public String getId() {
return id;
}

@Override
public String getExtension() {
return "json";
}
}
Loading
Loading