Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,14 @@
import com.mojang.serialization.DataResult;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import dev.latvian.mods.rhino.util.HideFromJS;
import dev.latvian.mods.rhino.util.RemapForJS;
import dev.latvian.mods.rhino.util.RemapPrefixForJS;
import it.unimi.dsi.fastutil.ints.IntIntPair;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import lombok.experimental.Tolerate;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.Nullable;

import java.util.*;
Expand All @@ -45,6 +48,7 @@
@SuppressWarnings("unused")
@MethodsReturnNonnullByDefault
@ParametersAreNonnullByDefault
@RemapPrefixForJS("kjs$")
@Accessors(chain = true, fluent = true)
public class GTOreDefinition {

Expand Down Expand Up @@ -178,33 +182,54 @@ public GTOreDefinition weight(int weight) {
public GTOreDefinition layer(IWorldGenLayer layer) {
this.layer = layer;
if (this.dimensionFilter == null || this.dimensionFilter.isEmpty()) {
dimensions(layer.getLevels().toArray(ResourceLocation[]::new));
dimensions(layer.getLevels().stream()
.map(location -> ResourceKey.create(Registries.DIMENSION, location))
.collect(Collectors.toSet()));
}
return this;
}

@HideFromJS
public final GTOreDefinition dimensions(Set<ResourceKey<Level>> dimensions) {
this.dimensionFilter = dimensions;
return this;
}

/**
* @deprecated Use {@link #dimensions(Set) dimensions(Set&lt;ResourceKey&lt;Level&gt;&gt;)} instead.
* @param dimensions
* @return this builder.
*/
@ApiStatus.ScheduledForRemoval(inVersion = "8.0.0")
@Deprecated(since = "7.4.1", forRemoval = true)
@ApiStatus.Internal
@SuppressWarnings("unused")
// TODO(8.0.0): rename to `kjs$dimensions`
public GTOreDefinition dimensions(ResourceLocation... dimensions) {
this.dimensionFilter = Arrays.stream(dimensions)
return this.dimensions(Arrays.stream(dimensions)
.map(location -> ResourceKey.create(Registries.DIMENSION, location))
.collect(Collectors.toSet());
return this;
.collect(Collectors.toSet()));
}

public GTOreDefinition biomes(String first, String... biomes) {
/// This method should <b>only</b> be used in KubeJS.
@SuppressWarnings("unused")
@ApiStatus.Internal
public GTOreDefinition kjs$biomes(String first, String... biomes) {
// The first param is separate to avoid method confusion with the Lombok-generated fluent getter
List<String> biomeList = Stream.of(Stream.of(first), Arrays.stream(biomes))
.flatMap(Function.identity())
List<String> biomeList = Stream.concat(Stream.of(first), Arrays.stream(biomes))
.toList();

this.biomes = OreVeinUtil.resolveBiomes(biomeList);
return this;
}

@HideFromJS
public GTOreDefinition biomes(TagKey<Biome> biomes) {
this.biomes = () -> GTRegistries.builtinRegistry().lookupOrThrow(Registries.BIOME).getOrThrow(biomes);
return this;
}

@HideFromJS
public GTOreDefinition biomes(Supplier<HolderSet<Biome>> biomes) {
this.biomes = biomes;
return this;
Expand Down Expand Up @@ -303,8 +328,8 @@ public GTOreDefinition cuboidVeinGenerator(Consumer<CuboidVeinGenerator> config)
}

@Tolerate
@Nullable
public VeinGenerator veinGenerator(ResourceLocation id) {
@RemapForJS("customVeinGenerator")
public @Nullable VeinGenerator veinGenerator(ResourceLocation id) {
if (veinGenerator == null) {
veinGenerator = WorldGeneratorUtils.VEIN_GENERATOR_FUNCTIONS.containsKey(id) ?
WorldGeneratorUtils.VEIN_GENERATOR_FUNCTIONS.get(id).apply(this) : null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import com.gregtechceu.gtceu.api.data.worldgen.BiomeWeightModifier;
import com.gregtechceu.gtceu.api.registry.GTRegistries;
import com.gregtechceu.gtceu.utils.RegistryUtil;

import net.minecraft.core.Holder;
import net.minecraft.core.HolderSet;
Expand All @@ -20,13 +19,15 @@
import com.mojang.serialization.MapCodec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import dev.latvian.mods.rhino.util.HideFromJS;
import dev.latvian.mods.rhino.util.RemapPrefixForJS;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import org.jetbrains.annotations.ApiStatus;

import java.util.*;
import java.util.function.Supplier;
import java.util.stream.Collectors;

public class BedrockFluidDefinition {

Expand Down Expand Up @@ -139,6 +140,7 @@ public static Builder builder(ResourceLocation name) {
return new Builder(name);
}

@RemapPrefixForJS("kjs$")
@Accessors(chain = true, fluent = true)
public static class Builder {

Expand Down Expand Up @@ -178,19 +180,22 @@ public Builder yield(int min, int max) {
return minimumYield(min).maximumYield(max);
}

@HideFromJS
public Builder biomes(int weight, TagKey<Biome> biomes) {
this.biomes.add(new BiomeWeightModifier(() -> GTRegistries.builtinRegistry()
.registryOrThrow(Registries.BIOME).getOrCreateTag(biomes), weight));
return this;
}

@HideFromJS
@SafeVarargs
public final Builder biomes(int weight, ResourceKey<Biome>... biomes) {
this.biomes.add(new BiomeWeightModifier(() -> HolderSet.direct(GTRegistries.builtinRegistry()
.registryOrThrow(Registries.BIOME)::getHolderOrThrow, biomes), weight));
return this;
}

@HideFromJS
public Builder biomes(int weight, HolderSet<Biome> biomes) {
this.biomes.add(new BiomeWeightModifier(() -> biomes, weight));
return this;
Expand All @@ -202,10 +207,37 @@ public Builder dimensions(Set<ResourceKey<Level>> dimensions) {
return this;
}

public Builder dimensions(String... dimensions) {
return this.dimensions(new HashSet<>(RegistryUtil.resolveResourceKeys(Registries.DIMENSION, dimensions)));
// region KubeJS versions of the above methods

/// This method should <b>only</b> be used in KubeJS.
@SuppressWarnings("unused")
@ApiStatus.Internal
public Builder kjs$biomeTag(int weight, ResourceLocation biomeTag) {
return this.biomes(weight, TagKey.create(Registries.BIOME, biomeTag));
}

/// This method should <b>only</b> be used in KubeJS.
@SuppressWarnings({ "unused", "unchecked" })
@ApiStatus.Internal
public Builder kjs$biomes(int weight, ResourceLocation... biomes) {
ResourceKey<Biome>[] resourceKeys = new ResourceKey[biomes.length];
for (int i = 0; i < biomes.length; i++) {
resourceKeys[i] = ResourceKey.create(Registries.BIOME, biomes[i]);
}
return this.biomes(weight, resourceKeys);
}

/// This method should <b>only</b> be used in KubeJS.
@SuppressWarnings("unused")
@ApiStatus.Internal
public Builder kjs$dimensions(ResourceLocation... dimensions) {
return this.dimensions(Arrays.stream(dimensions)
.map(id -> ResourceKey.create(Registries.DIMENSION, id))
.collect(Collectors.toSet()));
}

// endregion

@ApiStatus.Internal
public BedrockFluidDefinition build() {
return new BedrockFluidDefinition(weight, minimumYield, maximumYield, depletionAmount,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import com.gregtechceu.gtceu.api.data.chemical.material.Material;
import com.gregtechceu.gtceu.api.data.worldgen.BiomeWeightModifier;
import com.gregtechceu.gtceu.api.registry.GTRegistries;
import com.gregtechceu.gtceu.utils.RegistryUtil;

import net.minecraft.core.Holder;
import net.minecraft.core.HolderSet;
Expand All @@ -20,13 +19,16 @@
import com.mojang.serialization.Codec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import dev.latvian.mods.rhino.util.HideFromJS;
import dev.latvian.mods.rhino.util.RemapPrefixForJS;
import it.unimi.dsi.fastutil.ints.IntArrayList;
import it.unimi.dsi.fastutil.ints.IntList;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import org.jetbrains.annotations.ApiStatus;

import java.util.*;
import java.util.stream.Collectors;

@Accessors(fluent = true, chain = true)
public class BedrockOreDefinition {
Expand Down Expand Up @@ -146,6 +148,7 @@ public static Builder builder(ResourceLocation name) {
return new Builder(name);
}

@RemapPrefixForJS("kjs$")
@Accessors(chain = true, fluent = true)
public static class Builder {

Expand Down Expand Up @@ -192,19 +195,22 @@ public Builder yield(int min, int max) {
return this.yield(UniformInt.of(min, max));
}

@HideFromJS
public Builder biomes(int weight, TagKey<Biome> biomes) {
this.biomes.add(new BiomeWeightModifier(() -> GTRegistries.builtinRegistry()
.registryOrThrow(Registries.BIOME).getOrCreateTag(biomes), weight));
return this;
}

@HideFromJS
@SafeVarargs
public final Builder biomes(int weight, ResourceKey<Biome>... biomes) {
this.biomes.add(new BiomeWeightModifier(() -> HolderSet.direct(GTRegistries.builtinRegistry()
.registryOrThrow(Registries.BIOME)::getHolderOrThrow, biomes), weight));
return this;
}

@HideFromJS
public Builder biomes(int weight, HolderSet<Biome> biomes) {
this.biomes.add(new BiomeWeightModifier(() -> biomes, weight));
return this;
Expand All @@ -216,10 +222,37 @@ public Builder dimensions(Set<ResourceKey<Level>> dimensions) {
return this;
}

public Builder dimensions(String... dimensions) {
return this.dimensions(new HashSet<>(RegistryUtil.resolveResourceKeys(Registries.DIMENSION, dimensions)));
// region KubeJS versions of the above methods

/// This method should <b>only</b> be used in KubeJS.
@SuppressWarnings("unused")
@ApiStatus.Internal
public Builder kjs$biomeTag(int weight, ResourceLocation biomeTag) {
return this.biomes(weight, TagKey.create(Registries.BIOME, biomeTag));
}

/// This method should <b>only</b> be used in KubeJS.
@SuppressWarnings({ "unused", "unchecked" })
@ApiStatus.Internal
public Builder kjs$biomes(int weight, ResourceLocation... biomes) {
ResourceKey<Biome>[] resourceKeys = new ResourceKey[biomes.length];
for (int i = 0; i < biomes.length; i++) {
resourceKeys[i] = ResourceKey.create(Registries.BIOME, biomes[i]);
}
return this.biomes(weight, resourceKeys);
}

/// This method should <b>only</b> be used in KubeJS.
@SuppressWarnings("unused")
@ApiStatus.Internal
public Builder kjs$dimensions(ResourceLocation... dimensions) {
return this.dimensions(Arrays.stream(dimensions)
.map(id -> ResourceKey.create(Registries.DIMENSION, id))
.collect(Collectors.toSet()));
}

// endregion

public BedrockOreDefinition register() {
var definition = new BedrockOreDefinition(weight, size, yield, depletionAmount, depletionChance,
depletedYield, materials, biomes, dimensions);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1014,25 +1014,6 @@ public GTRecipeJS adjacentFluids(boolean isReverse, Fluid... fluids) {
return addCondition(AdjacentFluidCondition.fromFluids(fluids).setReverse(isReverse));
}

public GTRecipeJS adjacentFluid(Fluid... fluids) {
return adjacentFluid(false, fluids);
}

public GTRecipeJS adjacentFluid(boolean isReverse, Fluid... fluids) {
return addCondition(AdjacentFluidCondition.fromFluids(fluids).setReverse(isReverse));
}

public GTRecipeJS adjacentFluid(ResourceLocation... tagNames) {
return adjacentFluid(false, tagNames);
}

public GTRecipeJS adjacentFluid(boolean isReverse, ResourceLocation... tagNames) {
List<TagKey<Fluid>> tags = Arrays.stream(tagNames)
.map(id -> TagKey.create(Registries.FLUID, id))
.toList();
return addCondition(AdjacentFluidCondition.fromTags(tags).setReverse(isReverse));
}

public GTRecipeJS adjacentFluidTag(ResourceLocation... tagNames) {
return adjacentFluidTag(false, tagNames);
}
Expand All @@ -1052,14 +1033,6 @@ public GTRecipeJS adjacentBlocks(boolean isReverse, Block... blocks) {
return addCondition(AdjacentBlockCondition.fromBlocks(blocks).setReverse(isReverse));
}

public GTRecipeJS adjacentBlock(Block... blocks) {
return adjacentBlock(false, blocks);
}

public GTRecipeJS adjacentBlock(boolean isReverse, Block... blocks) {
return addCondition(AdjacentBlockCondition.fromBlocks(blocks).setReverse(isReverse));
}

public GTRecipeJS adjacentBlockTag(ResourceLocation... tagNames) {
return adjacentBlockTag(false, tagNames);
}
Expand All @@ -1071,17 +1044,6 @@ public GTRecipeJS adjacentBlockTag(boolean isReverse, ResourceLocation... tagNam
return addCondition(AdjacentBlockCondition.fromTags(tags).setReverse(isReverse));
}

public GTRecipeJS adjacentBlock(ResourceLocation... tagNames) {
return adjacentBlock(false, tagNames);
}

public GTRecipeJS adjacentBlock(boolean isReverse, ResourceLocation... tagNames) {
List<TagKey<Block>> tags = Arrays.stream(tagNames)
.map(id -> TagKey.create(Registries.BLOCK, id))
.toList();
return addCondition(AdjacentBlockCondition.fromTags(tags).setReverse(isReverse));
}

public GTRecipeJS daytime(boolean isNight) {
return addCondition(new DaytimeCondition().setReverse(isNight));
}
Expand Down
25 changes: 0 additions & 25 deletions src/main/java/com/gregtechceu/gtceu/utils/RegistryUtil.java

This file was deleted.