Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
8 changes: 8 additions & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,14 @@ allprojects {
maven(url = "https://maven.glass-launcher.net/snapshots")
maven(url = "https://maven.glass-launcher.net/releases")
maven(url = "https://jitpack.io/")

maven("https://libraries.minecraft.net") {
name = "Mojang"
content {
includeModule("com.mojang", "datafixerupper") // https://github.com/Mojang/DataFixerUpper
}
}

mavenCentral()
exclusiveContent {
forRepository {
Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ fabric.loom.multiProjectOptimisation=true
unsafeevents_version = e31096e
fastutil_version = 8.5.8
caffeine_version = 3.0.5
dfu_version = 6.0.6
dfu_version = 9.1.20
spasm_version = 0.2.2

# Mod Properties
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ public ImmutableMap<Property<?>, Comparable<?>> getEntries() {
protected static <O, S extends State<O, S>> Codec<S> createCodec(Codec<O> codec, Function<O, S> ownerToStateFunction) {
return codec.dispatch("Name", (state) -> state.owner, (object) -> {
S state = ownerToStateFunction.apply(object);
return state.getEntries().isEmpty() ? Codec.unit(state) : state.codec.fieldOf("Properties").codec();
return state.getEntries().isEmpty() ? MapCodec.unit(state) : state.codec.fieldOf("Properties");
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ public static void saveChunk(FlattenedChunk chunk, World world, NbtCompound chun
if (!ChunkSection.isEmpty(section)) {
NbtCompound sectionTag = new NbtCompound();
sectionTag.putByte(HEIGHT_KEY, (byte)sectionY);
sectionTag.put("block_states", CODEC.encodeStart(NbtOps.INSTANCE, section.getBlockStateContainer()).getOrThrow(false, LOGGER::error));
sectionTag.put("block_states", CODEC.encodeStart(NbtOps.INSTANCE, section.getBlockStateContainer()).getOrThrow());
sectionTag.put(METADATA_KEY, section.getMetadataArray().toTag());
sectionTag.put(SKY_LIGHT_KEY, section.getLightArray(LightType.SKY).toTag());
sectionTag.put(BLOCK_LIGHT_KEY, section.getLightArray(LightType.BLOCK).toTag());
Expand Down Expand Up @@ -87,7 +87,7 @@ public static Chunk loadChunk(World world, NbtCompound chunkTag) {
int sectionY = sectionTag.getByte(HEIGHT_KEY);
int index = world.sectionCoordToIndex(sectionY);
if (index < 0 || index >= sections.length) continue;
PalettedContainer<BlockState> blockStates = sectionTag.contains("block_states") ? CODEC.parse(NbtOps.INSTANCE, sectionTag.getCompound("block_states")).promotePartial(errorMessage -> logRecoverableError(xPos, zPos, sectionY, errorMessage)).getOrThrow(false, LOGGER::error) : new PalettedContainer<>(Block.STATE_IDS, States.AIR.get(), PalettedContainer.PaletteProvider.BLOCK_STATE);
PalettedContainer<BlockState> blockStates = sectionTag.contains("block_states") ? CODEC.parse(NbtOps.INSTANCE, sectionTag.getCompound("block_states")).promotePartial(errorMessage -> logRecoverableError(xPos, zPos, sectionY, errorMessage)).getOrThrow() : new PalettedContainer<>(Block.STATE_IDS, States.AIR.get(), PalettedContainer.PaletteProvider.BLOCK_STATE);
ChunkSection chunkSection = new ChunkSection(sectionY, blockStates);
chunkSection.getMetadataArray().copyArray(sectionTag.getByteArray(METADATA_KEY));
chunkSection.getLightArray(LightType.SKY).copyArray(sectionTag.getByteArray(SKY_LIGHT_KEY));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ static <E> void load(RegistryOps.RegistryInfoGetter registryInfoGetter, Resource
try (BufferedReader reader = resource.getReader()) {
JsonElement jsonElement = JsonParser.parseReader(reader);
DataResult<E> dataResult = decoder.parse(registryOps, jsonElement);
E object = dataResult.getOrThrow(false, error -> {});
E object = dataResult.getOrThrow();
newRegistry.add(registryKey, object, resource.isAlwaysStable() ? Lifecycle.stable() : dataResult.lifecycle());
} catch (Exception exception) {
exceptions.put(registryKey, new IllegalStateException(String.format(Locale.ROOT, "Failed to parse %s from pack %s", identifier, resource.getResourcePackName()), exception));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
import net.modificationstation.stationapi.api.util.Identifier;
import net.modificationstation.stationapi.api.resource.Resource;
import net.modificationstation.stationapi.api.resource.ResourceManager;
import org.apache.logging.log4j.Logger;
import org.jetbrains.annotations.Nullable;

import java.io.Reader;
Expand Down Expand Up @@ -55,9 +54,7 @@ public Map<Identifier, List<TrackedEntry>> loadTags(ResourceManager manager) {
JsonElement jsonElement = JsonParser.parseReader(reader);
List<TrackedEntry> list = map.computeIfAbsent(identifier2, identifierx -> new ArrayList<>());
DataResult<TagFile> var10000 = TagFile.CODEC.parse(new Dynamic<>(JsonOps.INSTANCE, jsonElement));
Logger var10002 = LOGGER;
Objects.requireNonNull(var10002);
TagFile tagFile = var10000.getOrThrow(false, var10002::error);
TagFile tagFile = var10000.getOrThrow();
if (tagFile.replace()) list.clear();

String string2 = resource.getResourcePackName();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ final class Impl implements EntryLoader {

public <E> void add(DynamicRegistryManager registryManager, RegistryKey<E> key, Encoder<E> encoder, int rawId, E entry, Lifecycle lifecycle) {
DataResult<JsonElement> dataResult = encoder.encodeStart(RegistryOps.of(JsonOps.INSTANCE, registryManager), entry);
Optional<DataResult.PartialResult<JsonElement>> optional = dataResult.error();
Optional<DataResult.Error<JsonElement>> optional = dataResult.error();
if (optional.isPresent()) {
LOGGER.error("Error adding element: {}", optional.get().message());
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ public static AtlasLoader of(ResourceManager resourceManager, Identifier id) {
ArrayList<AtlasSource> list = new ArrayList<>();
for (Resource resource : resourceManager.getAllResources(identifier))
try (BufferedReader bufferedReader = resource.getReader()) {
list.addAll(AtlasSourceManager.LIST_CODEC.parse(new Dynamic<>(JsonOps.INSTANCE, JsonParser.parseReader(bufferedReader))).getOrThrow(false, LOGGER::error));
list.addAll(AtlasSourceManager.LIST_CODEC.parse(new Dynamic<>(JsonOps.INSTANCE, JsonParser.parseReader(bufferedReader))).getOrThrow());
} catch (Exception exception) {
LOGGER.warn("Failed to parse atlas definition {} in pack {}", identifier, "Default", exception);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.google.common.collect.HashBiMap;
import com.mojang.serialization.Codec;
import com.mojang.serialization.DataResult;
import com.mojang.serialization.MapCodec;
import net.modificationstation.stationapi.api.util.Identifier;

import java.util.List;
Expand All @@ -25,7 +26,7 @@ public class AtlasSourceManager {
public static Codec<AtlasSource> TYPE_CODEC = CODEC.dispatch(AtlasSource::getType, AtlasSourceType::codec);
public static Codec<List<AtlasSource>> LIST_CODEC = TYPE_CODEC.listOf().fieldOf("sources").codec();

private static AtlasSourceType register(String id, Codec<? extends AtlasSource> codec) {
private static AtlasSourceType register(String id, MapCodec<? extends AtlasSource> codec) {
Identifier identifier = Identifier.of(id);
AtlasSourceType atlasSourceType = new AtlasSourceType(codec);
AtlasSourceType atlasSourceType2 = SOURCE_TYPE_BY_ID.putIfAbsent(identifier, atlasSourceType);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package net.modificationstation.stationapi.api.client.texture.atlas;

import com.mojang.serialization.Codec;
import com.mojang.serialization.MapCodec;

public record AtlasSourceType(Codec<? extends AtlasSource> codec) {}
public record AtlasSourceType(MapCodec<? extends AtlasSource> codec) {}

Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
package net.modificationstation.stationapi.api.client.texture.atlas;

import com.mojang.serialization.Codec;
import com.mojang.serialization.MapCodec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import net.modificationstation.stationapi.api.resource.ResourceFinder;
import net.modificationstation.stationapi.api.resource.ResourceManager;

import static net.modificationstation.stationapi.api.StationAPI.NAMESPACE;

public class DirectoryAtlasSource implements AtlasSource {
public static final Codec<DirectoryAtlasSource> CODEC = RecordCodecBuilder.create(instance -> instance.group(Codec.STRING.fieldOf("source").forGetter(directoryAtlasSource -> directoryAtlasSource.source), Codec.STRING.fieldOf("prefix").forGetter(directoryAtlasSource -> directoryAtlasSource.prefix)).apply(instance, DirectoryAtlasSource::new));
public static final MapCodec<DirectoryAtlasSource> CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group(Codec.STRING.fieldOf("source").forGetter(directoryAtlasSource -> directoryAtlasSource.source), Codec.STRING.fieldOf("prefix").forGetter(directoryAtlasSource -> directoryAtlasSource.prefix)).apply(instance, DirectoryAtlasSource::new));
private final String source;
private final String prefix;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package net.modificationstation.stationapi.api.client.texture.atlas;

import com.mojang.serialization.Codec;
import com.mojang.serialization.MapCodec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import net.modificationstation.stationapi.api.resource.ResourceManager;
import net.modificationstation.stationapi.api.resource.metadata.BlockEntry;

public class FilterAtlasSource implements AtlasSource {
public static final Codec<FilterAtlasSource> CODEC = RecordCodecBuilder.create(instance -> instance.group(BlockEntry.CODEC.fieldOf("pattern").forGetter(filterAtlasSource -> filterAtlasSource.pattern)).apply(instance, FilterAtlasSource::new));
public static final MapCodec<FilterAtlasSource> CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group(BlockEntry.CODEC.fieldOf("pattern").forGetter(filterAtlasSource -> filterAtlasSource.pattern)).apply(instance, FilterAtlasSource::new));
private final BlockEntry pattern;

public FilterAtlasSource(BlockEntry pattern) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,16 @@
import com.google.common.base.Supplier;
import com.google.common.base.Suppliers;
import com.mojang.serialization.Codec;
import com.mojang.serialization.MapCodec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap;
import net.modificationstation.stationapi.api.client.resource.metadata.AnimationResourceMetadata;
import net.modificationstation.stationapi.api.client.texture.NativeImage;
import net.modificationstation.stationapi.api.client.texture.SpriteContents;
import net.modificationstation.stationapi.api.client.texture.SpriteDimensions;
import net.modificationstation.stationapi.api.util.Identifier;
import net.modificationstation.stationapi.api.resource.Resource;
import net.modificationstation.stationapi.api.resource.ResourceManager;
import net.modificationstation.stationapi.api.util.Identifier;
import net.modificationstation.stationapi.api.util.math.ColorHelper;
import org.jetbrains.annotations.Nullable;

Expand All @@ -26,7 +27,7 @@
import static net.modificationstation.stationapi.impl.client.texture.StationRenderImpl.LOGGER;

public class PalettedPermutationsAtlasSource implements AtlasSource {
public static final Codec<PalettedPermutationsAtlasSource> CODEC = RecordCodecBuilder.create(instance -> instance.group(Codec.list(Identifier.CODEC).fieldOf("textures").forGetter(palettedPermutationsAtlasSource -> palettedPermutationsAtlasSource.textures), Identifier.CODEC.fieldOf("palette_key").forGetter(palettedPermutationsAtlasSource -> palettedPermutationsAtlasSource.paletteKey), Codec.unboundedMap(Codec.STRING, Identifier.CODEC).fieldOf("permutations").forGetter(palettedPermutationsAtlasSource -> palettedPermutationsAtlasSource.permutations)).apply(instance, PalettedPermutationsAtlasSource::new));
public static final MapCodec<PalettedPermutationsAtlasSource> CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group(Codec.list(Identifier.CODEC).fieldOf("textures").forGetter(palettedPermutationsAtlasSource -> palettedPermutationsAtlasSource.textures), Identifier.CODEC.fieldOf("palette_key").forGetter(palettedPermutationsAtlasSource -> palettedPermutationsAtlasSource.paletteKey), Codec.unboundedMap(Codec.STRING, Identifier.CODEC).fieldOf("permutations").forGetter(palettedPermutationsAtlasSource -> palettedPermutationsAtlasSource.permutations)).apply(instance, PalettedPermutationsAtlasSource::new));
private final List<Identifier> textures;
private final Map<String, Identifier> permutations;
private final Identifier paletteKey;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
package net.modificationstation.stationapi.api.client.texture.atlas;

import com.mojang.serialization.Codec;
import com.mojang.serialization.MapCodec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import net.modificationstation.stationapi.api.util.Identifier;
import net.modificationstation.stationapi.api.resource.Resource;
import net.modificationstation.stationapi.api.resource.ResourceManager;
import net.modificationstation.stationapi.api.util.Identifier;

import java.util.Optional;

import static net.modificationstation.stationapi.impl.client.texture.StationRenderImpl.LOGGER;

public class SingleAtlasSource implements AtlasSource {
public static final Codec<SingleAtlasSource> CODEC = RecordCodecBuilder.create(instance -> instance.group(Identifier.CODEC.fieldOf("resource").forGetter(singleAtlasSource -> singleAtlasSource.resource), Identifier.CODEC.optionalFieldOf("sprite").forGetter(singleAtlasSource -> singleAtlasSource.sprite)).apply(instance, SingleAtlasSource::new));
public static final MapCodec<SingleAtlasSource> CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group(Identifier.CODEC.fieldOf("resource").forGetter(singleAtlasSource -> singleAtlasSource.resource), Identifier.CODEC.optionalFieldOf("sprite").forGetter(singleAtlasSource -> singleAtlasSource.sprite)).apply(instance, SingleAtlasSource::new));
private final Identifier resource;
@SuppressWarnings("OptionalUsedAsFieldOrParameterType")
private final Optional<Identifier> sprite;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
package net.modificationstation.stationapi.api.client.texture.atlas;

import com.mojang.serialization.Codec;
import com.mojang.serialization.MapCodec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import net.minecraft.util.math.MathHelper;
import net.modificationstation.stationapi.api.client.resource.metadata.AnimationResourceMetadata;
import net.modificationstation.stationapi.api.client.texture.MissingSprite;
import net.modificationstation.stationapi.api.client.texture.NativeImage;
import net.modificationstation.stationapi.api.client.texture.SpriteContents;
import net.modificationstation.stationapi.api.client.texture.SpriteDimensions;
import net.modificationstation.stationapi.api.util.Identifier;
import net.modificationstation.stationapi.api.resource.Resource;
import net.modificationstation.stationapi.api.resource.ResourceManager;
import net.modificationstation.stationapi.api.util.Identifier;
import net.modificationstation.stationapi.api.util.dynamic.Codecs;

import java.util.List;
Expand All @@ -19,7 +20,7 @@
import static net.modificationstation.stationapi.impl.client.texture.StationRenderImpl.LOGGER;

public class UnstitchAtlasSource implements AtlasSource {
public static final Codec<UnstitchAtlasSource> CODEC = RecordCodecBuilder.create(instance -> instance.group(
public static final MapCodec<UnstitchAtlasSource> CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group(
Identifier.CODEC.fieldOf("resource").forGetter(unstitchAtlasSource -> unstitchAtlasSource.resource),
Codecs.nonEmptyList(Region.CODEC.listOf()).fieldOf("regions").forGetter(unstitchAtlasSource -> unstitchAtlasSource.regions),
Codec.DOUBLE.optionalFieldOf("divisor_x", 1.0).forGetter(unstitchAtlasSource -> unstitchAtlasSource.divisorX),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,12 @@ public String getKey() {

@Override
public T fromJson(JsonObject json) {
return codec.parse(JsonOps.INSTANCE, json).getOrThrow(false, error -> {});
return codec.parse(JsonOps.INSTANCE, json).getOrThrow();
}

@Override
public JsonObject toJson(T metadata) {
return codec.encodeStart(JsonOps.INSTANCE, metadata).getOrThrow(false, error -> {}).getAsJsonObject();
return codec.encodeStart(JsonOps.INSTANCE, metadata).getOrThrow().getAsJsonObject();
}
};
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package net.modificationstation.stationapi.impl.resource;

import com.mojang.serialization.DataResult;
import it.unimi.dsi.fastutil.objects.ReferenceArrayList;
import lombok.val;
import net.modificationstation.stationapi.api.util.Identifier;
Expand Down Expand Up @@ -51,24 +52,30 @@ public class DefaultResourcePack implements ResourcePack {

@Override
public @Nullable InputSupplier<InputStream> open(ResourceType type, Identifier id) {
return PathUtil.split(id.path).get().map(segments -> {
var result = PathUtil.split(id.path);

if (result.isSuccess()) {
var segments = result.getOrThrow();
String string = id.namespace.toString();
if (NAMESPACE_PATHS.containsKey(type)) for (Path path : NAMESPACE_PATHS.get(type)) {
Path path2 = PathUtil.getPath(path.resolve(string), segments);
if (!Files.exists(path2) || !DirectoryResourcePack.isValidPath(path2)) continue;
return InputSupplier.create(path2);
}
return null;
}, result -> {
LOGGER.error("Invalid path {}: {}", id, result.message());
return null;
});
} else {
LOGGER.error("Invalid path {}: {}", id, result.error().map(DataResult.Error::message));
}

return null;
}

@Override
public void findResources(ResourceType type, Namespace namespace, String prefix, ResultConsumer consumer) {
val atRoot = prefix.startsWith("/");
PathUtil.split(atRoot ? prefix.substring(1) : prefix).get().ifLeft(segments -> {
var result = PathUtil.split(atRoot ? prefix.substring(1) : prefix);

if (result.isSuccess()) {
var segments = result.getOrThrow();
final List<Path> paths;
if (namespace == Namespace.MINECRAFT && atRoot) {
paths = ROOT_PATHS;
Expand All @@ -88,7 +95,9 @@ else if (i > 1) {
map.forEach(consumer);
}
}
}).ifRight(result -> LOGGER.error("Invalid path {}: {}", prefix, result.message()));
} else {
LOGGER.error("Invalid path {}: {}", prefix, result.error().map(DataResult.Error::message));
}
}

private static void collectIdentifiers(ResultConsumer consumer, Namespace namespace, Path root, List<String> prefixSegments, boolean atRoot) {
Expand Down
Loading