From 9496f1478f04f30264d0fe6f1feaef4eb59b8c80 Mon Sep 17 00:00:00 2001 From: mine_diver Date: Sat, 10 Jan 2026 19:48:29 +0500 Subject: [PATCH 01/43] Fixed doors not placing in extended world heights --- .../mixin/flattening/DoorBlockMixin.java | 25 +++++++++++++++++++ .../station-flattening-v0.mixins.json | 1 + 2 files changed, 26 insertions(+) create mode 100644 station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/DoorBlockMixin.java diff --git a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/DoorBlockMixin.java b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/DoorBlockMixin.java new file mode 100644 index 000000000..ac567f62d --- /dev/null +++ b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/DoorBlockMixin.java @@ -0,0 +1,25 @@ +package net.modificationstation.stationapi.mixin.flattening; + +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; +import com.llamalad7.mixinextras.sugar.Local; +import net.minecraft.block.DoorBlock; +import net.minecraft.world.World; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(DoorBlock.class) +class DoorBlockMixin { + @ModifyExpressionValue( + method = "canPlaceAt", + at = @At( + value = "CONSTANT", + args = "intValue=127" + ) + ) + private int stationapi_changeTopYCheck( + int original, + @Local(index = 1, argsOnly = true) World world + ) { + return world.getTopY() - 1; + } +} diff --git a/station-flattening-v0/src/main/resources/station-flattening-v0.mixins.json b/station-flattening-v0/src/main/resources/station-flattening-v0.mixins.json index 144e5e46a..643dfa2aa 100644 --- a/station-flattening-v0/src/main/resources/station-flattening-v0.mixins.json +++ b/station-flattening-v0/src/main/resources/station-flattening-v0.mixins.json @@ -16,6 +16,7 @@ "class_417Mixin", "class_467Mixin", "DimensionMixin", + "DoorBlockMixin", "EntityMixin", "FallingBlockEntityMixin", "FireBlockMixin", From 57c12367a6113e83c42695aa4722e96716a9f416 Mon Sep 17 00:00:00 2001 From: mine_diver Date: Sat, 10 Jan 2026 20:10:07 +0500 Subject: [PATCH 02/43] Fixed pistons not working in extended world heights --- .../mixin/flattening/PistonBlockMixin.java | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/PistonBlockMixin.java b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/PistonBlockMixin.java index ab1556f11..a6608e8ba 100644 --- a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/PistonBlockMixin.java +++ b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/PistonBlockMixin.java @@ -1,5 +1,7 @@ package net.modificationstation.stationapi.mixin.flattening; +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; +import com.llamalad7.mixinextras.sugar.Local; import com.llamalad7.mixinextras.sugar.Share; import com.llamalad7.mixinextras.sugar.ref.LocalRef; import net.minecraft.block.Block; @@ -12,7 +14,9 @@ import net.modificationstation.stationapi.impl.block.StationFlatteningMovingPistonImpl; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Constant; import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.ModifyConstant; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import org.spongepowered.asm.mixin.injection.callback.LocalCapture; @@ -127,4 +131,56 @@ private void stationapi_passPushedBlockState4( ) { StationFlatteningMovingPistonImpl.pushedBlockState = blockStateRef.get(); } + + // Not ModifyExpressionValue because MixinExtras apparently doesn't support expandZeroConditions + @ModifyConstant( + method = "canExtend", + constant = @Constant(expandZeroConditions = Constant.Condition.LESS_THAN_OR_EQUAL_TO_ZERO) + ) + private static int stationapi_canExtend_changeBottomYCheck( + int original, + @Local(index = 0, argsOnly = true) World world + ) { + return world.getBottomY(); + } + + @ModifyExpressionValue( + method = "canExtend", + at = @At( + value = "CONSTANT", + args = "intValue=127" + ) + ) + private static int stationapi_canExtend_changeTopYCheck( + int original, + @Local(index = 0, argsOnly = true) World world + ) { + return world.getTopY() - 1; + } + + // Not ModifyExpressionValue because MixinExtras apparently doesn't support expandZeroConditions + @ModifyConstant( + method = "push", + constant = @Constant(expandZeroConditions = Constant.Condition.LESS_THAN_OR_EQUAL_TO_ZERO) + ) + private int stationapi_push_changeBottomYCheck( + int original, + @Local(index = 1, argsOnly = true) World world + ) { + return world.getBottomY(); + } + + @ModifyExpressionValue( + method = "push", + at = @At( + value = "CONSTANT", + args = "intValue=127" + ) + ) + private int stationapi_push_changeTopYCheck( + int original, + @Local(index = 1, argsOnly = true) World world + ) { + return world.getTopY() - 1; + } } From 149e5022d0aff0df9cb5ddfedfdbd311869f007a Mon Sep 17 00:00:00 2001 From: mine_diver Date: Sun, 11 Jan 2026 04:45:03 +0500 Subject: [PATCH 03/43] Fixed random ticking with custom world height --- .../flattening/MushroomPlantBlockMixin.java | 38 +++++++++++++++++++ .../mixin/flattening/WorldMixin.java | 29 ++++++++++++-- 2 files changed, 64 insertions(+), 3 deletions(-) create mode 100644 station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/MushroomPlantBlockMixin.java diff --git a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/MushroomPlantBlockMixin.java b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/MushroomPlantBlockMixin.java new file mode 100644 index 000000000..4b56f1ab4 --- /dev/null +++ b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/MushroomPlantBlockMixin.java @@ -0,0 +1,38 @@ +package net.modificationstation.stationapi.mixin.flattening; + +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; +import com.llamalad7.mixinextras.sugar.Local; +import net.minecraft.block.MushroomPlantBlock; +import net.minecraft.world.World; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Constant; +import org.spongepowered.asm.mixin.injection.ModifyConstant; + +@Mixin(MushroomPlantBlock.class) +class MushroomPlantBlockMixin { + @ModifyConstant( + method = "canGrow", + constant = @Constant(expandZeroConditions = Constant.Condition.LESS_THAN_ZERO) + ) + private int stationapi_changeBottomYCheck( + int constant, + @Local(index = 1, argsOnly = true) World world + ) { + return world.getBottomY(); + } + + @ModifyExpressionValue( + method = "canGrow", + at = @At( + value = "CONSTANT", + args = "intValue=128" + ) + ) + private int stationapi_changeTopYCheck( + int original, + @Local(index = 1, argsOnly = true) World world + ) { + return world.getTopY(); + } +} diff --git a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/WorldMixin.java b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/WorldMixin.java index a2f0ab83b..30a64f3ff 100644 --- a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/WorldMixin.java +++ b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/WorldMixin.java @@ -1,5 +1,6 @@ package net.modificationstation.stationapi.mixin.flattening; +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import com.llamalad7.mixinextras.sugar.Local; import net.minecraft.block.Block; import net.minecraft.world.World; @@ -7,6 +8,7 @@ import net.minecraft.world.dimension.Dimension; import net.modificationstation.stationapi.api.block.BlockState; import net.modificationstation.stationapi.api.block.States; +import net.modificationstation.stationapi.api.util.math.MathHelper; import net.modificationstation.stationapi.api.world.StationFlatteningWorld; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -76,6 +78,28 @@ private int stationapi_changeCaveSoundY(int y) { return y + getBottomY(); } + @ModifyExpressionValue( + method = "manageChunkUpdatesAndEvents", + at = @At( + value = "CONSTANT", + args = "intValue=80" + ) + ) + private int stationapi_scaleRandomTicksWithWorldHeight(int original) { + return (int) (original * ((double) getHeight() / 128)); + } + + @ModifyExpressionValue( + method = "manageChunkUpdatesAndEvents", + at = @At( + value = "CONSTANT", + args = "intValue=127" + ) + ) + private int stationapi_changeTotalHeightBitMask(int original) { + return MathHelper.smallestEncompassingPowerOfTwo(getHeight()) - 1; + } + @ModifyVariable( method = "manageChunkUpdatesAndEvents", at = @At( @@ -85,7 +109,7 @@ private int stationapi_changeCaveSoundY(int y) { index = 10 ) private int stationapi_changeTickY(int y) { - return y + getBottomY(); + return (y % getHeight()) + getBottomY(); } @Redirect( @@ -189,8 +213,7 @@ private int stationapi_changeBottomY(int constant) { "getBrightness(III)I", "getLightLevel(IIIZ)I", "getBrightness(Lnet/minecraft/world/LightType;III)I", - "getTopSolidBlockY", - "manageChunkUpdatesAndEvents" + "getTopSolidBlockY" }, constant = @Constant(intValue = 127) ) From 58be240168d4c705ffb12dc29988037231b79d2c Mon Sep 17 00:00:00 2001 From: mine_diver Date: Wed, 14 Jan 2026 20:57:02 +0500 Subject: [PATCH 04/43] Insane how I missed this one --- .../src/main/resources/station-flattening-v0.mixins.json | 1 + 1 file changed, 1 insertion(+) diff --git a/station-flattening-v0/src/main/resources/station-flattening-v0.mixins.json b/station-flattening-v0/src/main/resources/station-flattening-v0.mixins.json index 643dfa2aa..bd1655d7a 100644 --- a/station-flattening-v0/src/main/resources/station-flattening-v0.mixins.json +++ b/station-flattening-v0/src/main/resources/station-flattening-v0.mixins.json @@ -24,6 +24,7 @@ "ItemStackMixin", "MapItemMixin", "MobSpawnerLogicMixin", + "MushroomPlantBlockMixin", "NetherCaveGenMixin", "NetherChunkGeneratorMixin", "OakTreeFeatureMixin", From d169a899e1ce85777d391d8df3ff56afc754cf87 Mon Sep 17 00:00:00 2001 From: mine_diver Date: Sun, 18 Jan 2026 22:46:47 +0500 Subject: [PATCH 05/43] Better handling of registry entries --- .../mixin/flattening/BlockMixin.java | 2 +- .../mixin/flattening/ItemMixin.java | 2 +- .../stationapi/api/registry/Registry.java | 2 +- .../api/registry/RegistryEntry.java | 203 ++++++++++-------- .../api/registry/SimpleRegistry.java | 10 +- 5 files changed, 125 insertions(+), 94 deletions(-) diff --git a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/BlockMixin.java b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/BlockMixin.java index d69b7cf23..9c42a64c0 100644 --- a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/BlockMixin.java +++ b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/BlockMixin.java @@ -82,7 +82,7 @@ abstract class BlockMixin implements StationFlatteningBlock, StationFlatteningBl @Shadow public abstract void onBreak(World world, int x, int y, int z); @Unique - private RegistryEntry.Reference stationapi_registryEntry; + private RegistryEntry.Reference.IntrusiveReserved stationapi_registryEntry; @Override @Unique diff --git a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/ItemMixin.java b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/ItemMixin.java index 5b936d26f..62a2cdbd5 100644 --- a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/ItemMixin.java +++ b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/ItemMixin.java @@ -33,7 +33,7 @@ abstract class ItemMixin implements StationFlatteningItem { @Shadow @Final public int id; @Unique - private RegistryEntry.Reference stationapi_registryEntry; + private RegistryEntry.Reference.IntrusiveReserved stationapi_registryEntry; @Override @Unique diff --git a/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/Registry.java b/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/Registry.java index b7f9f512e..aab7aff2a 100644 --- a/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/Registry.java +++ b/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/Registry.java @@ -377,7 +377,7 @@ static BulkBiConsumer register(Registry registry, * @param value the value * @return reference containing the reserved raw ID */ - RegistryEntry.Reference createReservedEntry(int rawId, T value); + RegistryEntry.Reference.IntrusiveReserved createReservedEntry(int rawId, T value); /** * {@return the reference registry entry for the value assigned {@code rawId}, or an diff --git a/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/RegistryEntry.java b/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/RegistryEntry.java index 0eb63a921..f03ffbe4f 100644 --- a/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/RegistryEntry.java +++ b/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/RegistryEntry.java @@ -1,8 +1,6 @@ package net.modificationstation.stationapi.api.registry; import com.mojang.datafixers.util.Either; -import net.minecraft.block.Block; -import net.minecraft.item.Item; import net.modificationstation.stationapi.api.tag.TagKey; import net.modificationstation.stationapi.api.util.Identifier; import org.jetbrains.annotations.Nullable; @@ -97,63 +95,15 @@ public Stream> streamTags() { } } - class Reference implements RegistryEntry { - private final RegistryEntryOwner owner; - private Set> tags = Set.of(); - private final net.modificationstation.stationapi.api.registry.RegistryEntry.Reference.Type referenceType; - /** - * Isn't actually used for storing the raw ID. - * The only purpose for this field is to be able - * to override raw IDs from {@link Block} - * or {@link Item} constructors before actually - * registering them. - */ - private int reservedRawId; - @Nullable - private RegistryKey registryKey; - @Nullable - private T value; - - private Reference(net.modificationstation.stationapi.api.registry.RegistryEntry.Reference.Type referenceType, RegistryEntryOwner owner, int reservedRawId, @Nullable RegistryKey registryKey, @Nullable T value) { - this.owner = owner; - this.referenceType = referenceType; - this.reservedRawId = reservedRawId; - this.registryKey = registryKey; - this.value = value; - } - - public static Reference standAlone(RegistryEntryOwner owner, RegistryKey registryKey) { - return new Reference<>(RegistryEntry.Reference.Type.STAND_ALONE, owner, -1, registryKey, null); - } - - /** @deprecated */ - @Deprecated - public static Reference intrusive(RegistryEntryOwner owner, @Nullable T value) { - return new Reference<>(RegistryEntry.Reference.Type.INTRUSIVE, owner, -1, null, value); - } + abstract class Reference implements RegistryEntry { + final RegistryEntryOwner owner; + private Set> tags = Set.of(); - static Reference intrusive(RegistryEntryOwner owner, int reservedRawId, @Nullable T value) { - return new Reference<>(net.modificationstation.stationapi.api.registry.RegistryEntry.Reference.Type.INTRUSIVE, owner, reservedRawId, null, value); - } - - public int reservedRawId() { - if (this.reservedRawId < 0) - throw new IllegalStateException("Trying to access unbound value '" + (value == null ? registryKey : value) + "' from registry " + this.owner); - else return reservedRawId; - } - - public RegistryKey registryKey() { - if (this.registryKey == null) - throw new IllegalStateException("Trying to access unbound value '" + this.value + "' from registry " + this.owner); - else return registryKey; + private Reference(RegistryEntryOwner owner) { + this.owner = owner; } - @Override - public T value() { - if (value == null) - throw new IllegalStateException("Trying to access unbound value '" + registryKey + "' from registry " + owner); - else return value; - } + public abstract RegistryKey registryKey(); @Override public boolean matchesId(Identifier id) { @@ -161,77 +111,158 @@ public boolean matchesId(Identifier id) { } @Override - public boolean matchesKey(RegistryKey key) { + public boolean matchesKey(RegistryKey key) { return registryKey() == key; } @Override - public boolean isIn(TagKey tag) { + public boolean isIn(TagKey tag) { return tags.contains(tag); } @Override - public boolean matches(Predicate> predicate) { + public boolean matches(Predicate> predicate) { return predicate.test(registryKey()); } @Override - public boolean ownerEquals(RegistryEntryOwner owner) { + public boolean ownerEquals(RegistryEntryOwner owner) { return this.owner.ownerEquals(owner); } @Override - public Either, T> getKeyOrValue() { + public Either, ENTRY> getKeyOrValue() { return Either.left(registryKey()); } @Override - public Optional> getKey() { + public Optional> getKey() { return Optional.of(registryKey()); } @Override - public RegistryEntry.Type getType() { - return RegistryEntry.Type.REFERENCE; + public Type getType() { + return Type.REFERENCE; } - boolean hasRawId() { - return reservedRawId >= 0; + abstract void setRegistryKey(RegistryKey registryKey); + + abstract void setValue(ENTRY value); + + void setTags(Collection> tags) { + this.tags = Set.copyOf(tags); } @Override - public boolean hasKeyAndValue() { - return registryKey != null && value != null; + public Stream> streamTags() { + return this.tags.stream(); } - void setRegistryKey(RegistryKey registryKey) { - if (this.registryKey != null && registryKey != this.registryKey) - throw new IllegalStateException("Can't change holder key: existing=" + this.registryKey + ", new=" + registryKey); - else this.registryKey = registryKey; + public String toString() { + return "Reference{" + registryKey() + "=" + value() + "}"; } - void setValue(T value) { - if (this.referenceType == RegistryEntry.Reference.Type.INTRUSIVE && this.value != value) - throw new IllegalStateException("Can't change holder " + this.registryKey + " value: existing=" + this.value + ", new=" + value); - else this.value = value; + static Reference standAlone(RegistryEntryOwner owner, RegistryKey registryKey) { + return new StandAlone<>(owner, registryKey); } - void setTags(Collection> tags) { - this.tags = Set.copyOf(tags); + static Reference intrusive(RegistryEntryOwner owner, ENTRY value) { + return new Intrusive<>(owner, value); } - @Override - public Stream> streamTags() { - return this.tags.stream(); + static Reference intrusive(RegistryEntryOwner owner, ENTRY value, int reservedRawId) { + return new IntrusiveReserved<>(owner, value, reservedRawId); } - public String toString() { - return "Reference{" + this.registryKey + "=" + this.value + "}"; + public static class StandAlone extends Reference { + private final RegistryKey registryKey; + private @Nullable ENTRY value; + + private StandAlone(RegistryEntryOwner owner, RegistryKey registryKey) { + super(owner); + this.registryKey = registryKey; + } + + @Override + public RegistryKey registryKey() { + return registryKey; + } + + @Override + public ENTRY value() { + if (value == null) + throw new IllegalStateException("Trying to access unbound value '" + registryKey + "' from registry " + owner); + return value; + } + + @Override + public boolean hasKeyAndValue() { + return registryKey != null && value != null; + } + + @Override + void setRegistryKey(RegistryKey registryKey) { + if (registryKey != this.registryKey) + throw new IllegalStateException("Can't change holder key: existing=" + this.registryKey + ", new=" + registryKey); + } + + @Override + void setValue(@Nullable ENTRY value) { + this.value = value; + } } - enum Type { - STAND_ALONE, - INTRUSIVE + public static class Intrusive extends Reference { + private @Nullable RegistryKey registryKey; + private final ENTRY value; + + private Intrusive(RegistryEntryOwner owner, ENTRY value) { + super(owner); + this.value = value; + } + + @Override + public RegistryKey registryKey() { + if (this.registryKey == null) + throw new IllegalStateException("Trying to access unbound value '" + this.value + "' from registry " + this.owner); + return registryKey; + } + + @Override + void setRegistryKey(RegistryKey registryKey) { + if (this.registryKey != null && registryKey != this.registryKey) + throw new IllegalStateException("Can't change holder key: existing=" + this.registryKey + ", new=" + registryKey); + this.registryKey = registryKey; + } + + @Override + void setValue(ENTRY value) { + if (this.value != value) + throw new IllegalStateException("Can't change holder " + this.registryKey + " value: existing=" + this.value + ", new=" + value); + } + + @Override + public ENTRY value() { + return value; + } + + @Override + public boolean hasKeyAndValue() { + return registryKey != null && value != null; + } + } + + public static class IntrusiveReserved extends Intrusive { + private final int reservedRawId; + + private IntrusiveReserved(RegistryEntryOwner owner, ENTRY value, int reservedRawId) { + super(owner, value); + this.reservedRawId = reservedRawId; + } + + public int reservedRawId() { + return reservedRawId; + } } } diff --git a/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/SimpleRegistry.java b/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/SimpleRegistry.java index 1976747c5..ff0dc218e 100644 --- a/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/SimpleRegistry.java +++ b/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/SimpleRegistry.java @@ -159,8 +159,8 @@ private Reference set(int rawId, RegistryKey registryKey, T value, Lifecyc throw new AssertionError("Missing intrusive holder for " + registryKey + ":" + value); reference.setRegistryKey(registryKey); - if (reference.hasRawId()) { - int reservedRawId = reference.reservedRawId(); + if (reference instanceof Reference.IntrusiveReserved reserved) { + int reservedRawId = reserved.reservedRawId(); if (checkReservation && reservedRawId != rawId) throw new RuntimeException("Attempted to register a reserved entry with raw ID " + reservedRawId + " under a different raw ID " + rawId + "!"); rawId = reservedRawId; @@ -414,18 +414,18 @@ private void assertIntrusive() { public Reference createEntry(T value) { assertIntrusive(); assertNotFrozen(); - //noinspection unchecked,deprecation,DataFlowIssue + //noinspection unchecked,DataFlowIssue return intrusiveValueToEntry.computeIfAbsent(value, valuex -> Reference.intrusive(getReadOnlyWrapper(), (T) valuex)); } @Override - public Reference createReservedEntry(int rawId, T value) { + public Reference.IntrusiveReserved createReservedEntry(int rawId, T value) { assertIntrusive(); assertNotFrozen(); final int newRawId = rawId < 0 ? nextId : rawId; if (this.nextId <= newRawId) this.nextId = newRawId + 1; //noinspection unchecked,DataFlowIssue - return intrusiveValueToEntry.computeIfAbsent(value, valuex -> Reference.intrusive(getReadOnlyWrapper(), newRawId, (T) valuex)); + return (Reference.IntrusiveReserved) intrusiveValueToEntry.computeIfAbsent(value, valuex -> Reference.intrusive(getReadOnlyWrapper(), (T) valuex, newRawId)); } @Override From 9f879224e1799933cfee75c3f5991b6d9d87fd5c Mon Sep 17 00:00:00 2001 From: mine_diver Date: Mon, 19 Jan 2026 19:01:24 +0500 Subject: [PATCH 06/43] LogicalRegistry --- .../api/registry/LogicalRegistry.java | 9 +++ .../api/registry/MutableLogicalRegistry.java | 9 +++ .../api/registry/SimpleLogicalRegistry.java | 62 +++++++++++++++++++ 3 files changed, 80 insertions(+) create mode 100644 station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/LogicalRegistry.java create mode 100644 station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/MutableLogicalRegistry.java create mode 100644 station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/SimpleLogicalRegistry.java diff --git a/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/LogicalRegistry.java b/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/LogicalRegistry.java new file mode 100644 index 000000000..2b202c44a --- /dev/null +++ b/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/LogicalRegistry.java @@ -0,0 +1,9 @@ +package net.modificationstation.stationapi.api.registry; + +import java.util.Optional; + +public interface LogicalRegistry extends Registry { + Optional> getEntryByLogicalId(int logicalId); + + int getLogicalId(ENTRY entry); +} diff --git a/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/MutableLogicalRegistry.java b/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/MutableLogicalRegistry.java new file mode 100644 index 000000000..7dea95ccb --- /dev/null +++ b/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/MutableLogicalRegistry.java @@ -0,0 +1,9 @@ +package net.modificationstation.stationapi.api.registry; + +import com.mojang.serialization.Lifecycle; + +public interface MutableLogicalRegistry extends LogicalRegistry { + RegistryEntry.Reference set(int rawId, int logicalId, RegistryKey registryKey, ENTRY value, Lifecycle lifecycle); + + RegistryEntry.Reference add(int logicalId, RegistryKey registryKey, ENTRY value, Lifecycle lifecycle); +} diff --git a/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/SimpleLogicalRegistry.java b/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/SimpleLogicalRegistry.java new file mode 100644 index 000000000..91f9f5b47 --- /dev/null +++ b/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/SimpleLogicalRegistry.java @@ -0,0 +1,62 @@ +package net.modificationstation.stationapi.api.registry; + +import com.mojang.serialization.Lifecycle; +import it.unimi.dsi.fastutil.ints.*; +import it.unimi.dsi.fastutil.objects.Reference2IntMap; +import it.unimi.dsi.fastutil.objects.Reference2IntOpenHashMap; +import net.modificationstation.stationapi.api.util.Util; + +import java.util.Optional; + +/** + * Treats raw IDs as physical IDs and introduces logical IDs that are able to override physical IDs. + *

+ * Logical IDs are not remapped and can be negative. + * + * @param the object stored in the registry + */ +public class SimpleLogicalRegistry extends SimpleRegistry implements MutableLogicalRegistry { + private final Int2ReferenceMap> logicalIdToEntry = new Int2ReferenceOpenHashMap<>(); + private final Reference2IntMap entryToLogicalId = new Reference2IntOpenHashMap<>(); + + public SimpleLogicalRegistry(RegistryKey> key, Lifecycle lifecycle) { + super(key, lifecycle); + } + + public SimpleLogicalRegistry(RegistryKey> key, Lifecycle lifecycle, boolean intrusive) { + super(key, lifecycle, intrusive); + } + + @Override + public Optional> getEntryByLogicalId(int logicalId) { + return Optional.ofNullable(logicalIdToEntry.get(logicalId)).or(() -> getEntry(logicalId)); + } + + @Override + public int getLogicalId(ENTRY entry) { + if (entryToLogicalId.containsKey(entry)) + return entryToLogicalId.getInt(entry); + return getRawId(entry); + } + + private void setLogicalId(int logicalId, RegistryEntry.Reference ref) { + if (logicalIdToEntry.containsKey(logicalId)) + Util.throwOrPause(new IllegalStateException("Adding duplicate logical ID '" + logicalId + "' to registry")); + logicalIdToEntry.put(logicalId, ref); + entryToLogicalId.put(ref.value(), logicalId); + } + + @Override + public RegistryEntry.Reference set(int rawId, int logicalId, RegistryKey registryKey, ENTRY value, Lifecycle lifecycle) { + final var ref = set(rawId, registryKey, value, lifecycle); + setLogicalId(logicalId, ref); + return ref; + } + + @Override + public RegistryEntry.Reference add(int logicalId, RegistryKey registryKey, ENTRY value, Lifecycle lifecycle) { + final var ref = add(registryKey, value, lifecycle); + setLogicalId(logicalId, ref); + return ref; + } +} From ab5d3563694098ead965f8498d08e66eef4d7877 Mon Sep 17 00:00:00 2001 From: mine_diver Date: Mon, 19 Jan 2026 20:06:24 +0500 Subject: [PATCH 07/43] RegistryEvent interacting directly with the registry instance --- .../registry/MessageListenerRegistryEvent.java | 3 +-- .../api/registry/MessageListenerRegistry.java | 14 ++++++++------ .../api/event/registry/RegistryEvent.java | 15 +++++++++------ 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/station-networking-v0/src/main/java/net/modificationstation/stationapi/api/event/registry/MessageListenerRegistryEvent.java b/station-networking-v0/src/main/java/net/modificationstation/stationapi/api/event/registry/MessageListenerRegistryEvent.java index a58b452c6..ac6ce7e8f 100644 --- a/station-networking-v0/src/main/java/net/modificationstation/stationapi/api/event/registry/MessageListenerRegistryEvent.java +++ b/station-networking-v0/src/main/java/net/modificationstation/stationapi/api/event/registry/MessageListenerRegistryEvent.java @@ -5,7 +5,6 @@ import net.modificationstation.stationapi.api.StationAPI; import net.modificationstation.stationapi.api.network.packet.MessagePacket; import net.modificationstation.stationapi.api.registry.MessageListenerRegistry; -import net.modificationstation.stationapi.api.registry.Registry; import java.util.function.BiConsumer; @@ -15,7 +14,7 @@ * @author mine_diver */ @EventPhases(StationAPI.INTERNAL_PHASE) -public class MessageListenerRegistryEvent extends RegistryEvent.EntryTypeBound, Registry>> { +public class MessageListenerRegistryEvent extends RegistryEvent.EntryTypeBound, MessageListenerRegistry> { public MessageListenerRegistryEvent() { super(MessageListenerRegistry.INSTANCE); } diff --git a/station-networking-v0/src/main/java/net/modificationstation/stationapi/api/registry/MessageListenerRegistry.java b/station-networking-v0/src/main/java/net/modificationstation/stationapi/api/registry/MessageListenerRegistry.java index 6a0b50ada..8495c0860 100644 --- a/station-networking-v0/src/main/java/net/modificationstation/stationapi/api/registry/MessageListenerRegistry.java +++ b/station-networking-v0/src/main/java/net/modificationstation/stationapi/api/registry/MessageListenerRegistry.java @@ -1,7 +1,6 @@ package net.modificationstation.stationapi.api.registry; -import lombok.AccessLevel; -import lombok.NoArgsConstructor; +import com.mojang.serialization.Lifecycle; import net.minecraft.entity.player.PlayerEntity; import net.modificationstation.stationapi.api.network.packet.MessagePacket; @@ -16,8 +15,11 @@ * * @author mine_diver */ -@NoArgsConstructor(access = AccessLevel.PRIVATE) -public final class MessageListenerRegistry { - public static final RegistryKey>> KEY = RegistryKey.ofRegistry(NAMESPACE.id("message_listeners")); - public static final Registry> INSTANCE = Registries.create(KEY); +public class MessageListenerRegistry extends SimpleRegistry> { + public static final RegistryKey KEY = RegistryKey.ofRegistry(NAMESPACE.id("message_listeners")); + public static final MessageListenerRegistry INSTANCE = Registries.create(KEY, new MessageListenerRegistry(), Lifecycle.experimental()); + + private MessageListenerRegistry() { + super(KEY, Lifecycle.experimental()); + } } diff --git a/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/event/registry/RegistryEvent.java b/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/event/registry/RegistryEvent.java index ce6958523..894eb624b 100644 --- a/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/event/registry/RegistryEvent.java +++ b/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/event/registry/RegistryEvent.java @@ -1,9 +1,12 @@ package net.modificationstation.stationapi.api.event.registry; +import com.mojang.serialization.Lifecycle; import lombok.AccessLevel; import lombok.RequiredArgsConstructor; import net.mine_diver.unsafeevents.Event; +import net.modificationstation.stationapi.api.registry.MutableRegistry; import net.modificationstation.stationapi.api.registry.Registry; +import net.modificationstation.stationapi.api.registry.RegistryKey; import net.modificationstation.stationapi.api.util.Identifier; import net.modificationstation.stationapi.api.util.Namespace; import net.modificationstation.stationapi.api.util.function.BulkBiConsumer; @@ -24,32 +27,32 @@ public abstract class RegistryEvent> extends Event */ public final REGISTRY registry; - public static abstract class EntryTypeBound> extends RegistryEvent { + public static abstract class EntryTypeBound> extends RegistryEvent { protected EntryTypeBound(REGISTRY registry) { super(registry); } public ENTRY register(Identifier id, ENTRY entry) { - return Registry.register(registry, id, entry); + return registry.add(RegistryKey.of(registry.getKey(), id), entry, Lifecycle.stable()).value(); } public ENTRY register(int rawId, Identifier id, ENTRY entry) { - return Registry.register(registry, rawId, id, entry); + return registry.set(rawId, RegistryKey.of(registry.getKey(), id), entry, Lifecycle.stable()).value(); } @Contract(pure = true) public BulkBiConsumer register() { - return Registry.register(registry); + return BulkBiConsumer.of(this::register); } @Contract(pure = true) public BulkBiConsumer register(Namespace namespace) { - return Registry.register(registry, namespace); + return BulkBiConsumer.of((id, entry) -> register(namespace.id(id), entry)); } @Contract(pure = true) public BulkBiConsumer register(ToIntFunction rawIdGetter, Namespace namespace) { - return Registry.register(registry, rawIdGetter, namespace); + return BulkBiConsumer.of((id, entry) -> register(rawIdGetter.applyAsInt(entry), namespace.id(id), entry)); } } } From e8c7546840283768d93dec3c6cec7621802c545f Mon Sep 17 00:00:00 2001 From: mine_diver Date: Mon, 19 Jan 2026 20:31:48 +0500 Subject: [PATCH 08/43] RegistryEvent MutableLogicalRegistry subtype --- .../api/event/registry/RegistryEvent.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/event/registry/RegistryEvent.java b/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/event/registry/RegistryEvent.java index 894eb624b..a916fc948 100644 --- a/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/event/registry/RegistryEvent.java +++ b/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/event/registry/RegistryEvent.java @@ -4,6 +4,7 @@ import lombok.AccessLevel; import lombok.RequiredArgsConstructor; import net.mine_diver.unsafeevents.Event; +import net.modificationstation.stationapi.api.registry.MutableLogicalRegistry; import net.modificationstation.stationapi.api.registry.MutableRegistry; import net.modificationstation.stationapi.api.registry.Registry; import net.modificationstation.stationapi.api.registry.RegistryKey; @@ -55,4 +56,18 @@ public BulkBiConsumer register(ToIntFunction rawIdGetter, return BulkBiConsumer.of((id, entry) -> register(rawIdGetter.applyAsInt(entry), namespace.id(id), entry)); } } + + public static abstract class Logical & MutableRegistry> extends EntryTypeBound { + protected Logical(REGISTRY registry) { + super(registry); + } + + public ENTRY registerLogical(int logicalId, Identifier id, ENTRY entry) { + return registry.add(logicalId, RegistryKey.of(registry.getKey(), id), entry, Lifecycle.stable()).value(); + } + + public ENTRY registerLogical(int rawId, int logicalId, Identifier id, ENTRY entry) { + return registry.set(rawId, logicalId, RegistryKey.of(registry.getKey(), id), entry, Lifecycle.stable()).value(); + } + } } From 7aa0a9d385efaa77a8118e8adf42addf3dad8878 Mon Sep 17 00:00:00 2001 From: ProdOrDev <148014775+ProdOrDev@users.noreply.github.com> Date: Wed, 28 Jan 2026 10:06:56 -0500 Subject: [PATCH 09/43] Update buildscript (#246) --- build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 2fbae1742..35fe4b1d0 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -130,7 +130,7 @@ allprojects { // Include license inside of the mod jar configure("jar") { - from("LICENSE") { + from(rootProject.file("LICENSE")) { rename { "${it}_${project.properties["archivesBaseName"]}" } } } @@ -294,4 +294,4 @@ tasks.register("testJar") { // Gradle I swear to fuck stop trying to do bullshit to the maven - calm tasks.withType { enabled = false -} \ No newline at end of file +} From 2f6ec0b08bdc3a804a36a74c46385dc801db281f Mon Sep 17 00:00:00 2001 From: calmilamsy Date: Wed, 4 Feb 2026 13:40:47 +0000 Subject: [PATCH 10/43] Update README.md --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index ed8bdfa91..9dd767f25 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,6 @@ # StationAPI for Minecraft Beta 1.7.3 Babric - +## For the code in actual releases, see the [main branch](https://github.com/ModificationStation/StationAPI/tree/main) A general use API for Fabric Loader mods on legacy Minecraft versions. From 3ab44ee19c94430cfe582843351495dae5cac2e7 Mon Sep 17 00:00:00 2001 From: mine_diver Date: Sat, 28 Feb 2026 15:46:25 +0500 Subject: [PATCH 11/43] Tags getter --- .../stationapi/api/registry/RegistryEntry.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/RegistryEntry.java b/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/RegistryEntry.java index f03ffbe4f..09d38f423 100644 --- a/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/RegistryEntry.java +++ b/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/RegistryEntry.java @@ -26,6 +26,8 @@ public interface RegistryEntry { Stream> streamTags(); + Set> getTags(); + Either, T> getKeyOrValue(); Optional> getKey(); @@ -93,6 +95,11 @@ public boolean ownerEquals(RegistryEntryOwner owner) { public Stream> streamTags() { return Stream.of(); } + + @Override + public Set> getTags() { + return Set.of(); + } } abstract class Reference implements RegistryEntry { @@ -158,6 +165,11 @@ public Stream> streamTags() { return this.tags.stream(); } + @Override + public Set> getTags() { + return tags; + } + public String toString() { return "Reference{" + registryKey() + "=" + value() + "}"; } From 39a1986a9b1673ad1e95ba67cbf614667f36397c Mon Sep 17 00:00:00 2001 From: mine_diver Date: Sun, 22 Mar 2026 18:28:48 +0500 Subject: [PATCH 12/43] VineFlower genSources mixin injection points fixed --- .../client/ClientNetworkHandlerMixin.java | 37 ++++--------------- .../mixin/flattening/ItemMixin.java | 7 ++-- .../mixin/item/PlayerInventoryMixin.java | 26 +++++++------ .../mixin/recipe/CraftingResultMixin.java | 10 +++-- .../ServerLoginNetworkHandlerMixin.java | 32 ++++++++-------- 5 files changed, 46 insertions(+), 66 deletions(-) diff --git a/station-entities-v0/src/main/java/net/modificationstation/stationapi/mixin/entity/client/ClientNetworkHandlerMixin.java b/station-entities-v0/src/main/java/net/modificationstation/stationapi/mixin/entity/client/ClientNetworkHandlerMixin.java index d940a5c53..aeedadb6a 100644 --- a/station-entities-v0/src/main/java/net/modificationstation/stationapi/mixin/entity/client/ClientNetworkHandlerMixin.java +++ b/station-entities-v0/src/main/java/net/modificationstation/stationapi/mixin/entity/client/ClientNetworkHandlerMixin.java @@ -1,20 +1,16 @@ package net.modificationstation.stationapi.mixin.entity.client; +import com.llamalad7.mixinextras.sugar.Local; import net.minecraft.client.network.ClientNetworkHandler; import net.minecraft.entity.Entity; import net.minecraft.network.packet.s2c.play.EntitySpawnS2CPacket; import net.minecraft.world.ClientWorld; import net.modificationstation.stationapi.api.client.entity.factory.EntityWorldAndPosFactory; import net.modificationstation.stationapi.api.client.registry.EntityHandlerRegistry; -import org.objectweb.asm.Opcodes; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.ModifyVariable; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.LocalCapture; import static net.modificationstation.stationapi.api.util.Identifier.of; @@ -22,28 +18,6 @@ class ClientNetworkHandlerMixin { @Shadow private ClientWorld world; - @Unique - private double - capturedX, - capturedY, - capturedZ; - - @Inject( - method = "onEntitySpawn", - at = @At( - value = "FIELD", - target = "Lnet/minecraft/network/packet/s2c/play/EntitySpawnS2CPacket;z:I", - opcode = Opcodes.GETFIELD, - shift = At.Shift.BY, - by = 5 - ), - locals = LocalCapture.CAPTURE_FAILHARD - ) - private void stationapi_captureCoords(EntitySpawnS2CPacket packet, CallbackInfo ci, double var2, double var4, double var6) { - capturedX = var2; - capturedY = var4; - capturedZ = var6; - } @ModifyVariable( method = "onEntitySpawn", @@ -53,10 +27,15 @@ private void stationapi_captureCoords(EntitySpawnS2CPacket packet, CallbackInfo ordinal = 0 ) ) - private Entity stationapi_onEntitySpawn(Entity entity, EntitySpawnS2CPacket packet) { + private Entity stationapi_onEntitySpawn( + Entity entity, EntitySpawnS2CPacket packet, + @Local(index = 2) double trackedPosX, + @Local(index = 4) double trackedPosY, + @Local(index = 6) double trackedPosZ + ) { EntityWorldAndPosFactory entityHandler = EntityHandlerRegistry.INSTANCE.get(of(String.valueOf(packet.entityType))); if (entityHandler != null) - entity = entityHandler.create(world, capturedX, capturedY, capturedZ); + entity = entityHandler.create(world, trackedPosX, trackedPosY, trackedPosZ); return entity; } } diff --git a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/ItemMixin.java b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/ItemMixin.java index 62a2cdbd5..efccfb782 100644 --- a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/ItemMixin.java +++ b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/ItemMixin.java @@ -91,10 +91,9 @@ private static void stationapi_setupRegistry(CallbackInfo ci) { method = "", index = 1, at = @At( - value = "CONSTANT", - args = "intValue=64", - shift = At.Shift.BY, - by = -2 + value = "INVOKE", + target = "Ljava/lang/Object;()V", + shift = At.Shift.AFTER ), argsOnly = true ) diff --git a/station-items-v0/src/main/java/net/modificationstation/stationapi/mixin/item/PlayerInventoryMixin.java b/station-items-v0/src/main/java/net/modificationstation/stationapi/mixin/item/PlayerInventoryMixin.java index 5cc8af209..1ca4cbd48 100644 --- a/station-items-v0/src/main/java/net/modificationstation/stationapi/mixin/item/PlayerInventoryMixin.java +++ b/station-items-v0/src/main/java/net/modificationstation/stationapi/mixin/item/PlayerInventoryMixin.java @@ -1,5 +1,8 @@ package net.modificationstation.stationapi.mixin.item; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.llamalad7.mixinextras.sugar.Local; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.item.ItemStack; import net.modificationstation.stationapi.impl.item.StationNBTSetter; @@ -8,10 +11,7 @@ import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Redirect; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import org.spongepowered.asm.mixin.injection.callback.LocalCapture; import java.util.Objects; @@ -20,18 +20,20 @@ class PlayerInventoryMixin { @Shadow public ItemStack[] main; - @Inject( + @WrapOperation( method = "combineStacks", at = @At( - value = "INVOKE", - target = "Lnet/minecraft/item/ItemStack;(III)V", - shift = At.Shift.BY, - by = 2 - ), - locals = LocalCapture.CAPTURE_FAILHARD + value = "NEW", + target = "(III)Lnet/minecraft/item/ItemStack;" + ) ) - private void stationapi_newItemStack(ItemStack par1, CallbackInfoReturnable cir, int var2, int var3, int var4) { - StationNBTSetter.cast(main[var4]).setStationNbt(par1.getStationNbt()); + private ItemStack stationapi_newItemStack( + int id, int count, int damage, Operation original, + @Local(index = 1, argsOnly = true) ItemStack stack + ) { + final var newStack = original.call(id, count, damage); + StationNBTSetter.cast(newStack).setStationNbt(stack.getStationNbt()); + return newStack; } @Redirect( diff --git a/station-recipes-v0/src/main/java/net/modificationstation/stationapi/mixin/recipe/CraftingResultMixin.java b/station-recipes-v0/src/main/java/net/modificationstation/stationapi/mixin/recipe/CraftingResultMixin.java index 770760d0c..bbb916b62 100644 --- a/station-recipes-v0/src/main/java/net/modificationstation/stationapi/mixin/recipe/CraftingResultMixin.java +++ b/station-recipes-v0/src/main/java/net/modificationstation/stationapi/mixin/recipe/CraftingResultMixin.java @@ -1,5 +1,6 @@ package net.modificationstation.stationapi.mixin.recipe; +import com.llamalad7.mixinextras.sugar.Local; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.inventory.Inventory; import net.minecraft.item.ItemStack; @@ -12,7 +13,6 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.LocalCapture; @Mixin(CraftingResultSlot.class) class CraftingResultMixin { @@ -30,10 +30,12 @@ class CraftingResultMixin { target = "Lnet/minecraft/inventory/Inventory;setStack(ILnet/minecraft/item/ItemStack;)V", shift = At.Shift.BY, by = 2 - ), - locals = LocalCapture.CAPTURE_FAILHARD + ) ) - private void stationapi_onCrafted(ItemStack arg, CallbackInfo ci, int var2, ItemStack var3) { + private void stationapi_onCrafted( + ItemStack arg, CallbackInfo ci, + @Local(index = 2) int var2, @Local(index = 3) ItemStack var3 + ) { StationAPI.EVENT_BUS.post( ItemUsedInCraftingEvent.builder() .player(player) diff --git a/station-vanilla-checker-v0/src/main/java/net/modificationstation/stationapi/mixin/network/server/ServerLoginNetworkHandlerMixin.java b/station-vanilla-checker-v0/src/main/java/net/modificationstation/stationapi/mixin/network/server/ServerLoginNetworkHandlerMixin.java index b8039312c..2babfab34 100644 --- a/station-vanilla-checker-v0/src/main/java/net/modificationstation/stationapi/mixin/network/server/ServerLoginNetworkHandlerMixin.java +++ b/station-vanilla-checker-v0/src/main/java/net/modificationstation/stationapi/mixin/network/server/ServerLoginNetworkHandlerMixin.java @@ -1,34 +1,32 @@ package net.modificationstation.stationapi.mixin.network.server; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import net.minecraft.entity.player.ServerPlayerEntity; -import net.minecraft.network.packet.login.LoginHelloPacket; +import net.minecraft.network.Connection; +import net.minecraft.server.MinecraftServer; import net.minecraft.server.network.ServerLoginNetworkHandler; import net.minecraft.server.network.ServerPlayNetworkHandler; -import net.minecraft.util.math.Vec3i; -import net.minecraft.world.ServerWorld; import net.modificationstation.stationapi.api.network.ModdedPacketHandler; import net.modificationstation.stationapi.impl.network.ModdedPacketHandlerSetter; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.LocalCapture; @Mixin(ServerLoginNetworkHandler.class) class ServerLoginNetworkHandlerMixin { - @Inject( + @WrapOperation( method = "accept", at = @At( - value = "INVOKE", - target = "Lnet/minecraft/server/network/ServerPlayNetworkHandler;(Lnet/minecraft/server/MinecraftServer;Lnet/minecraft/network/Connection;Lnet/minecraft/entity/player/ServerPlayerEntity;)V", - shift = At.Shift.BY, - by = 2 - ), - locals = LocalCapture.CAPTURE_FAILHARD + value = "NEW", + target = "(Lnet/minecraft/server/MinecraftServer;Lnet/minecraft/network/Connection;Lnet/minecraft/entity/player/ServerPlayerEntity;)Lnet/minecraft/server/network/ServerPlayNetworkHandler;" + ) ) - private void stationapi_checkModded(LoginHelloPacket arg, CallbackInfo ci, ServerPlayerEntity var2, ServerWorld var3, Vec3i var4, ServerPlayNetworkHandler var5) { - ModdedPacketHandler moddedPacketHandler = ((ModdedPacketHandler) this); - if (moddedPacketHandler.isModded()) - ((ModdedPacketHandlerSetter) var5).setModded(moddedPacketHandler.getMods()); + private ServerPlayNetworkHandler stationapi_checkModded( + MinecraftServer server, Connection connection, ServerPlayerEntity player, Operation original + ) { + final var serverPlayNetworkHandler = original.call(server, connection, player); + if (this instanceof ModdedPacketHandler serverLoginNetworkHandler && serverLoginNetworkHandler.isModded()) + ((ModdedPacketHandlerSetter) serverPlayNetworkHandler).setModded(serverLoginNetworkHandler.getMods()); + return serverPlayNetworkHandler; } } From 305f9538266451d1973fc9586ca35761fb35711f Mon Sep 17 00:00:00 2001 From: mineLdiver Date: Sun, 22 Mar 2026 20:52:08 +0500 Subject: [PATCH 13/43] Stats management v1 (#244) * Previous progress brought back * Modded block stats now render properly (still need to implement a cache of sorts) and server actually starts * Cache for stats screen * Stats serialization and deserialization * Fixed stats remapping --- .../achievement/AchievementListener.java | 5 +- .../stationapi/mixin/block/StatsMixin.java | 55 ---- .../resources/station-blocks-v0.mixins.json | 3 +- .../api/event/registry/StatRegistryEvent.java | 13 + .../stationapi/api/registry/StatRegistry.java | 24 ++ .../api/stat/StationFlatteningStat.java | 17 + .../stat/ModdedStatsSerializingIterator.java | 97 ++++++ .../mixin/flattening/StatMixin.java | 44 +++ .../mixin/flattening/StatsMixin.java | 290 ++++++++++++++++++ .../stats/BlockItemFormTranslationMixin.java | 49 +++ .../client/stats/PlayerStatsMixin.java | 84 +++++ .../src/main/resources/fabric.mod.json | 3 + .../station-flattening-v0.mixins.json | 6 +- .../stationapi/mixin/item/StatsMixin.java | 11 - .../sync/trackers/Int2ObjectMapTracker.java | 39 ++- .../sync/trackers/ObjectArrayTracker.java | 12 +- .../api/client/render/item/ItemModels.java | 4 +- .../achievement/AchievementTemplate.java | 16 + .../achievement/TemplateAchievement.java | 36 +++ .../api/template/stat/StatTemplate.java | 16 + .../stat/TemplateItemOrBlockStat.java | 15 + .../api/template/stat/TemplateSimpleStat.java | 25 ++ .../api/template/stat/TemplateStat.java | 25 ++ station-vanilla-fix-v0/build.gradle.kts | 6 +- .../VanillaAchievementFixImpl.java | 48 +++ .../vanillafix/stat/VanillaStatFixImpl.java | 57 ++++ .../src/main/resources/fabric.mod.json | 4 +- 27 files changed, 915 insertions(+), 89 deletions(-) delete mode 100644 station-blocks-v0/src/main/java/net/modificationstation/stationapi/mixin/block/StatsMixin.java create mode 100644 station-flattening-v0/src/main/java/net/modificationstation/stationapi/api/event/registry/StatRegistryEvent.java create mode 100644 station-flattening-v0/src/main/java/net/modificationstation/stationapi/api/registry/StatRegistry.java create mode 100644 station-flattening-v0/src/main/java/net/modificationstation/stationapi/api/stat/StationFlatteningStat.java create mode 100644 station-flattening-v0/src/main/java/net/modificationstation/stationapi/impl/stat/ModdedStatsSerializingIterator.java create mode 100644 station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/StatMixin.java create mode 100644 station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/StatsMixin.java create mode 100644 station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/client/stats/BlockItemFormTranslationMixin.java create mode 100644 station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/client/stats/PlayerStatsMixin.java create mode 100644 station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/achievement/AchievementTemplate.java create mode 100644 station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/achievement/TemplateAchievement.java create mode 100644 station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/stat/StatTemplate.java create mode 100644 station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/stat/TemplateItemOrBlockStat.java create mode 100644 station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/stat/TemplateSimpleStat.java create mode 100644 station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/stat/TemplateStat.java create mode 100644 station-vanilla-fix-v0/src/main/java/net/modificationstation/stationapi/impl/vanillafix/achievement/VanillaAchievementFixImpl.java create mode 100644 station-vanilla-fix-v0/src/main/java/net/modificationstation/stationapi/impl/vanillafix/stat/VanillaStatFixImpl.java diff --git a/src/test/java/net/modificationstation/sltest/achievement/AchievementListener.java b/src/test/java/net/modificationstation/sltest/achievement/AchievementListener.java index f2d3ab2c9..c7ea56135 100644 --- a/src/test/java/net/modificationstation/sltest/achievement/AchievementListener.java +++ b/src/test/java/net/modificationstation/sltest/achievement/AchievementListener.java @@ -6,6 +6,7 @@ import net.modificationstation.sltest.item.ItemListener; import net.modificationstation.stationapi.api.client.gui.screen.achievement.AchievementPage; import net.modificationstation.stationapi.api.event.achievement.AchievementRegisterEvent; +import net.modificationstation.stationapi.api.template.achievement.TemplateAchievement; import static net.modificationstation.sltest.SLTest.NAMESPACE; @@ -18,8 +19,8 @@ public class AchievementListener { @EventListener public void registerAchievements(AchievementRegisterEvent event) { testAchievementPage = new AchievementPageTest(NAMESPACE.id("testPage")); - testAchievement = new Achievement(69696969, "sltest.testAchievement", 0, 0, ItemListener.testItem, null); - testAchievementChild = new Achievement(69696970, "sltest.testAchievementChild", 0, 2, Item.GOLDEN_APPLE, testAchievement); + testAchievement = new TemplateAchievement(NAMESPACE.id("test_achievement"), "sltest.testAchievement", 0, 0, ItemListener.testItem, null); + testAchievementChild = new TemplateAchievement(NAMESPACE.id("test_achievement_child"), "sltest.testAchievementChild", 0, 2, Item.GOLDEN_APPLE, testAchievement); event.achievements.add(testAchievement); event.achievements.add(testAchievementChild); testAchievementPage.addAchievements(testAchievement, testAchievementChild); diff --git a/station-blocks-v0/src/main/java/net/modificationstation/stationapi/mixin/block/StatsMixin.java b/station-blocks-v0/src/main/java/net/modificationstation/stationapi/mixin/block/StatsMixin.java deleted file mode 100644 index c31f5a5c6..000000000 --- a/station-blocks-v0/src/main/java/net/modificationstation/stationapi/mixin/block/StatsMixin.java +++ /dev/null @@ -1,55 +0,0 @@ -package net.modificationstation.stationapi.mixin.block; - -import net.minecraft.item.Item; -import net.minecraft.stat.Stat; -import net.minecraft.stat.Stats; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -@Mixin(Stats.class) -class StatsMixin { - @Redirect( - method = "initializeItemStats", - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/stat/Stats;initItemsUsedStats([Lnet/minecraft/stat/Stat;Ljava/lang/String;III)[Lnet/minecraft/stat/Stat;" - ) - ) - private static Stat[] stationapi_stop1(Stat[] statArray, String translationKey, int startId, int statAmount, int arrayLength) { - return new Stat[Item.ITEMS.length]; - } - - @Redirect( - method = "initializeItemStats", - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/stat/Stats;initializeBrokenItemStats([Lnet/minecraft/stat/Stat;Ljava/lang/String;III)[Lnet/minecraft/stat/Stat;" - ) - ) - private static Stat[] stationapi_stop2(Stat[] statArray, String translationKey, int startId, int statAmount, int arrayLength) { - return new Stat[Item.ITEMS.length]; - } - - @Redirect( - method = "initializeExtendedItemStats", - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/stat/Stats;initItemsUsedStats([Lnet/minecraft/stat/Stat;Ljava/lang/String;III)[Lnet/minecraft/stat/Stat;" - ) - ) - private static Stat[] stationapi_stop3(Stat[] statArray, String translationKey, int startId, int statAmount, int arrayLength) { - return new Stat[Item.ITEMS.length]; - } - - @Redirect( - method = "initializeExtendedItemStats", - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/stat/Stats;initializeBrokenItemStats([Lnet/minecraft/stat/Stat;Ljava/lang/String;III)[Lnet/minecraft/stat/Stat;" - ) - ) - private static Stat[] stop4(Stat[] statArray, String translationKey, int startId, int statAmount, int arrayLength) { - return new Stat[Item.ITEMS.length]; - } -} diff --git a/station-blocks-v0/src/main/resources/station-blocks-v0.mixins.json b/station-blocks-v0/src/main/resources/station-blocks-v0.mixins.json index 109b74423..2951760da 100644 --- a/station-blocks-v0/src/main/resources/station-blocks-v0.mixins.json +++ b/station-blocks-v0/src/main/resources/station-blocks-v0.mixins.json @@ -8,8 +8,7 @@ "BlockMixin", "FireBlockMixin", "LeavesBlockMixin", - "SecondaryBlockItemMixin", - "StatsMixin" + "SecondaryBlockItemMixin" ], "injectors": { "defaultRequire": 1 diff --git a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/api/event/registry/StatRegistryEvent.java b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/api/event/registry/StatRegistryEvent.java new file mode 100644 index 000000000..a42c43f42 --- /dev/null +++ b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/api/event/registry/StatRegistryEvent.java @@ -0,0 +1,13 @@ +package net.modificationstation.stationapi.api.event.registry; + +import net.mine_diver.unsafeevents.event.EventPhases; +import net.minecraft.stat.Stat; +import net.modificationstation.stationapi.api.StationAPI; +import net.modificationstation.stationapi.api.registry.StatRegistry; + +@EventPhases(StationAPI.INTERNAL_PHASE) +public class StatRegistryEvent extends RegistryEvent.EntryTypeBound { + public StatRegistryEvent() { + super(StatRegistry.INSTANCE); + } +} \ No newline at end of file diff --git a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/api/registry/StatRegistry.java b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/api/registry/StatRegistry.java new file mode 100644 index 000000000..b05dcd82a --- /dev/null +++ b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/api/registry/StatRegistry.java @@ -0,0 +1,24 @@ +package net.modificationstation.stationapi.api.registry; + +import com.mojang.serialization.Lifecycle; +import it.unimi.dsi.fastutil.ints.Int2IntFunction; +import net.minecraft.stat.Stat; +import net.modificationstation.stationapi.api.event.registry.RegistryAttribute; +import net.modificationstation.stationapi.api.event.registry.RegistryAttributeHolder; + +import static net.modificationstation.stationapi.api.StationAPI.NAMESPACE; + +public class StatRegistry extends SimpleRegistry { + public static final RegistryKey> KEY = RegistryKey.ofRegistry(NAMESPACE.id("stats")); + public static final StatRegistry INSTANCE = Registries.create(KEY, new StatRegistry(), Lifecycle.experimental()); + + public static final int ACHIEVEMENT_ID_SHIFT = 0x500000; + public static final Int2IntFunction SHIFTED_ACHIEVEMENT_ID = id -> id - ACHIEVEMENT_ID_SHIFT; + public static final int ACHIEVEMENT_AUTO_ID = SHIFTED_ACHIEVEMENT_ID.applyAsInt(AUTO_ID); + + private StatRegistry() { + super(KEY, Lifecycle.experimental(), true); + RegistryAttributeHolder.get(this).addAttribute(RegistryAttribute.SYNCED); + nextId = 0x1040000; + } +} \ No newline at end of file diff --git a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/api/stat/StationFlatteningStat.java b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/api/stat/StationFlatteningStat.java new file mode 100644 index 000000000..d7e075610 --- /dev/null +++ b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/api/stat/StationFlatteningStat.java @@ -0,0 +1,17 @@ +package net.modificationstation.stationapi.api.stat; + +import net.minecraft.stat.Stat; +import net.modificationstation.stationapi.api.registry.RegistryEntry; +import net.modificationstation.stationapi.api.registry.RemappableRawIdHolder; +import net.modificationstation.stationapi.api.util.Util; + +public interface StationFlatteningStat extends RemappableRawIdHolder { + @Override + default void setRawId(int rawId) { + Util.assertImpl(); + } + + default RegistryEntry.Reference getRegistryEntry() { + return Util.assertImpl(); + } +} \ No newline at end of file diff --git a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/impl/stat/ModdedStatsSerializingIterator.java b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/impl/stat/ModdedStatsSerializingIterator.java new file mode 100644 index 000000000..1fa4bd3e2 --- /dev/null +++ b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/impl/stat/ModdedStatsSerializingIterator.java @@ -0,0 +1,97 @@ +package net.modificationstation.stationapi.impl.stat; + +import net.minecraft.stat.Stat; +import net.modificationstation.stationapi.api.util.Namespace; + +import java.util.Iterator; +import java.util.Map; +import java.util.NoSuchElementException; + +import static net.modificationstation.stationapi.api.StationAPI.NAMESPACE; + +/** + * Iterates over a set of stats, filtering out modded ones and serializing them separately. + */ +public final class ModdedStatsSerializingIterator implements Iterator { + public static final String STATIONAPI_STATS_CHANGE_KEY = NAMESPACE.id("stats-change").toString(); + + private final Iterator source; + private final StringBuilder moddedStatsSerialized; + private final Map statCounts; + + private Stat nextVanillaStat; + private boolean firstModdedStat = true; + + public ModdedStatsSerializingIterator( + Iterator source, StringBuilder moddedStatsSerialized, Map statCounts + ) { + this.source = source; + this.moddedStatsSerialized = moddedStatsSerialized; + this.statCounts = statCounts; + + moddedStatsSerialized.append(" \"").append(STATIONAPI_STATS_CHANGE_KEY).append("\":["); + + advance(); + } + + /** + * Searches for the next vanilla stat in the set and serializes all modded stats found on the way. + */ + private void advance() { + nextVanillaStat = null; + + // Searching for the next vanilla stat in the set + // and serializing all modded stats found on the way + while (source.hasNext()) { + Stat candidate = source.next(); + + if (candidate.getRegistryEntry().registryKey().getValue().namespace == Namespace.MINECRAFT) { + nextVanillaStat = candidate; + return; + } + + serializeModded(candidate); + } + } + + /** + * Serializes the given stat under the modded stats array. + * + * @param stat the stat to serialize under the modded stats array + */ + private void serializeModded(Stat stat) { + if (!firstModdedStat) moddedStatsSerialized.append("},"); + else firstModdedStat = false; + + moddedStatsSerialized.append("\r\n {\""); + moddedStatsSerialized.append(stat.getRegistryEntry().registryKey().getValue()).append("\":").append(statCounts.get(stat)); + } + + @Override + public boolean hasNext() { + if (nextVanillaStat != null) + return true; + + // If there are no more stats from the source iterator, + // finish serializing modded stats and terminate the loop + if (!firstModdedStat) + moddedStatsSerialized.append("}"); + moddedStatsSerialized.append("\r\n ],\r\n"); + return false; + } + + /** + * Returns the next vanilla {@link Stat} and advances the source iterator via {@link #advance()}. + * + * @return the next vanilla {@link Stat} from the source iterator + * @throws NoSuchElementException if there are no more vanilla stats + */ + @Override + public Stat next() { + if (nextVanillaStat == null) throw new NoSuchElementException(); + + final Stat stat = nextVanillaStat; + advance(); + return stat; + } +} diff --git a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/StatMixin.java b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/StatMixin.java new file mode 100644 index 000000000..0d11af5dd --- /dev/null +++ b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/StatMixin.java @@ -0,0 +1,44 @@ +package net.modificationstation.stationapi.mixin.flattening; + +import net.minecraft.stat.Stat; +import net.modificationstation.stationapi.api.registry.RegistryEntry; +import net.modificationstation.stationapi.api.registry.StatRegistry; +import net.modificationstation.stationapi.api.stat.StationFlatteningStat; +import org.spongepowered.asm.mixin.*; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyVariable; + +@Mixin(Stat.class) +class StatMixin implements StationFlatteningStat { + @Mutable + @Shadow @Final public int id; + @Unique + private RegistryEntry.Reference stationapi_registryEntry; + + @ModifyVariable( + method = "(ILjava/lang/String;Lnet/minecraft/stat/StatFormatter;)V", + index = 1, + at = @At( + value = "CONSTANT", + args = "intValue=0", + ordinal = 0 + ), + argsOnly = true + ) + private int stationapi_ensureCapacity(int rawId) { + return (stationapi_registryEntry = StatRegistry.INSTANCE.createReservedEntry(rawId, (Stat) (Object) this)).reservedRawId(); + } + + @SuppressWarnings("AddedMixinMembersNamePattern") + @Override + @Unique + public void setRawId(int rawId) { + id = rawId; + } + + @SuppressWarnings("AddedMixinMembersNamePattern") + @Override + public RegistryEntry.Reference getRegistryEntry() { + return stationapi_registryEntry; + } +} \ No newline at end of file diff --git a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/StatsMixin.java b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/StatsMixin.java new file mode 100644 index 000000000..7d727c813 --- /dev/null +++ b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/StatsMixin.java @@ -0,0 +1,290 @@ +package net.modificationstation.stationapi.mixin.flattening; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.llamalad7.mixinextras.sugar.Local; +import lombok.val; +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.stat.ItemOrBlockStat; +import net.minecraft.stat.Stat; +import net.minecraft.stat.Stats; +import net.modificationstation.stationapi.api.StationAPI; +import net.modificationstation.stationapi.api.event.registry.StatRegistryEvent; +import net.modificationstation.stationapi.api.item.BlockItemForm; +import net.modificationstation.stationapi.api.registry.BlockRegistry; +import net.modificationstation.stationapi.api.registry.ItemRegistry; +import net.modificationstation.stationapi.api.registry.Registry; +import net.modificationstation.stationapi.api.registry.StatRegistry; +import net.modificationstation.stationapi.api.registry.sync.trackers.Int2ObjectMapTracker; +import net.modificationstation.stationapi.api.registry.sync.trackers.ObjectArrayTracker; +import net.modificationstation.stationapi.api.util.Namespace; +import org.objectweb.asm.Opcodes; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.*; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +import java.util.Map; + +@Mixin(Stats.class) +class StatsMixin { + @Shadow public static Stat[] CRAFTED; + + @Shadow public static Stat[] MINE_BLOCK; + + @Shadow public static Stat[] USED; + + @Shadow public static Stat[] BROKEN; + + @Shadow private static boolean hasExtendedItemStatsInitialized; + + @Shadow private static boolean hasBasicItemStatsInitialized; + + @Shadow protected static Map ID_TO_STAT; + + @Inject( + method = "", + at = @At( + value = "FIELD", + target = "Lnet/minecraft/stat/Stats;ID_TO_STAT:Ljava/util/Map;", + opcode = Opcodes.PUTSTATIC, + shift = At.Shift.AFTER + ) + ) + private static void stationapi_syncMap(CallbackInfo ci) { + Int2ObjectMapTracker.register(StatRegistry.INSTANCE, "Stats.ID_TO_STAT", ID_TO_STAT, true); + } + + @Inject( + method = "", + at = @At( + value = "FIELD", + target = "Lnet/minecraft/stat/Stats;MINE_BLOCK:[Lnet/minecraft/stat/Stat;", + opcode = Opcodes.PUTSTATIC, + shift = At.Shift.AFTER + ) + ) + private static void stationapi_syncMined(CallbackInfo ci) { + ObjectArrayTracker.register(BlockRegistry.INSTANCE, () -> MINE_BLOCK, array -> MINE_BLOCK = array, false); + } + + @Inject( + method = "initializeItemStats", + at = @At("HEAD") + ) + private static void stationapi_syncUsedAndBroken(CallbackInfo ci) { + if (!hasExtendedItemStatsInitialized) { + ObjectArrayTracker.register(ItemRegistry.INSTANCE, () -> USED, array -> USED = array, false); + ObjectArrayTracker.register(ItemRegistry.INSTANCE, () -> BROKEN, array -> BROKEN = array, false); + } + } + + @Redirect( + method = "initializeItemStats", + at = @At( + value = "FIELD", + target = "Lnet/minecraft/block/Block;BLOCKS:[Lnet/minecraft/block/Block;", + opcode = Opcodes.GETSTATIC, + args = "array=length", + ordinal = 0 + ) + ) + private static int stationapi_initAll(Block[] blocks) { + return Item.ITEMS.length; + } + + @Inject( + method = "initializeExtendedItemStats", + at = @At("HEAD") + ) + private static void stationapi_syncUsedAndBrokenExtended(CallbackInfo ci) { + if (!hasBasicItemStatsInitialized) { + ObjectArrayTracker.register(ItemRegistry.INSTANCE, () -> USED, array -> USED = array, false); + ObjectArrayTracker.register(ItemRegistry.INSTANCE, () -> BROKEN, array -> BROKEN = array, false); + } + } + + @WrapOperation( + method = "initializeExtendedItemStats", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/stat/Stats;initItemsUsedStats([Lnet/minecraft/stat/Stat;Ljava/lang/String;III)[Lnet/minecraft/stat/Stat;" + ) + ) + private static Stat[] stationapi_stopBlockUsedStats(Stat[] stats, String name, int id, int minId, int maxId, Operation original) { + return new Stat[maxId]; + } + + @Inject( + method = "initializeCraftedItemStats", + at = @At( + value = "FIELD", + target = "Lnet/minecraft/stat/Stats;CRAFTED:[Lnet/minecraft/stat/Stat;", + opcode = Opcodes.PUTSTATIC + ) + ) + private static void stationapi_syncCrafted(CallbackInfo ci) { + ObjectArrayTracker.register(ItemRegistry.INSTANCE, () -> CRAFTED, array -> CRAFTED = array, false); + } + + @Inject( + method = "", + at = @At( + value = "FIELD", + target = "Lnet/minecraft/stat/Stats;FISH_CAUGHT:Lnet/minecraft/stat/Stat;", + opcode = Opcodes.PUTSTATIC, + shift = At.Shift.AFTER + ) + ) + private static void stationapi_afterStatRegister(CallbackInfo ci) { + StationAPI.EVENT_BUS.post(new StatRegistryEvent()); + } + + @Inject( + method = "initializeCraftedItemStats", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/stat/ItemOrBlockStat;addStat()Lnet/minecraft/stat/Stat;", + shift = At.Shift.BY, + by = 2 + ) + ) + private static void stationapi_registerCraftedStats( + CallbackInfo ci, + @Local(index = 2) Integer index + ) { + val stat = CRAFTED[index]; + Registry.register(StatRegistry.INSTANCE, stat.id, Item.ITEMS[index].getRegistryEntry().registryKey().getValue().withSuffixedPath("_crafted"), stat); + } + + @Inject( + method = "initBlocksMined", + at = @At( + value = "INVOKE", + target = "Ljava/util/List;add(Ljava/lang/Object;)Z" + ) + ) + private static void stationapi_registerMinedStats( + String string, int i, CallbackInfoReturnable cir, + @Local(index = 2) Stat[] statArray, @Local(index = 3) int index + ) { + val stat = statArray[index]; + Registry.register(StatRegistry.INSTANCE, stat.id, Block.BLOCKS[index].getRegistryEntry().registryKey().getValue().withSuffixedPath("_mined"), stat); + } + + @Inject( + method = "initItemsUsedStats", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/stat/ItemOrBlockStat;addStat()Lnet/minecraft/stat/Stat;", + shift = At.Shift.BY, + by = 2 + ) + ) + private static void stationapi_registerUsedStats( + Stat[] stats, String string, int i, int j, int k, CallbackInfoReturnable cir, + @Local(index = 5) int index + ) { + val stat = stats[index]; + Registry.register(StatRegistry.INSTANCE, stat.id, Item.ITEMS[index].getRegistryEntry().registryKey().getValue().withSuffixedPath("_used"), stat); + } + + @Inject( + method = "initializeBrokenItemStats", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/stat/ItemOrBlockStat;addStat()Lnet/minecraft/stat/Stat;", + shift = At.Shift.BY, + by = 2 + ) + ) + private static void stationapi_registerBrokenStats( + Stat[] stats, String string, int i, int j, int k, CallbackInfoReturnable cir, + @Local(index = 5) int index + ) { + val stat = stats[index]; + Registry.register(StatRegistry.INSTANCE, stat.id, Item.ITEMS[index].getRegistryEntry().registryKey().getValue().withSuffixedPath("_broken"), stat); + } + + @ModifyConstant( + method = "initBlocksMined", + constant = @Constant(intValue = 256) + ) + private static int stationapi_getBlocksSize(int constant) { + return Block.BLOCKS.length; + } + + @ModifyConstant( + method = { + "initializeItemStats", + "initializeExtendedItemStats", + "initializeCraftedItemStats", + "initItemsUsedStats", + "initializeBrokenItemStats" + }, + constant = @Constant(intValue = 32000) + ) + private static int stationapi_getItemsSize(int constant) { + return Item.ITEMS.length; + } + + @WrapOperation( + method = { + "initializeCraftedItemStats", + "initItemsUsedStats", + "initializeBrokenItemStats" + }, + at = @At( + value = "NEW", + target = "(ILjava/lang/String;I)Lnet/minecraft/stat/ItemOrBlockStat;" + ) + ) + private static ItemOrBlockStat stationapi_removeIdReservationFromModdedItemStats( + int rawId, String translationKey, int itemIdOrBlockId, Operation original + ) { + return original.call( + ItemRegistry.INSTANCE.getId(itemIdOrBlockId).orElseThrow().getNamespace() == Namespace.MINECRAFT + ? rawId + : StatRegistry.AUTO_ID, + translationKey, + itemIdOrBlockId + ); + } + + @WrapOperation( + method = "initBlocksMined", + at = @At( + value = "NEW", + target = "(ILjava/lang/String;I)Lnet/minecraft/stat/ItemOrBlockStat;" + ) + ) + private static ItemOrBlockStat stationapi_removeIdReservationFromModdedBlockStats( + int rawId, String translationKey, int itemIdOrBlockId, Operation original + ) { + return original.call( + BlockRegistry.INSTANCE.getId(itemIdOrBlockId).orElseThrow().getNamespace() == Namespace.MINECRAFT + ? rawId + : StatRegistry.AUTO_ID, + translationKey, + itemIdOrBlockId + ); + } + + @Redirect( + method = "initItemsUsedStats", + at = @At( + value = "FIELD", + target = "Lnet/minecraft/block/Block;BLOCKS:[Lnet/minecraft/block/Block;", + opcode = Opcodes.GETSTATIC, + args = "array=length" + ) + ) + private static int stationapi_fixBlockCheck( + Block[] array, + @Local(index = 5) int id + ) { + return Item.ITEMS[id] instanceof BlockItemForm ? id + 1 : id; + } +} \ No newline at end of file diff --git a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/client/stats/BlockItemFormTranslationMixin.java b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/client/stats/BlockItemFormTranslationMixin.java new file mode 100644 index 000000000..faac15057 --- /dev/null +++ b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/client/stats/BlockItemFormTranslationMixin.java @@ -0,0 +1,49 @@ +package net.modificationstation.stationapi.mixin.flattening.client.stats; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import it.unimi.dsi.fastutil.objects.Reference2IntMap; +import it.unimi.dsi.fastutil.objects.Reference2IntOpenHashMap; +import net.minecraft.block.Block; +import net.minecraft.stat.ItemOrBlockStat; +import net.minecraft.stat.Stats; +import net.modificationstation.stationapi.api.util.Util; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(targets = { + "net.minecraft.client.gui.screen.StatsScreen$AbstractStatsListWidget", + "net.minecraft.client.gui.screen.StatsScreen$BlockStatsListWidget" +}) +class BlockItemFormTranslationMixin { + @Unique + private final Reference2IntMap stationapi_idCache = Util.make( + new Reference2IntOpenHashMap<>(), + map -> map.defaultReturnValue(-1) + ); + + @WrapOperation( + method = "*", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/stat/ItemOrBlockStat;getItemOrBlockId()I" + ), + require = 0 + ) + private int stationapi_translateToBlockItemForm(ItemOrBlockStat instance, Operation original) { + var cachedId = stationapi_idCache.getInt(instance); + if (cachedId > -1) + return cachedId; + + int id = original.call(instance); + if (Stats.BLOCK_MINED_STATS.contains(instance)) { + var item = Block.BLOCKS[id].asItem(); + if (item != null) + id = item.id; + } + + stationapi_idCache.put(instance, id); + return id; + } +} diff --git a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/client/stats/PlayerStatsMixin.java b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/client/stats/PlayerStatsMixin.java new file mode 100644 index 000000000..2c534de53 --- /dev/null +++ b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/client/stats/PlayerStatsMixin.java @@ -0,0 +1,84 @@ +package net.modificationstation.stationapi.mixin.flattening.client.stats; + +import argo.jdom.JsonNode; +import argo.jdom.JsonRootNode; +import argo.jdom.JsonStringNode; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.llamalad7.mixinextras.sugar.Local; +import com.llamalad7.mixinextras.sugar.Share; +import com.llamalad7.mixinextras.sugar.ref.LocalRef; +import net.minecraft.stat.PlayerStats; +import net.minecraft.stat.Stat; +import net.modificationstation.stationapi.api.registry.StatRegistry; +import net.modificationstation.stationapi.api.util.Identifier; +import net.modificationstation.stationapi.impl.stat.ModdedStatsSerializingIterator; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +import java.util.*; + +@Mixin(PlayerStats.class) +class PlayerStatsMixin { + @Inject( + method = "deserialize", + at = @At( + value = "NEW", + target = "(Ljava/lang/String;)Lnet/minecraft/util/MD5MessageDigest;" + ) + ) + private static void stationapi_deserializeModdedStats( + String data, CallbackInfoReturnable> cir, + @Local(index = 1) HashMap statCounts, @Local(index = 4) JsonRootNode statsRoot + ) { + //noinspection unchecked + for (final JsonNode node : (List) statsRoot.getArrayNode(ModdedStatsSerializingIterator.STATIONAPI_STATS_CHANGE_KEY)) { + @SuppressWarnings("unchecked") final Map statCountNodes = node.getFields(); + final Map.Entry statCountNode = statCountNodes.entrySet().iterator().next(); + final Identifier statId = Identifier.tryParse(statCountNode.getKey().getText()); + final Stat stat = StatRegistry.INSTANCE.get(statId); + final int count = Integer.parseInt(statCountNode.getValue().getText()); + if (stat == null) + System.out.println(statId + " is not a valid stat"); + else + statCounts.put(stat, count); + } + } + + @WrapOperation( + method = "serialize", + at = @At( + value = "INVOKE", + target = "Ljava/util/Set;iterator()Ljava/util/Iterator;" + ) + ) + private static Iterator stationapi_filterOutModdedStats( + Set instance, Operation> original, + @Local(index = 2, argsOnly = true) Map statCounts, + @Share("moddedStats") LocalRef moddedStatsRef + ) { + final StringBuilder moddedStats = new StringBuilder(); + moddedStatsRef.set(moddedStats); + + return new ModdedStatsSerializingIterator(original.call(instance), moddedStats, statCounts); + } + + @Inject( + method = "serialize", + at = @At( + value = "INVOKE", + target = "Ljava/lang/StringBuilder;append(Ljava/lang/String;)Ljava/lang/StringBuilder;", + ordinal = 17, + shift = At.Shift.AFTER + ) + ) + private static void stationapi_appendModdedStats( + String playerName, String sessionId, Map stats, CallbackInfoReturnable cir, + @Local(index = 3) StringBuilder statsJson, + @Share("moddedStats") LocalRef moddedStatsRef + ) { + statsJson.append(moddedStatsRef.get()); + } +} diff --git a/station-flattening-v0/src/main/resources/fabric.mod.json b/station-flattening-v0/src/main/resources/fabric.mod.json index 73e6844e1..a2127702e 100644 --- a/station-flattening-v0/src/main/resources/fabric.mod.json +++ b/station-flattening-v0/src/main/resources/fabric.mod.json @@ -77,6 +77,9 @@ ], "net/minecraft/class_50": [ "net/modificationstation/stationapi/api/world/dimension/StationDimension" + ], + "net/minecraft/class_139": [ + "net/modificationstation/stationapi/api/stat/StationFlatteningStat" ] } } diff --git a/station-flattening-v0/src/main/resources/station-flattening-v0.mixins.json b/station-flattening-v0/src/main/resources/station-flattening-v0.mixins.json index bd1655d7a..5f9a3b5cc 100644 --- a/station-flattening-v0/src/main/resources/station-flattening-v0.mixins.json +++ b/station-flattening-v0/src/main/resources/station-flattening-v0.mixins.json @@ -37,6 +37,8 @@ "RegionFileAccessor", "SecondaryBlockItemMixin", "SkylandsChunkGeneratorMixin", + "StatMixin", + "StatsMixin", "WorldMixin", "WorldPropertiesMixin" ], @@ -50,7 +52,9 @@ "client.MultiplayerInteractionManagerMixin", "client.PlayerEntityRendererMixin", "client.SingleplayerInteractionManagerMixin", - "client.WorldRendererMixin" + "client.WorldRendererMixin", + "client.stats.BlockItemFormTranslationMixin", + "client.stats.PlayerStatsMixin" ], "injectors": { "defaultRequire": 1 diff --git a/station-items-v0/src/main/java/net/modificationstation/stationapi/mixin/item/StatsMixin.java b/station-items-v0/src/main/java/net/modificationstation/stationapi/mixin/item/StatsMixin.java index 69e413e75..75dabc0de 100644 --- a/station-items-v0/src/main/java/net/modificationstation/stationapi/mixin/item/StatsMixin.java +++ b/station-items-v0/src/main/java/net/modificationstation/stationapi/mixin/item/StatsMixin.java @@ -1,26 +1,15 @@ package net.modificationstation.stationapi.mixin.item; -import net.minecraft.item.Item; import net.minecraft.stat.Stats; import net.modificationstation.stationapi.api.StationAPI; import net.modificationstation.stationapi.api.event.registry.AfterBlockAndItemRegisterEvent; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Constant; import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.ModifyConstant; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(Stats.class) class StatsMixin { - @ModifyConstant( - method = "initializeCraftedItemStats", - constant = @Constant(intValue = 32000) - ) - private static int stationapi_getItemsSize(int constant) { - return Item.ITEMS.length; - } - @Inject( method = "initializeCraftedItemStats", at = @At( diff --git a/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/sync/trackers/Int2ObjectMapTracker.java b/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/sync/trackers/Int2ObjectMapTracker.java index 7d240b0b7..1324d5e83 100644 --- a/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/sync/trackers/Int2ObjectMapTracker.java +++ b/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/sync/trackers/Int2ObjectMapTracker.java @@ -1,6 +1,7 @@ package net.modificationstation.stationapi.api.registry.sync.trackers; import com.google.common.base.Joiner; +import com.mojang.datafixers.util.Either; import it.unimi.dsi.fastutil.ints.Int2IntMap; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; @@ -13,11 +14,14 @@ import net.modificationstation.stationapi.api.mod.entrypoint.EntrypointManager; import net.modificationstation.stationapi.api.registry.ListenableRegistry; import net.modificationstation.stationapi.api.registry.Registry; +import net.modificationstation.stationapi.api.registry.RemappableRawIdHolder; import net.modificationstation.stationapi.api.util.Identifier; import java.lang.invoke.MethodHandles; import java.util.ArrayList; import java.util.List; +import java.util.Map; +import java.util.function.Function; import static net.modificationstation.stationapi.api.StationAPI.LOGGER; @@ -26,17 +30,29 @@ public class Int2ObjectMapTracker { EntrypointManager.registerLookup(MethodHandles.lookup()); } + @FunctionalInterface private interface Put { T put(int key, T value); } + @FunctionalInterface private interface ContainsKey { boolean containsKey(int key); } + private final String name; - private final Int2ObjectMap mappers; + private final Either, Int2ObjectMap> mappers; private final Reference2ObjectMap removedMapperCache = new Reference2ObjectOpenHashMap<>(); + private final boolean remapValues; - private Int2ObjectMapTracker(String name, Int2ObjectMap mappers) { + private Int2ObjectMapTracker(String name, Either, Int2ObjectMap> mappers, boolean remapValues) { this.name = name; this.mappers = mappers; + this.remapValues = remapValues; + } + + public static & ListenableRegistry> void register(R registry, String name, Map mappers, boolean remapValues) { + register(registry, new Int2ObjectMapTracker<>(name, Either.left(mappers), remapValues)); + } + + public static & ListenableRegistry> void register(R registry, String name, Int2ObjectMap mappers, boolean remapValues) { + register(registry, new Int2ObjectMapTracker<>(name, Either.right(mappers), remapValues)); } - public static & ListenableRegistry> void register(R registry, String name, Int2ObjectMap mappers) { - Int2ObjectMapTracker tracker = new Int2ObjectMapTracker<>(name, mappers); + private static & ListenableRegistry> void register(R registry, Int2ObjectMapTracker tracker) { registry.getEventBus().register(Listener.object() .listener(tracker) .build()); @@ -45,26 +61,31 @@ public static & ListenableRegistry> void register( @EventListener private void onEntryAdded(RegistryEntryAddedEvent event) { if (removedMapperCache.containsKey(event.id)) - mappers.put(event.rawId, removedMapperCache.get(event.id)); + mappers.>map(map -> map::put, map -> map::put).put(event.rawId, removedMapperCache.get(event.id)); } @EventListener private void onRemap(RegistryIdRemapEvent event) { - Int2ObjectMap oldMappers = new Int2ObjectOpenHashMap<>(mappers); + Int2ObjectMap oldMappers = mappers.map(Int2ObjectOpenHashMap::new, Int2ObjectOpenHashMap::new); Int2IntMap remapMap = event.state.getRawIdChangeMap(); List errors = null; - mappers.clear(); + mappers.map(Function.identity(), Function.identity()).clear(); for (int i : oldMappers.keySet()) { int newI = remapMap.getOrDefault(i, Integer.MIN_VALUE); if (newI >= 0) { - if (mappers.containsKey(newI)) { + if (mappers.map(map -> map::containsKey, map -> map::containsKey).containsKey(newI)) { if (errors == null) errors = new ArrayList<>(); errors.add(" - Map contained two equal IDs " + newI + " (" + event.state.getIdFromOld(i) + "/" + i + " -> " + event.state.getIdFromNew(newI) + "/" + newI + ")!"); - } else mappers.put(newI, oldMappers.get(i)); + } else { + final OV value = oldMappers.get(i); + mappers.>map(map -> map::put, map -> map::put).put(newI, value); + if (remapValues && value instanceof RemappableRawIdHolder holder) + holder.setRawId(newI); + } } else { LOGGER.warn("Int2ObjectMap " + name + " is dropping mapping for integer ID " + i + " (" + event.state.getIdFromOld(i) + ") - should not happen!"); removedMapperCache.put(event.state.getIdFromOld(i), oldMappers.get(i)); diff --git a/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/sync/trackers/ObjectArrayTracker.java b/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/sync/trackers/ObjectArrayTracker.java index c18059018..e3e95da35 100644 --- a/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/sync/trackers/ObjectArrayTracker.java +++ b/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/sync/trackers/ObjectArrayTracker.java @@ -25,13 +25,15 @@ public class ObjectArrayTracker { private final Supplier arrayGetter; private final Consumer arraySetter; + private final boolean remapValues; public static & ListenableRegistry> void register( R registry, Supplier arrayGetter, - Consumer arraySetter + Consumer arraySetter, + boolean remapValues ) { - ObjectArrayTracker tracker = new ObjectArrayTracker<>(arrayGetter, arraySetter); + ObjectArrayTracker tracker = new ObjectArrayTracker<>(arrayGetter, arraySetter, remapValues); registry.getEventBus().register(Listener.object() .listener(tracker) .build()); @@ -39,10 +41,12 @@ public static & ListenableRegistry> void register( private ObjectArrayTracker( Supplier arrayGetter, - Consumer arraySetter + Consumer arraySetter, + boolean remapValues ) { this.arrayGetter = arrayGetter; this.arraySetter = arraySetter; + this.remapValues = remapValues; } public static boolean shouldGrow(V[] array, int highestExpectedRawId) { @@ -74,7 +78,7 @@ private void onRemap(RegistryIdRemapEvent event) { if (shouldGrow(array, newId)) array = grow(array, newId); array[newId] = value; - if (value instanceof RemappableRawIdHolder holder) + if (remapValues && value instanceof RemappableRawIdHolder holder) holder.setRawId(newId); } diff --git a/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/render/item/ItemModels.java b/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/render/item/ItemModels.java index c4a5f15d2..72254708b 100644 --- a/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/render/item/ItemModels.java +++ b/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/render/item/ItemModels.java @@ -30,8 +30,8 @@ public class ItemModels { public ItemModels(BakedModelManager modelManager) { this.modelManager = modelManager; ITEM_MODELS.add(this); - Int2ObjectMapTracker.register(ItemRegistry.INSTANCE, "ItemModels.modelIds", modelIds); - Int2ObjectMapTracker.register(ItemRegistry.INSTANCE, "ItemModels.models", models); + Int2ObjectMapTracker.register(ItemRegistry.INSTANCE, "ItemModels.modelIds", modelIds, false); + Int2ObjectMapTracker.register(ItemRegistry.INSTANCE, "ItemModels.models", models, false); } public BakedModel getModel(ItemStack stack) { diff --git a/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/achievement/AchievementTemplate.java b/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/achievement/AchievementTemplate.java new file mode 100644 index 000000000..38c1f6d2c --- /dev/null +++ b/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/achievement/AchievementTemplate.java @@ -0,0 +1,16 @@ +package net.modificationstation.stationapi.api.template.achievement; + +import net.minecraft.achievement.Achievement; +import net.modificationstation.stationapi.api.registry.StatRegistry; +import net.modificationstation.stationapi.api.template.stat.StatTemplate; +import net.modificationstation.stationapi.api.util.Identifier; + +public interface AchievementTemplate extends StatTemplate { + static int getNextId() { + return StatRegistry.SHIFTED_ACHIEVEMENT_ID.get(StatTemplate.getNextId()); + } + + static void onConstructor(Achievement achievement, Identifier id) { + StatTemplate.onConstructor(achievement, id); + } +} diff --git a/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/achievement/TemplateAchievement.java b/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/achievement/TemplateAchievement.java new file mode 100644 index 000000000..6f41151a0 --- /dev/null +++ b/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/achievement/TemplateAchievement.java @@ -0,0 +1,36 @@ +package net.modificationstation.stationapi.api.template.achievement; + +import net.minecraft.achievement.Achievement; +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.modificationstation.stationapi.api.util.Identifier; + +public class TemplateAchievement extends Achievement implements AchievementTemplate { + public TemplateAchievement(Identifier identifier, String key, int column, int row, Item displayItem, Achievement parent) { + this(AchievementTemplate.getNextId(), key, column, row, displayItem, parent); + AchievementTemplate.onConstructor(this, identifier); + } + + public TemplateAchievement(Identifier identifier, String key, int column, int row, Block displayBlock, Achievement parent) { + this(AchievementTemplate.getNextId(), key, column, row, displayBlock, parent); + AchievementTemplate.onConstructor(this, identifier); + } + + public TemplateAchievement(Identifier identifier, String key, int column, int row, ItemStack icon, Achievement parent) { + this(AchievementTemplate.getNextId(), key, column, row, icon, parent); + AchievementTemplate.onConstructor(this, identifier); + } + + public TemplateAchievement(int id, String key, int column, int row, Item displayItem, Achievement parent) { + super(id, key, column, row, displayItem, parent); + } + + public TemplateAchievement(int id, String key, int column, int row, Block displayBlock, Achievement parent) { + super(id, key, column, row, displayBlock, parent); + } + + public TemplateAchievement(int id, String key, int column, int row, ItemStack icon, Achievement parent) { + super(id, key, column, row, icon, parent); + } +} \ No newline at end of file diff --git a/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/stat/StatTemplate.java b/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/stat/StatTemplate.java new file mode 100644 index 000000000..8ad357924 --- /dev/null +++ b/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/stat/StatTemplate.java @@ -0,0 +1,16 @@ +package net.modificationstation.stationapi.api.template.stat; + +import net.minecraft.stat.Stat; +import net.modificationstation.stationapi.api.registry.Registry; +import net.modificationstation.stationapi.api.registry.StatRegistry; +import net.modificationstation.stationapi.api.util.Identifier; + +public interface StatTemplate { + static int getNextId() { + return StatRegistry.AUTO_ID; + } + + static void onConstructor(Stat stat, Identifier id) { + Registry.register(StatRegistry.INSTANCE, stat.id, id, stat); + } +} \ No newline at end of file diff --git a/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/stat/TemplateItemOrBlockStat.java b/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/stat/TemplateItemOrBlockStat.java new file mode 100644 index 000000000..1eaf058f2 --- /dev/null +++ b/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/stat/TemplateItemOrBlockStat.java @@ -0,0 +1,15 @@ +package net.modificationstation.stationapi.api.template.stat; + +import net.minecraft.stat.ItemOrBlockStat; +import net.modificationstation.stationapi.api.util.Identifier; + +public class TemplateItemOrBlockStat extends ItemOrBlockStat implements StatTemplate { + public TemplateItemOrBlockStat(Identifier identifier, String translationKey, int itemIdOrBlockId) { + this(StatTemplate.getNextId(), translationKey, itemIdOrBlockId); + StatTemplate.onConstructor(this, identifier); + } + + public TemplateItemOrBlockStat(int statId, String translationKey, int itemIdOrBlockId) { + super(statId, translationKey, itemIdOrBlockId); + } +} \ No newline at end of file diff --git a/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/stat/TemplateSimpleStat.java b/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/stat/TemplateSimpleStat.java new file mode 100644 index 000000000..1c64d2f17 --- /dev/null +++ b/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/stat/TemplateSimpleStat.java @@ -0,0 +1,25 @@ +package net.modificationstation.stationapi.api.template.stat; + +import net.minecraft.stat.SimpleStat; +import net.minecraft.stat.StatFormatter; +import net.modificationstation.stationapi.api.util.Identifier; + +public class TemplateSimpleStat extends SimpleStat implements StatTemplate { + public TemplateSimpleStat(Identifier identifier, String stringId, StatFormatter statTypeProvider) { + this(StatTemplate.getNextId(), stringId, statTypeProvider); + StatTemplate.onConstructor(this, identifier); + } + + public TemplateSimpleStat(Identifier identifier, String stringId) { + this(StatTemplate.getNextId(), stringId); + StatTemplate.onConstructor(this, identifier); + } + + public TemplateSimpleStat(int id, String stringId, StatFormatter statTypeProvider) { + super(id, stringId, statTypeProvider); + } + + public TemplateSimpleStat(int id, String stringId) { + super(id, stringId); + } +} \ No newline at end of file diff --git a/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/stat/TemplateStat.java b/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/stat/TemplateStat.java new file mode 100644 index 000000000..c2b85259e --- /dev/null +++ b/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/stat/TemplateStat.java @@ -0,0 +1,25 @@ +package net.modificationstation.stationapi.api.template.stat; + +import net.minecraft.stat.Stat; +import net.minecraft.stat.StatFormatter; +import net.modificationstation.stationapi.api.util.Identifier; + +public class TemplateStat extends Stat implements StatTemplate { + public TemplateStat(Identifier identifier, String stringId, StatFormatter statTypeProvider) { + this(StatTemplate.getNextId(), stringId, statTypeProvider); + StatTemplate.onConstructor(this, identifier); + } + + public TemplateStat(Identifier identifier, String stringId) { + this(StatTemplate.getNextId(), stringId); + StatTemplate.onConstructor(this, identifier); + } + + public TemplateStat(int id, String stringId, StatFormatter statTypeProvider) { + super(id, stringId, statTypeProvider); + } + + public TemplateStat(int id, String stringId) { + super(id, stringId); + } +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/build.gradle.kts b/station-vanilla-fix-v0/build.gradle.kts index 524049ee2..086f9e285 100644 --- a/station-vanilla-fix-v0/build.gradle.kts +++ b/station-vanilla-fix-v0/build.gradle.kts @@ -1,5 +1,6 @@ -import net.modificationstation.stationapi.gradle.SubprojectHelpers.getSubprojectVersion import net.modificationstation.stationapi.gradle.SubprojectHelpers.addModuleDependencies +import net.modificationstation.stationapi.gradle.SubprojectHelpers.getSubprojectVersion + base.archivesName.set("station-vanilla-fix-v0") version = getSubprojectVersion(project, "1.0.0") @@ -20,5 +21,6 @@ addModuleDependencies(project, "station-nbt-v0", "station-localization-api-v0", "station-gui-api-v0", - "station-renderer-api-v0" + "station-renderer-api-v0", + "station-achievements-v0" ) \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/java/net/modificationstation/stationapi/impl/vanillafix/achievement/VanillaAchievementFixImpl.java b/station-vanilla-fix-v0/src/main/java/net/modificationstation/stationapi/impl/vanillafix/achievement/VanillaAchievementFixImpl.java new file mode 100644 index 000000000..56f25087b --- /dev/null +++ b/station-vanilla-fix-v0/src/main/java/net/modificationstation/stationapi/impl/vanillafix/achievement/VanillaAchievementFixImpl.java @@ -0,0 +1,48 @@ +package net.modificationstation.stationapi.impl.vanillafix.achievement; + +import net.mine_diver.unsafeevents.listener.EventListener; +import net.minecraft.achievement.Achievement; +import net.modificationstation.stationapi.api.StationAPI; +import net.modificationstation.stationapi.api.event.achievement.AchievementRegisterEvent; +import net.modificationstation.stationapi.api.mod.entrypoint.Entrypoint; +import net.modificationstation.stationapi.api.mod.entrypoint.EntrypointManager; +import net.modificationstation.stationapi.api.mod.entrypoint.EventBusPolicy; +import net.modificationstation.stationapi.api.registry.Registry; +import net.modificationstation.stationapi.api.registry.StatRegistry; + +import java.lang.invoke.MethodHandles; + +import static net.minecraft.achievement.Achievements.*; +import static net.modificationstation.stationapi.api.util.Identifier.of; + +@Entrypoint(eventBus = @EventBusPolicy(registerInstance = false)) +@EventListener(phase = StationAPI.INTERNAL_PHASE) +public final class VanillaAchievementFixImpl { + static { + EntrypointManager.registerLookup(MethodHandles.lookup()); + } + + @EventListener + private static void registerStats(AchievementRegisterEvent event) { + register("open_inventory", OPEN_INVENTORY); + register("mine_wood", MINE_WOOD); + register("craft_workbench", CRAFT_WORKBENCH); + register("craft_pickaxe", CRAFT_PICKAXE); + register("craft_furnace", CRAFT_FURNACE); + register("acquire_iron", ACQUIRE_IRON); + register("craft_hoe", CRAFT_HOE); + register("craft_bread", CRAFT_BREAD); + register("craft_cake", CRAFT_CAKE); + register("craft_stone_pickaxe", CRAFT_STONE_PICKAXE); + register("cook_fish", COOK_FISH); + register("craft_rail", CRAFT_RAIL); + register("craft_sword", CRAFT_SWORD); + register("kill_enemy", KILL_ENEMY); + register("kill_cow", KILL_COW); + register("fly_pig", FLY_PIG); + } + + private static void register(String id, Achievement achievement) { + Registry.register(StatRegistry.INSTANCE, achievement.id, of(id), achievement); + } +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/java/net/modificationstation/stationapi/impl/vanillafix/stat/VanillaStatFixImpl.java b/station-vanilla-fix-v0/src/main/java/net/modificationstation/stationapi/impl/vanillafix/stat/VanillaStatFixImpl.java new file mode 100644 index 000000000..19ca1a6c8 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/java/net/modificationstation/stationapi/impl/vanillafix/stat/VanillaStatFixImpl.java @@ -0,0 +1,57 @@ +package net.modificationstation.stationapi.impl.vanillafix.stat; + +import net.mine_diver.unsafeevents.listener.EventListener; +import net.minecraft.stat.Stat; +import net.minecraft.stat.Stats; +import net.modificationstation.stationapi.api.StationAPI; +import net.modificationstation.stationapi.api.event.registry.StatRegistryEvent; +import net.modificationstation.stationapi.api.mod.entrypoint.Entrypoint; +import net.modificationstation.stationapi.api.mod.entrypoint.EntrypointManager; +import net.modificationstation.stationapi.api.mod.entrypoint.EventBusPolicy; +import net.modificationstation.stationapi.api.registry.Registry; +import net.modificationstation.stationapi.api.registry.StatRegistry; + +import java.lang.invoke.MethodHandles; + +import static net.modificationstation.stationapi.api.util.Identifier.of; + +@Entrypoint(eventBus = @EventBusPolicy(registerInstance = false)) +@EventListener(phase = StationAPI.INTERNAL_PHASE) +public final class VanillaStatFixImpl { + static { + EntrypointManager.registerLookup(MethodHandles.lookup()); + } + + @EventListener + private static void registerStats(StatRegistryEvent event) { + StatRegistry registry = event.registry; + + register(registry, "start_game", Stats.START_GAME); + register(registry, "create_world", Stats.CREATE_WORLD); + register(registry, "load_world", Stats.LOAD_WORLD); + register(registry, "join_multiplayer", Stats.JOIN_MULTIPLAYER); + register(registry, "leave_game", Stats.LEAVE_GAME); + register(registry, "play_one_minute", Stats.PLAY_ONE_MINUTE); + register(registry, "walk_one_cm", Stats.WALK_ONE_CM); + register(registry, "swim_one_cm", Stats.SWIM_ONE_CM); + register(registry, "fall_one_cm", Stats.FALL_ONE_CM); + register(registry, "climb_one_cm", Stats.CLIMB_ONE_CM); + register(registry, "fly_one_cm", Stats.FLY_ONE_CM); + register(registry, "dive_one_cm", Stats.DIVE_ONE_CM); + register(registry, "minecart_one_cm", Stats.MINECART_ONE_CM); + register(registry, "boat_one_cm", Stats.BOAT_ONE_CM); + register(registry, "pig_one_cm", Stats.PIG_ONE_CM); + register(registry, "jump", Stats.JUMP); + register(registry, "drop", Stats.DROP); + register(registry, "damage_dealt", Stats.DAMAGE_DEALT); + register(registry, "damage_taken", Stats.DAMAGE_TAKEN); + register(registry, "deaths", Stats.DEATHS); + register(registry, "mob_kills", Stats.MOB_KILLS); + register(registry, "player_kills", Stats.PLAYER_KILLS); + register(registry, "fish_caught", Stats.FISH_CAUGHT); + } + + private static void register(Registry registry, String id, Stat stat) { + Registry.register(registry, stat.id, of(id), stat); + } +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/fabric.mod.json b/station-vanilla-fix-v0/src/main/resources/fabric.mod.json index c795cf13d..dffd34acd 100644 --- a/station-vanilla-fix-v0/src/main/resources/fabric.mod.json +++ b/station-vanilla-fix-v0/src/main/resources/fabric.mod.json @@ -24,7 +24,9 @@ "net.modificationstation.stationapi.impl.vanillafix.item.VanillaItemFixImpl", "net.modificationstation.stationapi.impl.vanillafix.dimension.VanillaDimensionFixImpl", "net.modificationstation.stationapi.impl.vanillafix.recipe.VanillaFuelItemFixImpl", - "net.modificationstation.stationapi.impl.vanillafix.datafixer.VanillaDataFixerImpl" + "net.modificationstation.stationapi.impl.vanillafix.datafixer.VanillaDataFixerImpl", + "net.modificationstation.stationapi.impl.vanillafix.stat.VanillaStatFixImpl", + "net.modificationstation.stationapi.impl.vanillafix.achievement.VanillaAchievementFixImpl" ], "stationapi:event_bus_client": [ "net.modificationstation.stationapi.impl.vanillafix.client.gui.screen.EditWorldScreenImpl", From f6a075d80f3c2d9113bba838ed82fb9aaa1ed0de Mon Sep 17 00:00:00 2001 From: Drew Edwards Date: Sun, 29 Mar 2026 20:43:18 +0100 Subject: [PATCH 14/43] fix: bonemeal api in multiplayer (#249) --- .../stationapi/api/bonemeal/BonemealAPI.java | 10 +++++++--- .../stationapi/mixin/item/DyeItemMixin.java | 4 ++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/station-items-v0/src/main/java/net/modificationstation/stationapi/api/bonemeal/BonemealAPI.java b/station-items-v0/src/main/java/net/modificationstation/stationapi/api/bonemeal/BonemealAPI.java index e254920b8..108755d45 100644 --- a/station-items-v0/src/main/java/net/modificationstation/stationapi/api/bonemeal/BonemealAPI.java +++ b/station-items-v0/src/main/java/net/modificationstation/stationapi/api/bonemeal/BonemealAPI.java @@ -79,7 +79,9 @@ public boolean generate(World world, Random random, int x, int y, int z) { BlockState worldState = world.getBlockState(x, y, z); if (!worldState.isAir()) return false; if (state.getBlock().canPlaceAt(world, x, y, z)) { - world.setBlockState(x, y, z, state); + if (!world.isRemote) { + world.setBlockState(x, y, z, state); + } return true; } return false; @@ -94,8 +96,10 @@ public boolean generate(World world, Random random, int x, int y, int z) { BlockState worldState = world.getBlockState(x, y, z); if (!worldState.isAir()) return false; if (STATE.getBlock().canPlaceAt(world, x, y, z)) { - world.setBlockState(x, y, z, STATE); - world.setBlockMeta(x, y, z, 1); + if (!world.isRemote) { + world.setBlockState(x, y, z, STATE); + world.setBlockMeta(x, y, z, 1); + } return true; } return false; diff --git a/station-items-v0/src/main/java/net/modificationstation/stationapi/mixin/item/DyeItemMixin.java b/station-items-v0/src/main/java/net/modificationstation/stationapi/mixin/item/DyeItemMixin.java index 9613eafdc..e08ef1cea 100644 --- a/station-items-v0/src/main/java/net/modificationstation/stationapi/mixin/item/DyeItemMixin.java +++ b/station-items-v0/src/main/java/net/modificationstation/stationapi/mixin/item/DyeItemMixin.java @@ -27,13 +27,13 @@ private void stationapi_onBonemealUse(ItemStack item, PlayerEntity player, World if (state.getBlock().onBonemealUse(world, x, y, z, state)) { world.setBlocksDirty(x, y, z, x, y, z); info.setReturnValue(true); - item.count--; + if (!world.isRemote) item.count--; return; } if (BonemealAPI.generate(world, x, y, z, state, side)) { world.setBlocksDirty(x - 8, y - 8, z - 8, x + 8, y + 8, z + 8); info.setReturnValue(true); - item.count--; + if (!world.isRemote) item.count--; } } } From b5b91eb4042bb01df3c57a52a4cf36ad2743012c Mon Sep 17 00:00:00 2001 From: Drew Edwards Date: Tue, 31 Mar 2026 20:19:15 +0100 Subject: [PATCH 15/43] fix: make station-flattening-v0/StatMixin compile (#251) --- .../stationapi/mixin/flattening/StatMixin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/StatMixin.java b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/StatMixin.java index 0d11af5dd..a529d24d4 100644 --- a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/StatMixin.java +++ b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/StatMixin.java @@ -13,7 +13,7 @@ class StatMixin implements StationFlatteningStat { @Mutable @Shadow @Final public int id; @Unique - private RegistryEntry.Reference stationapi_registryEntry; + private RegistryEntry.Reference.IntrusiveReserved stationapi_registryEntry; @ModifyVariable( method = "(ILjava/lang/String;Lnet/minecraft/stat/StatFormatter;)V", From f263a8e068cfc0877fb3ea985b6b15324e1073cc Mon Sep 17 00:00:00 2001 From: Drew Edwards Date: Sat, 4 Apr 2026 16:48:07 +0100 Subject: [PATCH 16/43] fix: memory leak during registry growth (#253) --- .../api/registry/SimpleRegistry.java | 37 +++++++++++++++++-- 1 file changed, 33 insertions(+), 4 deletions(-) diff --git a/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/SimpleRegistry.java b/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/SimpleRegistry.java index ff0dc218e..c10e67742 100644 --- a/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/SimpleRegistry.java +++ b/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/SimpleRegistry.java @@ -194,8 +194,23 @@ private Reference set(int rawId, RegistryKey registryKey, T value, Lifecyc this.keyToEntry.put(registryKey, reference); this.idToEntry.put(registryKey.getValue(), reference); this.valueToEntry.put(value, reference); - this.rawIdToEntry.size(Math.max(this.rawIdToEntry.size(), rawId + 1)); - this.rawIdToEntry.set(rawId, reference); + + int size = rawIdToEntry.size(); + if (rawId == size) { + // If we're appending a new element, use add() to allow ReferenceArrayList to efficiently grow the capacity + // by at least 50% if necessary, and avoid memory leaks by resizing on each insertion. + rawIdToEntry.add(reference); + } else if (rawId > size) { + // Grow the array to the required size first by adding nulls. Calls grow() internally, growing it by at + // least 50%. More efficient than addElements, which takes an array and only uses size(), potentially + // incurring unnecessary additional array copies internally. + rawIdToEntry.addAll(Collections.nCopies(rawId - size, null)); + rawIdToEntry.add(reference); // This may also call grow() internally, but ideally shouldn't. + } else { + // Otherwise, just use set() to change the existing value in the registry directly. + rawIdToEntry.set(rawId, reference); + } + this.entryToRawId.put(value, rawId); if (this.nextId <= rawId) this.nextId = rawId + 1; @@ -615,8 +630,22 @@ public void remap(String name, Reference2IntMap remoteIndexedEntries } // Add the new object, increment nextId to match. - rawIdToEntry.size(Math.max(this.rawIdToEntry.size(), id + 1)); - rawIdToEntry.set(id, object); + int size = rawIdToEntry.size(); + if (id == size) { + // If we're appending a new element, use add() to allow ReferenceArrayList to efficiently grow the + // capacity by at least 50% if necessary, and avoid memory leaks by resizing on each insertion. + rawIdToEntry.add(object); + } else if (id > size) { + // Grow the array to the required size first by adding nulls. Calls grow() internally, growing it by at + // least 50%. More efficient than addElements, which takes an array and only uses size(), potentially + // incurring unnecessary additional array copies internally. + rawIdToEntry.addAll(Collections.nCopies(id - size, null)); + rawIdToEntry.add(object); // This may also call grow() internally, but ideally shouldn't. + } else { + // Otherwise, just use set() to change the existing value in the registry directly. + rawIdToEntry.set(id, object); + } + entryToRawId.put(object.value(), id); if (nextId <= id) nextId = id + 1; } From e80e2cc4769d4a765394feb4bd09b8394f113be0 Mon Sep 17 00:00:00 2001 From: mine_diver Date: Sat, 4 Apr 2026 21:09:28 +0500 Subject: [PATCH 17/43] Validate.inclusiveBetween -> Objects.checkIndex --- .../api/util/collection/PackedIntegerArray.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/api/util/collection/PackedIntegerArray.java b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/api/util/collection/PackedIntegerArray.java index 37f2cc032..b1ce8a278 100644 --- a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/api/util/collection/PackedIntegerArray.java +++ b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/api/util/collection/PackedIntegerArray.java @@ -2,9 +2,9 @@ import net.modificationstation.stationapi.api.world.chunk.CompactingPackedIntegerArray; import net.modificationstation.stationapi.impl.world.chunk.Palette; -import org.apache.commons.lang3.Validate; import org.jetbrains.annotations.Nullable; +import java.util.Objects; import java.util.function.IntConsumer; public class PackedIntegerArray @@ -59,7 +59,7 @@ public PackedIntegerArray(int elementBits, int size) { } public PackedIntegerArray(int elementBits, int size, @SuppressWarnings("NullableProblems") @Nullable long[] data) { - Validate.inclusiveBetween(1L, 32L, elementBits); + Objects.checkIndex(elementBits - 1, 32); this.size = size; this.elementBits = elementBits; this.maxValue = (1L << elementBits) - 1L; @@ -87,8 +87,8 @@ private int getStorageIndex(int index) { @Override public int swap(int index, int value) { - Validate.inclusiveBetween(0L, this.size - 1, index); - Validate.inclusiveBetween(0L, this.maxValue, value); + Objects.checkIndex(index, this.size); + Objects.checkIndex(value, this.maxValue + 1); int i = this.getStorageIndex(index); long l = this.data[i]; int j = (index - i * this.elementsPerLong) * this.elementBits; @@ -99,8 +99,8 @@ public int swap(int index, int value) { @Override public void set(int index, int value) { - Validate.inclusiveBetween(0L, this.size - 1, index); - Validate.inclusiveBetween(0L, this.maxValue, value); + Objects.checkIndex(index, this.size); + Objects.checkIndex(value, this.maxValue + 1); int i = this.getStorageIndex(index); long l = this.data[i]; int j = (index - i * this.elementsPerLong) * this.elementBits; @@ -109,7 +109,7 @@ public void set(int index, int value) { @Override public int get(int index) { - Validate.inclusiveBetween(0L, this.size - 1, index); + Objects.checkIndex(index, this.size); int i = this.getStorageIndex(index); long l = this.data[i]; int j = (index - i * this.elementsPerLong) * this.elementBits; From 6f4c93d210ec873fa8eede721890e0c34c1cb36a Mon Sep 17 00:00:00 2001 From: mine_diver Date: Sun, 5 Apr 2026 11:56:03 +0500 Subject: [PATCH 18/43] setBlockState -> setBlockStateWithoutNotifyingNeighbors --- .../sltest/block/LampBlock.java | 4 ++-- .../sltest/block/ModdedModelBlock.java | 15 +++++++-------- .../sltest/dispenser/DispenserListener.java | 4 ++-- .../sltest/mixin/MixinObsidian.java | 10 +--------- .../sltest/worldgen/TestTree.java | 4 ++-- .../api/world/StationFlatteningWorld.java | 12 ++++++------ .../stationapi/mixin/flattening/WorldMixin.java | 6 +++--- .../mixin/flattening/client/ClientWorldMixin.java | 2 +- .../stationapi/api/bonemeal/BonemealAPI.java | 4 ++-- .../api/template/item/BlockStateItem.java | 2 +- .../api/worldgen/surface/StateSurfaceRule.java | 2 +- 11 files changed, 28 insertions(+), 37 deletions(-) diff --git a/src/test/java/net/modificationstation/sltest/block/LampBlock.java b/src/test/java/net/modificationstation/sltest/block/LampBlock.java index 1936325b4..19540051b 100644 --- a/src/test/java/net/modificationstation/sltest/block/LampBlock.java +++ b/src/test/java/net/modificationstation/sltest/block/LampBlock.java @@ -6,10 +6,10 @@ import net.minecraft.world.BlockView; import net.minecraft.world.World; import net.modificationstation.stationapi.api.block.BlockState; -import net.modificationstation.stationapi.api.util.Identifier; import net.modificationstation.stationapi.api.state.StateManager.Builder; import net.modificationstation.stationapi.api.state.property.BooleanProperty; import net.modificationstation.stationapi.api.template.block.TemplateBlock; +import net.modificationstation.stationapi.api.util.Identifier; import net.modificationstation.stationapi.api.world.BlockStateView; public class LampBlock extends TemplateBlock { @@ -46,7 +46,7 @@ public int getTexture(int side) { public boolean onUse(World level, int x, int y, int z, PlayerEntity player) { BlockState state = level.getBlockState(x, y, z); state = state.with(ACTIVE, !state.get(ACTIVE)); - level.setBlockState(x, y, z, state); + level.setBlockStateWithoutNotifyingNeighbors(x, y, z, state); return super.onUse(level, x, y, z, player); } } diff --git a/src/test/java/net/modificationstation/sltest/block/ModdedModelBlock.java b/src/test/java/net/modificationstation/sltest/block/ModdedModelBlock.java index 7ad94fa8b..508253e7c 100644 --- a/src/test/java/net/modificationstation/sltest/block/ModdedModelBlock.java +++ b/src/test/java/net/modificationstation/sltest/block/ModdedModelBlock.java @@ -1,19 +1,18 @@ package net.modificationstation.sltest.block; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.entity.LivingEntity; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; import net.modificationstation.stationapi.api.block.BlockState; -import net.modificationstation.stationapi.api.util.Identifier; import net.modificationstation.stationapi.api.state.StateManager; import net.modificationstation.stationapi.api.template.block.TemplateBlock; +import net.modificationstation.stationapi.api.util.Identifier; import net.modificationstation.stationapi.api.util.math.Direction; import static net.modificationstation.stationapi.api.state.property.Properties.HORIZONTAL_FACING; -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.entity.LivingEntity; -import net.minecraft.util.math.MathHelper; -import net.minecraft.world.World; - public class ModdedModelBlock extends TemplateBlock { private static final Direction[] DIRECTIONS = new Direction[] { Direction.WEST, Direction.NORTH, Direction.EAST, Direction.SOUTH }; @@ -29,7 +28,7 @@ public boolean isOpaque() { @Override public void onPlaced(World level, int x, int y, int z, LivingEntity living) { - level.setBlockState(x, y, z, getDefaultState().with(HORIZONTAL_FACING, DIRECTIONS[MathHelper.floor((double)(living.yaw * 4.0F / 360.0F) + 0.5D) & 3])); + level.setBlockStateWithoutNotifyingNeighbors(x, y, z, getDefaultState().with(HORIZONTAL_FACING, DIRECTIONS[MathHelper.floor((double)(living.yaw * 4.0F / 360.0F) + 0.5D) & 3])); } @Override diff --git a/src/test/java/net/modificationstation/sltest/dispenser/DispenserListener.java b/src/test/java/net/modificationstation/sltest/dispenser/DispenserListener.java index cd525aa9f..7a7802554 100644 --- a/src/test/java/net/modificationstation/sltest/dispenser/DispenserListener.java +++ b/src/test/java/net/modificationstation/sltest/dispenser/DispenserListener.java @@ -43,7 +43,7 @@ public static void changeDispenseBehavior(DispenseEvent event) { // Make water buckets place water if (context.itemStack.itemId == Item.WATER_BUCKET.id) { if (world.getMaterial(facing.x, facing.y, facing.z) == Material.AIR) { - world.setBlockStateWithNotify(facing.x, facing.y, facing.z, Block.WATER.getDefaultState()); + world.setBlockState(facing.x, facing.y, facing.z, Block.WATER.getDefaultState()); context.dispenser.setStack(context.slot, new ItemStack(Item.BUCKET)); event.cancel(); } @@ -52,7 +52,7 @@ public static void changeDispenseBehavior(DispenseEvent event) { // Make lava buckets place lava if (context.itemStack.itemId == Item.LAVA_BUCKET.id) { if (world.getMaterial(facing.x, facing.y, facing.z) == Material.AIR) { - world.setBlockStateWithNotify(facing.x, facing.y, facing.z, Block.LAVA.getDefaultState()); + world.setBlockState(facing.x, facing.y, facing.z, Block.LAVA.getDefaultState()); context.dispenser.setStack(context.slot, new ItemStack(Item.BUCKET)); event.cancel(); } diff --git a/src/test/java/net/modificationstation/sltest/mixin/MixinObsidian.java b/src/test/java/net/modificationstation/sltest/mixin/MixinObsidian.java index bde561ff2..eaa615e31 100644 --- a/src/test/java/net/modificationstation/sltest/mixin/MixinObsidian.java +++ b/src/test/java/net/modificationstation/sltest/mixin/MixinObsidian.java @@ -6,20 +6,12 @@ import net.modificationstation.stationapi.api.block.BlockState; import net.modificationstation.stationapi.api.block.StationBlock; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -import javax.swing.ImageIcon; -import javax.swing.JFrame; -import javax.swing.JLabel; -import java.awt.image.BufferedImage; -import java.awt.image.DataBufferInt; @Mixin(ObsidianBlock.class) public abstract class MixinObsidian implements StationBlock { @Override public boolean onBonemealUse(World world, int x, int y, int z, BlockState state) { - world.setBlockState(x, y, z, Block.LOG.getDefaultState()); + world.setBlockStateWithoutNotifyingNeighbors(x, y, z, Block.LOG.getDefaultState()); System.out.println(x + " " + y + " " + z); return true; } diff --git a/src/test/java/net/modificationstation/sltest/worldgen/TestTree.java b/src/test/java/net/modificationstation/sltest/worldgen/TestTree.java index 86611d281..e9888ffe9 100644 --- a/src/test/java/net/modificationstation/sltest/worldgen/TestTree.java +++ b/src/test/java/net/modificationstation/sltest/worldgen/TestTree.java @@ -36,7 +36,7 @@ public boolean generate(World level, Random random, int x, int y, int z) { (random.nextInt(2) == 0 || dy == 0) || Block.BLOCKS_OPAQUE[level.getBlockId(px, py, pz)] ) continue; - level.setBlockState(px, py, pz, leaves); + level.setBlockStateWithoutNotifyingNeighbors(px, py, pz, leaves); } } } @@ -44,7 +44,7 @@ public boolean generate(World level, Random random, int x, int y, int z) { for (int i = 0; i < height; ++i) { BlockState state = level.getBlockState(x, y + i, z); if (!state.isAir() && !state.getMaterial().isReplaceable() && state.isOf(Block.LEAVES)) continue; - level.setBlockState(x, y + i, z, log); + level.setBlockStateWithoutNotifyingNeighbors(x, y + i, z, log); } return true; diff --git a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/api/world/StationFlatteningWorld.java b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/api/world/StationFlatteningWorld.java index ac88927e2..ea6f3bf56 100644 --- a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/api/world/StationFlatteningWorld.java +++ b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/api/world/StationFlatteningWorld.java @@ -11,11 +11,11 @@ default BlockState getBlockState(int x, int y, int z) { return Util.assertImpl(); } - default BlockState setBlockState(int x, int y, int z, BlockState blockState) { + default BlockState setBlockStateWithoutNotifyingNeighbors(int x, int y, int z, BlockState blockState) { return Util.assertImpl(); } - default BlockState setBlockStateWithNotify(int x, int y, int z, BlockState blockState) { + default BlockState setBlockState(int x, int y, int z, BlockState blockState) { return Util.assertImpl(); } @@ -23,12 +23,12 @@ default BlockState setBlockStateWithMetadata(int x, int y, int z, BlockState blo return Util.assertImpl(); } - default BlockState setBlockState(BlockPos pos, BlockState blockState) { - return setBlockState(pos.x, pos.y, pos.z, blockState); + default BlockState setBlockStateWithoutNotifyingNeighbors(BlockPos pos, BlockState blockState) { + return setBlockStateWithoutNotifyingNeighbors(pos.x, pos.y, pos.z, blockState); } - default BlockState setBlockStateWithNotify(BlockPos pos, BlockState blockState) { - return setBlockStateWithNotify(pos.x, pos.y, pos.z, blockState); + default BlockState setBlockState(BlockPos pos, BlockState blockState) { + return setBlockState(pos.x, pos.y, pos.z, blockState); } default BlockState setBlockStateWithMetadataWithNotify(int x, int y, int z, BlockState blockState, int meta) { diff --git a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/WorldMixin.java b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/WorldMixin.java index 30a64f3ff..8193af5fd 100644 --- a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/WorldMixin.java +++ b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/WorldMixin.java @@ -34,14 +34,14 @@ public BlockState getBlockState(int x, int y, int z) { @Override @Unique - public BlockState setBlockState(int x, int y, int z, BlockState blockState) { + public BlockState setBlockStateWithoutNotifyingNeighbors(int x, int y, int z, BlockState blockState) { return getChunkFromPos(x, z).setBlockState(x & 15, y, z & 15, blockState); } @Override @Unique - public BlockState setBlockStateWithNotify(int x, int y, int z, BlockState blockState) { - BlockState oldBlockState = setBlockState(x, y, z, blockState); + public BlockState setBlockState(int x, int y, int z, BlockState blockState) { + BlockState oldBlockState = setBlockStateWithoutNotifyingNeighbors(x, y, z, blockState); if (oldBlockState != null) { blockUpdate(x, y, z, blockState.getBlock().id); return oldBlockState; diff --git a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/client/ClientWorldMixin.java b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/client/ClientWorldMixin.java index 8a1fe8b9f..ef6391f4b 100644 --- a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/client/ClientWorldMixin.java +++ b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/client/ClientWorldMixin.java @@ -97,7 +97,7 @@ private boolean stationapi_useBlockState(World instance, int x, int y, int z, in public BlockState setBlockState(int x, int y, int z, BlockState blockState) { BlockState n = this.getBlockState(x, y, z); int n2 = this.getBlockMeta(x, y, z); - BlockState result = super.setBlockState(x, y, z, blockState); + BlockState result = super.setBlockStateWithoutNotifyingNeighbors(x, y, z, blockState); if (result != null) { //noinspection unchecked,DataFlowIssue this.blockResets.add(new ClientBlockChange((ClientWorld) (Object) this, x, y, z, n, n2)); diff --git a/station-items-v0/src/main/java/net/modificationstation/stationapi/api/bonemeal/BonemealAPI.java b/station-items-v0/src/main/java/net/modificationstation/stationapi/api/bonemeal/BonemealAPI.java index 108755d45..6432ee634 100644 --- a/station-items-v0/src/main/java/net/modificationstation/stationapi/api/bonemeal/BonemealAPI.java +++ b/station-items-v0/src/main/java/net/modificationstation/stationapi/api/bonemeal/BonemealAPI.java @@ -80,7 +80,7 @@ public boolean generate(World world, Random random, int x, int y, int z) { if (!worldState.isAir()) return false; if (state.getBlock().canPlaceAt(world, x, y, z)) { if (!world.isRemote) { - world.setBlockState(x, y, z, state); + world.setBlockStateWithoutNotifyingNeighbors(x, y, z, state); } return true; } @@ -97,7 +97,7 @@ public boolean generate(World world, Random random, int x, int y, int z) { if (!worldState.isAir()) return false; if (STATE.getBlock().canPlaceAt(world, x, y, z)) { if (!world.isRemote) { - world.setBlockState(x, y, z, STATE); + world.setBlockStateWithoutNotifyingNeighbors(x, y, z, STATE); world.setBlockMeta(x, y, z, 1); } return true; diff --git a/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/item/BlockStateItem.java b/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/item/BlockStateItem.java index d9b7e9faa..7334a27a8 100644 --- a/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/item/BlockStateItem.java +++ b/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/item/BlockStateItem.java @@ -65,7 +65,7 @@ public boolean useOnBlock(ItemStack itemStack, PlayerEntity player, World world, .side(direction) .block(block) .blockItem(itemStack) - .placeFunction(() -> world.setBlockStateWithNotify(x, y, z, blockState) != null) + .placeFunction(() -> world.setBlockState(x, y, z, blockState) != null) .build()).placeFunction.getAsBoolean() ) { block.onPlaced(world, x, y, z, direction.getId()); diff --git a/station-worldgen-api-v0/src/main/java/net/modificationstation/stationapi/api/worldgen/surface/StateSurfaceRule.java b/station-worldgen-api-v0/src/main/java/net/modificationstation/stationapi/api/worldgen/surface/StateSurfaceRule.java index ffef14429..5e2257d8d 100644 --- a/station-worldgen-api-v0/src/main/java/net/modificationstation/stationapi/api/worldgen/surface/StateSurfaceRule.java +++ b/station-worldgen-api-v0/src/main/java/net/modificationstation/stationapi/api/worldgen/surface/StateSurfaceRule.java @@ -12,6 +12,6 @@ public StateSurfaceRule(BlockState state) { @Override public void apply(World world, int x, int y, int z) { - world.setBlockState(x, y, z, state); + world.setBlockStateWithoutNotifyingNeighbors(x, y, z, state); } } From aac842291f4013eafd8aa136a700a4f5fa46b471 Mon Sep 17 00:00:00 2001 From: calmilamsy Date: Tue, 7 Apr 2026 23:05:33 +0100 Subject: [PATCH 19/43] This is what we call a bad idea, use NBT instead --- .../api/network/packet/MessagePacket.java | 66 ++++--------------- 1 file changed, 12 insertions(+), 54 deletions(-) diff --git a/station-networking-v0/src/main/java/net/modificationstation/stationapi/api/network/packet/MessagePacket.java b/station-networking-v0/src/main/java/net/modificationstation/stationapi/api/network/packet/MessagePacket.java index cee19ba32..fd8ab735c 100644 --- a/station-networking-v0/src/main/java/net/modificationstation/stationapi/api/network/packet/MessagePacket.java +++ b/station-networking-v0/src/main/java/net/modificationstation/stationapi/api/network/packet/MessagePacket.java @@ -100,18 +100,6 @@ public class MessagePacket extends Packet implements ManagedPacketAll objects are converted to JSON strings using GSON to be sent over to the other side. - * Object's classes must also be present on the receiver side. - * - *

Objects won't go through GSON if the packet is processed locally. - */ - public Object[] objects; - /** * Internal Message constructor for initialization when received. */ @@ -314,12 +302,6 @@ public void read(DataInputStream in) { for (int i = 0; i < length; i++) strings[i] = readString(in, 32767); } - if (present[9]) { - length = in.readInt(); - objectsInternal = new String[length * 2]; - for (int i = 0; i < length * 2; i++) - objectsInternal[i] = readString(in, 32767); - } } catch (IOException e) { throw new RuntimeException(e); } @@ -343,19 +325,18 @@ public void write(DataOutputStream out) { longs == null, floats == null, doubles == null, - strings == null, - objects == null + strings == null }; - out.writeShort((short) ((absent[0] ? 0 : 512) + - (absent[1] ? 0 : 256) + - (absent[2] ? 0 : 128) + - (absent[3] ? 0 : 64) + - (absent[4] ? 0 : 32) + - (absent[5] ? 0 : 16) + - (absent[6] ? 0 : 8) + - (absent[7] ? 0 : 4) + - (absent[8] ? 0 : 2) + - (absent[9] ? 0 : 1))); + out.writeShort((short) ( + (absent[0] ? 0 : 256) + + (absent[1] ? 0 : 128) + + (absent[2] ? 0 : 64) + + (absent[3] ? 0 : 32) + + (absent[4] ? 0 : 16) + + (absent[5] ? 0 : 8) + + (absent[6] ? 0 : 4) + + (absent[7] ? 0 : 2) + + (absent[8] ? 0 : 1))); if (!absent[0]) { int length = booleans.length; out.writeInt(length); @@ -419,14 +400,6 @@ public void write(DataOutputStream out) { for (String s : strings) writeString(s, out); } - if (!absent[9]) { - out.writeInt(objects.length); - Gson gson = new Gson(); - for (Object o : objects) { - writeString(gson.toJson(o), out); - writeString(o == null ? "null" : o.getClass().getName(), out); - } - } } catch (IOException e) { throw new RuntimeException(e); } @@ -462,26 +435,11 @@ public int size() { (longs == null ? 0 : size(longs)) + (floats == null ? 0 : size(floats)) + (doubles == null ? 0 : size(doubles)) + - (strings == null ? 0 : size(strings)) + - (objects == null ? 0 : size(objects)); + (strings == null ? 0 : size(strings)); } @Override public @NotNull PacketType getType() { return TYPE; } - - public Object[] deserializeObjects() { - objects = new Object[objectsInternal.length / 2]; - Gson gson = new Gson(); - for (int i = 0; i < objectsInternal.length; i+=2) - try { - String objectJson = objectsInternal[0]; - String className = objectsInternal[1]; - objects[i] = className.equals("null") ? null : gson.fromJson(objectJson, Class.forName(className)); - } catch (ClassNotFoundException e) { - throw new RuntimeException(e); - } - return objects; - } } From bdc124a44106f4ab14ebfeddc371da53b6d86735 Mon Sep 17 00:00:00 2001 From: calmilamsy Date: Fri, 10 Apr 2026 16:50:24 +0100 Subject: [PATCH 20/43] Fix message object related compile breakage --- .../sltest/item/ModdedItem.java | 2 +- .../packet/MessageListenerListener.java | 2 +- .../impl/InventoryMessagePacket.java | 20 +++++++++++++++++++ .../screen/container/GuiHelperClientImpl.java | 3 ++- .../network/GuiClientNetworkHandler.java | 3 ++- .../gui/screen/container/GuiHelperImpl.java | 3 ++- .../screen/container/GuiHelperServerImpl.java | 1 - .../api/network/packet/MessagePacket.java | 1 - 8 files changed, 28 insertions(+), 7 deletions(-) create mode 100644 station-container-api-v0/src/main/java/net/modificationstation/stationapi/impl/InventoryMessagePacket.java diff --git a/src/test/java/net/modificationstation/sltest/item/ModdedItem.java b/src/test/java/net/modificationstation/sltest/item/ModdedItem.java index 2bafe7c40..4a248a7ea 100644 --- a/src/test/java/net/modificationstation/sltest/item/ModdedItem.java +++ b/src/test/java/net/modificationstation/sltest/item/ModdedItem.java @@ -29,7 +29,7 @@ public ItemStack use(ItemStack item, World level, PlayerEntity player) { MessagePacket message = new MessagePacket(Identifier.of(SLTest.NAMESPACE, "send_an_object")); hmmSho = new Random().nextInt(); SLTest.LOGGER.info(String.valueOf(hmmSho)); - message.objects = new Object[] { new TestNetworkData(hmmSho) }; +// message.objects = new Object[] { new TestNetworkData(hmmSho) }; PacketHelper.sendTo(player, message); } return super.use(item, level, player); diff --git a/src/test/java/net/modificationstation/sltest/packet/MessageListenerListener.java b/src/test/java/net/modificationstation/sltest/packet/MessageListenerListener.java index 25ec68e48..937238a4f 100644 --- a/src/test/java/net/modificationstation/sltest/packet/MessageListenerListener.java +++ b/src/test/java/net/modificationstation/sltest/packet/MessageListenerListener.java @@ -24,6 +24,6 @@ public void handleGiveMeDiamonds(PlayerEntity playerBase, MessagePacket message) } public void handleSendCoords(PlayerEntity playerBase, MessagePacket message) { - SLTest.LOGGER.info(String.valueOf(((ModdedItem.TestNetworkData) message.objects[0]).getHmmSho())); +// SLTest.LOGGER.info(String.valueOf(((ModdedItem.TestNetworkData) message.objects[0]).getHmmSho())); } } diff --git a/station-container-api-v0/src/main/java/net/modificationstation/stationapi/impl/InventoryMessagePacket.java b/station-container-api-v0/src/main/java/net/modificationstation/stationapi/impl/InventoryMessagePacket.java new file mode 100644 index 000000000..b41a22ab2 --- /dev/null +++ b/station-container-api-v0/src/main/java/net/modificationstation/stationapi/impl/InventoryMessagePacket.java @@ -0,0 +1,20 @@ +package net.modificationstation.stationapi.impl; + +import net.minecraft.inventory.Inventory; +import net.modificationstation.stationapi.api.network.packet.MessagePacket; +import net.modificationstation.stationapi.api.network.packet.PacketType; +import net.modificationstation.stationapi.api.util.Identifier; +import org.jetbrains.annotations.NotNull; + +public class InventoryMessagePacket extends MessagePacket { + public Inventory inventory; + + /** + * Default Message constructor. + * + * @param identifier the Message's identifier. + */ + public InventoryMessagePacket(Identifier identifier) { + super(identifier); + } +} diff --git a/station-container-api-v0/src/main/java/net/modificationstation/stationapi/impl/client/gui/screen/container/GuiHelperClientImpl.java b/station-container-api-v0/src/main/java/net/modificationstation/stationapi/impl/client/gui/screen/container/GuiHelperClientImpl.java index addc57b7e..01561e890 100644 --- a/station-container-api-v0/src/main/java/net/modificationstation/stationapi/impl/client/gui/screen/container/GuiHelperClientImpl.java +++ b/station-container-api-v0/src/main/java/net/modificationstation/stationapi/impl/client/gui/screen/container/GuiHelperClientImpl.java @@ -4,13 +4,14 @@ import net.minecraft.inventory.Inventory; import net.minecraft.screen.ScreenHandler; import net.modificationstation.stationapi.api.network.packet.MessagePacket; +import net.modificationstation.stationapi.impl.InventoryMessagePacket; import net.modificationstation.stationapi.impl.gui.screen.container.GuiHelperImpl; public class GuiHelperClientImpl extends GuiHelperImpl { @Override protected void sideDependentPacket(PlayerEntity player, Inventory inventory, MessagePacket message) { - message.objects = new Object[] { inventory }; + ((InventoryMessagePacket) message).inventory = inventory; } @Override diff --git a/station-container-api-v0/src/main/java/net/modificationstation/stationapi/impl/client/network/GuiClientNetworkHandler.java b/station-container-api-v0/src/main/java/net/modificationstation/stationapi/impl/client/network/GuiClientNetworkHandler.java index 2c30e6535..43facce48 100644 --- a/station-container-api-v0/src/main/java/net/modificationstation/stationapi/impl/client/network/GuiClientNetworkHandler.java +++ b/station-container-api-v0/src/main/java/net/modificationstation/stationapi/impl/client/network/GuiClientNetworkHandler.java @@ -15,6 +15,7 @@ import net.modificationstation.stationapi.api.mod.entrypoint.EventBusPolicy; import net.modificationstation.stationapi.api.network.packet.MessagePacket; import net.modificationstation.stationapi.api.util.Identifier; +import net.modificationstation.stationapi.impl.InventoryMessagePacket; import java.lang.invoke.MethodHandles; @@ -38,7 +39,7 @@ private static void handleGui(PlayerEntity player, MessagePacket message) { GuiHandler guiHandler = GuiHandlerRegistry.INSTANCE.get(Identifier.of(message.strings[0])); if (guiHandler != null) //noinspection deprecation - ((Minecraft) FabricLoader.getInstance().getGameInstance()).setScreen(guiHandler.screenFactory().create(player, isClient ? guiHandler.inventoryFactory().create() : (Inventory) message.objects[0], message)); + ((Minecraft) FabricLoader.getInstance().getGameInstance()).setScreen(guiHandler.screenFactory().create(player, isClient ? guiHandler.inventoryFactory().create() : ((InventoryMessagePacket) message).inventory, message)); if (isClient) player.currentScreenHandler.syncId = message.ints[0]; } diff --git a/station-container-api-v0/src/main/java/net/modificationstation/stationapi/impl/gui/screen/container/GuiHelperImpl.java b/station-container-api-v0/src/main/java/net/modificationstation/stationapi/impl/gui/screen/container/GuiHelperImpl.java index 006ac2705..c2e367e2a 100644 --- a/station-container-api-v0/src/main/java/net/modificationstation/stationapi/impl/gui/screen/container/GuiHelperImpl.java +++ b/station-container-api-v0/src/main/java/net/modificationstation/stationapi/impl/gui/screen/container/GuiHelperImpl.java @@ -7,6 +7,7 @@ import net.modificationstation.stationapi.api.network.packet.MessagePacket; import net.modificationstation.stationapi.api.network.packet.PacketHelper; import net.modificationstation.stationapi.api.util.Identifier; +import net.modificationstation.stationapi.impl.InventoryMessagePacket; import java.util.function.Consumer; @@ -17,7 +18,7 @@ public void openGUI(PlayerEntity player, Identifier identifier, Inventory invent } public void openGUI(PlayerEntity player, Identifier identifier, Inventory inventory, ScreenHandler container, Consumer customData) { - MessagePacket message = new MessagePacket(Identifier.of(StationAPI.NAMESPACE, "open_gui")); + MessagePacket message = new InventoryMessagePacket(Identifier.of(StationAPI.NAMESPACE, "open_gui")); message.strings = new String[] { identifier.toString() }; sideDependentPacket(player, inventory, message); customData.accept(message); diff --git a/station-container-api-v0/src/main/java/net/modificationstation/stationapi/impl/server/gui/screen/container/GuiHelperServerImpl.java b/station-container-api-v0/src/main/java/net/modificationstation/stationapi/impl/server/gui/screen/container/GuiHelperServerImpl.java index f4debde29..be5c5efc9 100644 --- a/station-container-api-v0/src/main/java/net/modificationstation/stationapi/impl/server/gui/screen/container/GuiHelperServerImpl.java +++ b/station-container-api-v0/src/main/java/net/modificationstation/stationapi/impl/server/gui/screen/container/GuiHelperServerImpl.java @@ -12,7 +12,6 @@ public class GuiHelperServerImpl extends GuiHelperImpl { @Override protected void sideDependentPacket(PlayerEntity player, Inventory inventory, MessagePacket message) { - message.objects = new Object[] { null }; ((ServerPlayerEntityAccessor) player).invokeIncrementScreenHandlerSyncId(); message.ints = new int[] { ((ServerPlayerEntityAccessor) player).getScreenHandlerSyncId() }; } diff --git a/station-networking-v0/src/main/java/net/modificationstation/stationapi/api/network/packet/MessagePacket.java b/station-networking-v0/src/main/java/net/modificationstation/stationapi/api/network/packet/MessagePacket.java index fd8ab735c..35e28bb49 100644 --- a/station-networking-v0/src/main/java/net/modificationstation/stationapi/api/network/packet/MessagePacket.java +++ b/station-networking-v0/src/main/java/net/modificationstation/stationapi/api/network/packet/MessagePacket.java @@ -232,7 +232,6 @@ public void read(DataInputStream in) { identifier = Identifier.of(readString(in, 32767)); short s = in.readShort(); boolean[] present = new boolean[]{ - (s & 512) != 0, (s & 256) != 0, (s & 128) != 0, (s & 64) != 0, From 3771d4e614560b943b485c66c9330ffb4a76559c Mon Sep 17 00:00:00 2001 From: calmilamsy Date: Fri, 10 Apr 2026 16:54:07 +0100 Subject: [PATCH 21/43] Move packet --- .../stationapi/impl/gui/screen/container/GuiHelperImpl.java | 2 +- .../{ => network/packet/play}/InventoryMessagePacket.java | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) rename station-container-api-v0/src/main/java/net/modificationstation/stationapi/impl/{ => network/packet/play}/InventoryMessagePacket.java (74%) diff --git a/station-container-api-v0/src/main/java/net/modificationstation/stationapi/impl/gui/screen/container/GuiHelperImpl.java b/station-container-api-v0/src/main/java/net/modificationstation/stationapi/impl/gui/screen/container/GuiHelperImpl.java index c2e367e2a..e80a5c50f 100644 --- a/station-container-api-v0/src/main/java/net/modificationstation/stationapi/impl/gui/screen/container/GuiHelperImpl.java +++ b/station-container-api-v0/src/main/java/net/modificationstation/stationapi/impl/gui/screen/container/GuiHelperImpl.java @@ -7,7 +7,7 @@ import net.modificationstation.stationapi.api.network.packet.MessagePacket; import net.modificationstation.stationapi.api.network.packet.PacketHelper; import net.modificationstation.stationapi.api.util.Identifier; -import net.modificationstation.stationapi.impl.InventoryMessagePacket; +import net.modificationstation.stationapi.impl.network.packet.play.InventoryMessagePacket; import java.util.function.Consumer; diff --git a/station-container-api-v0/src/main/java/net/modificationstation/stationapi/impl/InventoryMessagePacket.java b/station-container-api-v0/src/main/java/net/modificationstation/stationapi/impl/network/packet/play/InventoryMessagePacket.java similarity index 74% rename from station-container-api-v0/src/main/java/net/modificationstation/stationapi/impl/InventoryMessagePacket.java rename to station-container-api-v0/src/main/java/net/modificationstation/stationapi/impl/network/packet/play/InventoryMessagePacket.java index b41a22ab2..96bd79717 100644 --- a/station-container-api-v0/src/main/java/net/modificationstation/stationapi/impl/InventoryMessagePacket.java +++ b/station-container-api-v0/src/main/java/net/modificationstation/stationapi/impl/network/packet/play/InventoryMessagePacket.java @@ -1,10 +1,8 @@ -package net.modificationstation.stationapi.impl; +package net.modificationstation.stationapi.impl.network.packet.play; import net.minecraft.inventory.Inventory; import net.modificationstation.stationapi.api.network.packet.MessagePacket; -import net.modificationstation.stationapi.api.network.packet.PacketType; import net.modificationstation.stationapi.api.util.Identifier; -import org.jetbrains.annotations.NotNull; public class InventoryMessagePacket extends MessagePacket { public Inventory inventory; From f5ea01875d35ddd230664c67d440756a2512bccc Mon Sep 17 00:00:00 2001 From: calmilamsy Date: Fri, 10 Apr 2026 16:56:01 +0100 Subject: [PATCH 22/43] Oops --- .../impl/client/gui/screen/container/GuiHelperClientImpl.java | 2 +- .../impl/client/network/GuiClientNetworkHandler.java | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/station-container-api-v0/src/main/java/net/modificationstation/stationapi/impl/client/gui/screen/container/GuiHelperClientImpl.java b/station-container-api-v0/src/main/java/net/modificationstation/stationapi/impl/client/gui/screen/container/GuiHelperClientImpl.java index 01561e890..1713d7c25 100644 --- a/station-container-api-v0/src/main/java/net/modificationstation/stationapi/impl/client/gui/screen/container/GuiHelperClientImpl.java +++ b/station-container-api-v0/src/main/java/net/modificationstation/stationapi/impl/client/gui/screen/container/GuiHelperClientImpl.java @@ -4,7 +4,7 @@ import net.minecraft.inventory.Inventory; import net.minecraft.screen.ScreenHandler; import net.modificationstation.stationapi.api.network.packet.MessagePacket; -import net.modificationstation.stationapi.impl.InventoryMessagePacket; +import net.modificationstation.stationapi.impl.network.packet.play.InventoryMessagePacket; import net.modificationstation.stationapi.impl.gui.screen.container.GuiHelperImpl; public class GuiHelperClientImpl extends GuiHelperImpl { diff --git a/station-container-api-v0/src/main/java/net/modificationstation/stationapi/impl/client/network/GuiClientNetworkHandler.java b/station-container-api-v0/src/main/java/net/modificationstation/stationapi/impl/client/network/GuiClientNetworkHandler.java index 43facce48..5136fa9b7 100644 --- a/station-container-api-v0/src/main/java/net/modificationstation/stationapi/impl/client/network/GuiClientNetworkHandler.java +++ b/station-container-api-v0/src/main/java/net/modificationstation/stationapi/impl/client/network/GuiClientNetworkHandler.java @@ -4,7 +4,6 @@ import net.mine_diver.unsafeevents.listener.EventListener; import net.minecraft.client.Minecraft; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.inventory.Inventory; import net.modificationstation.stationapi.api.StationAPI; import net.modificationstation.stationapi.api.client.gui.screen.GuiHandler; import net.modificationstation.stationapi.api.client.registry.GuiHandlerRegistry; @@ -15,7 +14,7 @@ import net.modificationstation.stationapi.api.mod.entrypoint.EventBusPolicy; import net.modificationstation.stationapi.api.network.packet.MessagePacket; import net.modificationstation.stationapi.api.util.Identifier; -import net.modificationstation.stationapi.impl.InventoryMessagePacket; +import net.modificationstation.stationapi.impl.network.packet.play.InventoryMessagePacket; import java.lang.invoke.MethodHandles; From 46fd154f716ebd138095a8017917a935a499ab59 Mon Sep 17 00:00:00 2001 From: mine_diver Date: Sat, 11 Apr 2026 00:56:03 +0500 Subject: [PATCH 23/43] Modern directions --- .../sltest/block/ModdedModelBlock.java | 2 +- .../sltest/texture/TextureListener.java | 8 +- .../item/AutomaticItemPlacementContext.java | 22 ++--- .../stationapi/api/item/ItemUsageContext.java | 2 +- .../api/state/property/Properties.java | 2 +- .../stationapi/api/util/math/Direction.java | 80 +++++++++---------- .../api/util/math/JigsawOrientation.java | 24 +++--- .../stationapi/api/util/math/Vec3i.java | 8 +- .../render/model/ItemModelGenerator.java | 16 ++-- .../render/model/json/ModelElement.java | 10 +-- .../render/model/json/ModelElementFace.java | 1 - .../api/util/math/AffineTransformations.java | 8 +- .../stationapi/api/util/math/CubeFace.java | 8 +- .../aocalc/LightingCalculatorImpl.java | 4 +- .../render/BakedModelRendererImpl.java | 2 +- 15 files changed, 98 insertions(+), 99 deletions(-) diff --git a/src/test/java/net/modificationstation/sltest/block/ModdedModelBlock.java b/src/test/java/net/modificationstation/sltest/block/ModdedModelBlock.java index 508253e7c..2ff0a3c89 100644 --- a/src/test/java/net/modificationstation/sltest/block/ModdedModelBlock.java +++ b/src/test/java/net/modificationstation/sltest/block/ModdedModelBlock.java @@ -15,7 +15,7 @@ public class ModdedModelBlock extends TemplateBlock { - private static final Direction[] DIRECTIONS = new Direction[] { Direction.WEST, Direction.NORTH, Direction.EAST, Direction.SOUTH }; + private static final Direction[] DIRECTIONS = new Direction[] { Direction.SOUTH, Direction.WEST, Direction.NORTH, Direction.EAST}; protected ModdedModelBlock(Identifier id, Material material) { super(id, material); diff --git a/src/test/java/net/modificationstation/sltest/texture/TextureListener.java b/src/test/java/net/modificationstation/sltest/texture/TextureListener.java index 993117132..ea98134cf 100644 --- a/src/test/java/net/modificationstation/sltest/texture/TextureListener.java +++ b/src/test/java/net/modificationstation/sltest/texture/TextureListener.java @@ -31,10 +31,10 @@ public void registerTextures(TextureRegisterEvent event) { altarTextures[Direction.DOWN.ordinal()] = terrain.addTexture(of(NAMESPACE, "blocks/altar_bottom")).index; altarTextures[Direction.UP.ordinal()] = terrain.addTexture(of(NAMESPACE, "blocks/altar_top")).index; - altarTextures[Direction.EAST.ordinal()] = terrain.addTexture(of(NAMESPACE, "blocks/altar_east")).index; - altarTextures[Direction.WEST.ordinal()] = terrain.addTexture(of(NAMESPACE, "blocks/altar_west")).index; - altarTextures[Direction.NORTH.ordinal()] = terrain.addTexture(of(NAMESPACE, "blocks/altar_north")).index; - altarTextures[Direction.SOUTH.ordinal()] = terrain.addTexture(of(NAMESPACE, "blocks/altar_south")).index; + altarTextures[Direction.NORTH.ordinal()] = terrain.addTexture(of(NAMESPACE, "blocks/altar_east")).index; + altarTextures[Direction.SOUTH.ordinal()] = terrain.addTexture(of(NAMESPACE, "blocks/altar_west")).index; + altarTextures[Direction.WEST.ordinal()] = terrain.addTexture(of(NAMESPACE, "blocks/altar_north")).index; + altarTextures[Direction.EAST.ordinal()] = terrain.addTexture(of(NAMESPACE, "blocks/altar_south")).index; ItemListener.testNBTItem.setTexture(of(NAMESPACE, "items/nbtItem")); ItemListener.testItem.setTexture(of(NAMESPACE, "items/highres")); diff --git a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/api/item/AutomaticItemPlacementContext.java b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/api/item/AutomaticItemPlacementContext.java index aedf5e8c0..217891b14 100644 --- a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/api/item/AutomaticItemPlacementContext.java +++ b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/api/item/AutomaticItemPlacementContext.java @@ -43,28 +43,28 @@ public Direction getPlayerLookDirection() { public Direction[] getPlacementDirections() { switch (this.facing) { default: { - return new Direction[]{Direction.DOWN, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP}; + return new Direction[]{Direction.DOWN, Direction.WEST, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.UP}; } case UP: { - return new Direction[]{Direction.DOWN, Direction.UP, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST}; + return new Direction[]{Direction.DOWN, Direction.UP, Direction.WEST, Direction.NORTH, Direction.EAST, Direction.SOUTH}; } - case NORTH: { - return new Direction[]{Direction.DOWN, Direction.NORTH, Direction.EAST, Direction.WEST, Direction.UP, Direction.SOUTH}; + case WEST: { + return new Direction[]{Direction.DOWN, Direction.WEST, Direction.NORTH, Direction.SOUTH, Direction.UP, Direction.EAST}; } - case SOUTH: { - return new Direction[]{Direction.DOWN, Direction.SOUTH, Direction.EAST, Direction.WEST, Direction.UP, Direction.NORTH}; + case EAST: { + return new Direction[]{Direction.DOWN, Direction.EAST, Direction.NORTH, Direction.SOUTH, Direction.UP, Direction.WEST}; } - case WEST: { - return new Direction[]{Direction.DOWN, Direction.WEST, Direction.SOUTH, Direction.UP, Direction.NORTH, Direction.EAST}; + case SOUTH: { + return new Direction[]{Direction.DOWN, Direction.SOUTH, Direction.EAST, Direction.UP, Direction.WEST, Direction.NORTH}; } - case EAST: + case NORTH: } - return new Direction[]{Direction.DOWN, Direction.EAST, Direction.SOUTH, Direction.UP, Direction.NORTH, Direction.WEST}; + return new Direction[]{Direction.DOWN, Direction.NORTH, Direction.EAST, Direction.UP, Direction.WEST, Direction.SOUTH}; } @Override public Direction getHorizontalPlayerFacing() { - return this.facing.getAxis() == Direction.Axis.Y ? Direction.NORTH : this.facing; + return this.facing.getAxis() == Direction.Axis.Y ? Direction.WEST : this.facing; } @Override diff --git a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/api/item/ItemUsageContext.java b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/api/item/ItemUsageContext.java index 911ffd7d3..1e97ecd31 100644 --- a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/api/item/ItemUsageContext.java +++ b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/api/item/ItemUsageContext.java @@ -63,7 +63,7 @@ public World getWorld() { } public Direction getHorizontalPlayerFacing() { - return this.player == null ? Direction.NORTH : Direction.fromRotation(player.yaw); + return this.player == null ? Direction.WEST : Direction.fromRotation(player.yaw); } public boolean shouldCancelInteraction() { diff --git a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/api/state/property/Properties.java b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/api/state/property/Properties.java index 8722f77e6..480cdcfaf 100644 --- a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/api/state/property/Properties.java +++ b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/api/state/property/Properties.java @@ -171,7 +171,7 @@ public class Properties { /** * A property that specifies the direction a block is facing. */ - public static final DirectionProperty FACING = DirectionProperty.of("facing", Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN); + public static final DirectionProperty FACING = DirectionProperty.of("facing", Direction.WEST, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.UP, Direction.DOWN); /** * A property that specifies the direction a hopper's output faces. * diff --git a/station-maths-v0/src/main/java/net/modificationstation/stationapi/api/util/math/Direction.java b/station-maths-v0/src/main/java/net/modificationstation/stationapi/api/util/math/Direction.java index 3846a6585..a8bd06f1e 100644 --- a/station-maths-v0/src/main/java/net/modificationstation/stationapi/api/util/math/Direction.java +++ b/station-maths-v0/src/main/java/net/modificationstation/stationapi/api/util/math/Direction.java @@ -26,14 +26,14 @@ public enum Direction implements StringIdentifiable { DOWN(0, 1, -1, "down", AxisDirection.NEGATIVE, Y, new Vec3i(0, -1, 0)), @SerializedName("up") UP(1, 0, -1, "up", AxisDirection.POSITIVE, Y, new Vec3i(0, 1, 0)), - @SerializedName("east") - EAST(2, 3, 2, "east", AxisDirection.NEGATIVE, Z, new Vec3i(0, 0, -1)), - @SerializedName("west") - WEST(3, 2, 0, "west", AxisDirection.POSITIVE, Z, new Vec3i(0, 0, 1)), @SerializedName("north") - NORTH(4, 5, 1, "north", AxisDirection.NEGATIVE, X, new Vec3i(-1, 0, 0)), + NORTH(2, 3, 2, "north", AxisDirection.NEGATIVE, Z, new Vec3i(0, 0, -1)), @SerializedName("south") - SOUTH(5, 4, 3, "south", AxisDirection.POSITIVE, X, new Vec3i(1, 0, 0)); + SOUTH(3, 2, 0, "south", AxisDirection.POSITIVE, Z, new Vec3i(0, 0, 1)), + @SerializedName("west") + WEST(4, 5, 1, "west", AxisDirection.NEGATIVE, X, new Vec3i(-1, 0, 0)), + @SerializedName("east") + EAST(5, 4, 3, "east", AxisDirection.POSITIVE, X, new Vec3i(1, 0, 0)); public static final Codec CODEC; public static final com.mojang.serialization.Codec VERTICAL_CODEC; @@ -78,9 +78,9 @@ public static Direction[] getEntityFacingOrder(Entity entity) { final float n = bl3 ? k : -k; final float o = l * i; final float p = n * i; - final Direction direction = bl ? SOUTH : NORTH; + final Direction direction = bl ? EAST : WEST; final Direction direction2 = bl2 ? UP : DOWN; - final Direction direction3 = bl3 ? WEST : EAST; + final Direction direction3 = bl3 ? SOUTH : NORTH; return l > n ? m > o ? Direction.listClosest(direction2, direction, direction3) : p > m ? Direction.listClosest(direction, direction3, direction2) : Direction.listClosest(direction, direction2, direction3) : m > p ? Direction.listClosest(direction2, direction3, direction) : o > m ? Direction.listClosest(direction3, direction, direction2) : Direction.listClosest(direction3, direction2, direction); } @@ -111,16 +111,16 @@ public Quaternion getRotationQuaternion() { return switch (this) { case DOWN -> Vec3f.POSITIVE_X.getDegreesQuaternion(180.0f); case UP -> Quaternion.IDENTITY.copy(); - case EAST -> { + case NORTH -> { quaternion.hamiltonProduct(Vec3f.POSITIVE_Z.getDegreesQuaternion(180.0f)); yield quaternion; } - case WEST -> quaternion; - case NORTH -> { + case SOUTH -> quaternion; + case WEST -> { quaternion.hamiltonProduct(Vec3f.POSITIVE_Z.getDegreesQuaternion(-90.0f)); yield quaternion; } - case SOUTH -> { + case EAST -> { quaternion.hamiltonProduct(Vec3f.POSITIVE_Z.getDegreesQuaternion(90.0f)); yield quaternion; } @@ -141,8 +141,8 @@ public AxisDirection getDirection() { public static Direction getLookDirectionForAxis(Entity entity, Axis axis) { return switch (axis) { - case X -> NORTH.pointsTo(entity.yaw) ? NORTH : SOUTH; - case Z -> EAST.pointsTo(entity.yaw) ? EAST : WEST; + case X -> WEST.pointsTo(entity.yaw) ? WEST : EAST; + case Z -> NORTH.pointsTo(entity.yaw) ? NORTH : SOUTH; case Y -> entity.pitch < 0.0f ? UP : DOWN; }; } @@ -153,76 +153,76 @@ public Direction getOpposite() { public Direction rotateClockwise(Axis axis) { return switch (axis) { - case X -> this == NORTH || this == SOUTH ? this : rotateXClockwise(); + case X -> this == WEST || this == EAST ? this : rotateXClockwise(); case Y -> this == UP || this == DOWN ? this : rotateYClockwise(); - case Z -> this == EAST || this == WEST ? this : rotateZClockwise(); + case Z -> this == NORTH || this == SOUTH ? this : rotateZClockwise(); }; } public Direction rotateCounterclockwise(Axis axis) { return switch (axis) { - case X -> this == NORTH || this == SOUTH ? this : rotateXCounterclockwise(); + case X -> this == WEST || this == EAST ? this : rotateXCounterclockwise(); case Y -> this == UP || this == DOWN ? this : rotateYCounterclockwise(); - case Z -> this == EAST || this == WEST ? this : rotateZCounterclockwise(); + case Z -> this == NORTH || this == SOUTH ? this : rotateZCounterclockwise(); }; } public Direction rotateYClockwise() { return switch (this) { + case WEST -> NORTH; case NORTH -> EAST; case EAST -> SOUTH; case SOUTH -> WEST; - case WEST -> NORTH; default -> throw new IllegalStateException("Unable to get Y-rotated facing of " + this); }; } private Direction rotateXClockwise() { return switch (this) { - case UP -> EAST; - case EAST -> DOWN; - case DOWN -> WEST; - case WEST -> UP; + case UP -> NORTH; + case NORTH -> DOWN; + case DOWN -> SOUTH; + case SOUTH -> UP; default -> throw new IllegalStateException("Unable to get X-rotated facing of " + this); }; } private Direction rotateXCounterclockwise() { return switch (this) { - case UP -> WEST; - case WEST -> DOWN; - case DOWN -> EAST; - case EAST -> UP; + case UP -> SOUTH; + case SOUTH -> DOWN; + case DOWN -> NORTH; + case NORTH -> UP; default -> throw new IllegalStateException("Unable to get X-rotated facing of " + this); }; } private Direction rotateZClockwise() { return switch (this) { - case UP -> NORTH; - case NORTH -> DOWN; - case DOWN -> SOUTH; - case SOUTH -> UP; + case UP -> WEST; + case WEST -> DOWN; + case DOWN -> EAST; + case EAST -> UP; default -> throw new IllegalStateException("Unable to get Z-rotated facing of " + this); }; } private Direction rotateZCounterclockwise() { return switch (this) { - case UP -> SOUTH; - case SOUTH -> DOWN; - case DOWN -> NORTH; - case NORTH -> UP; + case UP -> EAST; + case EAST -> DOWN; + case DOWN -> WEST; + case WEST -> UP; default -> throw new IllegalStateException("Unable to get Z-rotated facing of " + this); }; } public Direction rotateYCounterclockwise() { return switch (this) { + case WEST -> SOUTH; case NORTH -> WEST; case EAST -> NORTH; case SOUTH -> EAST; - case WEST -> SOUTH; default -> throw new IllegalStateException("Unable to get CCW facing of " + this); }; } @@ -280,9 +280,9 @@ public static Direction fromRotation(double rotation) { public static Direction from(Axis axis, AxisDirection direction) { return switch (axis) { - case X -> direction == AxisDirection.POSITIVE ? SOUTH : NORTH; + case X -> direction == AxisDirection.POSITIVE ? EAST : WEST; case Y -> direction == AxisDirection.POSITIVE ? UP : DOWN; - case Z -> direction == AxisDirection.POSITIVE ? WEST : EAST; + case Z -> direction == AxisDirection.POSITIVE ? SOUTH : NORTH; }; } @@ -299,7 +299,7 @@ public static Direction getFacing(double x, double y, double z) { } public static Direction getFacing(float x, float y, float z) { - Direction direction = NORTH; + Direction direction = WEST; float f = Float.MIN_VALUE; for (Direction direction2 : ALL) { float g = x * (float)direction2.vector.getX() + y * (float)direction2.vector.getY() + z * (float)direction2.vector.getZ(); @@ -492,7 +492,7 @@ public AxisDirection getOpposite() { public enum Type implements Iterable, Predicate { - HORIZONTAL(new Direction[]{NORTH, EAST, SOUTH, WEST}, new Axis[]{Axis.X, Axis.Z}), + HORIZONTAL(new Direction[]{WEST, NORTH, EAST, SOUTH}, new Axis[]{Axis.X, Axis.Z}), VERTICAL(new Direction[]{UP, DOWN}, new Axis[]{Axis.Y}); private final Direction[] facingArray; diff --git a/station-maths-v0/src/main/java/net/modificationstation/stationapi/api/util/math/JigsawOrientation.java b/station-maths-v0/src/main/java/net/modificationstation/stationapi/api/util/math/JigsawOrientation.java index c81e6b205..b1387ae4d 100644 --- a/station-maths-v0/src/main/java/net/modificationstation/stationapi/api/util/math/JigsawOrientation.java +++ b/station-maths-v0/src/main/java/net/modificationstation/stationapi/api/util/math/JigsawOrientation.java @@ -5,18 +5,18 @@ import net.modificationstation.stationapi.api.util.StringIdentifiable; public enum JigsawOrientation implements StringIdentifiable { - DOWN_EAST("down_east", Direction.DOWN, Direction.EAST), - DOWN_NORTH("down_north", Direction.DOWN, Direction.NORTH), - DOWN_SOUTH("down_south", Direction.DOWN, Direction.SOUTH), - DOWN_WEST("down_west", Direction.DOWN, Direction.WEST), - UP_EAST("up_east", Direction.UP, Direction.EAST), - UP_NORTH("up_north", Direction.UP, Direction.NORTH), - UP_SOUTH("up_south", Direction.UP, Direction.SOUTH), - UP_WEST("up_west", Direction.UP, Direction.WEST), - WEST_UP("west_up", Direction.WEST, Direction.UP), - EAST_UP("east_up", Direction.EAST, Direction.UP), - NORTH_UP("north_up", Direction.NORTH, Direction.UP), - SOUTH_UP("south_up", Direction.SOUTH, Direction.UP); + DOWN_EAST("down_east", Direction.DOWN, Direction.NORTH), + DOWN_NORTH("down_north", Direction.DOWN, Direction.WEST), + DOWN_SOUTH("down_south", Direction.DOWN, Direction.EAST), + DOWN_WEST("down_west", Direction.DOWN, Direction.SOUTH), + UP_EAST("up_east", Direction.UP, Direction.NORTH), + UP_NORTH("up_north", Direction.UP, Direction.WEST), + UP_SOUTH("up_south", Direction.UP, Direction.EAST), + UP_WEST("up_west", Direction.UP, Direction.SOUTH), + WEST_UP("west_up", Direction.SOUTH, Direction.UP), + EAST_UP("east_up", Direction.NORTH, Direction.UP), + NORTH_UP("north_up", Direction.WEST, Direction.UP), + SOUTH_UP("south_up", Direction.EAST, Direction.UP); private static final Int2ObjectMap BY_INDEX = new Int2ObjectOpenHashMap<>(values().length); private final String name; diff --git a/station-maths-v0/src/main/java/net/modificationstation/stationapi/api/util/math/Vec3i.java b/station-maths-v0/src/main/java/net/modificationstation/stationapi/api/util/math/Vec3i.java index 0784e068f..6a1fc4a90 100644 --- a/station-maths-v0/src/main/java/net/modificationstation/stationapi/api/util/math/Vec3i.java +++ b/station-maths-v0/src/main/java/net/modificationstation/stationapi/api/util/math/Vec3i.java @@ -218,7 +218,7 @@ public Vec3i north() { * @implNote This can return the same vector if {@code distance} equals {@code 0}. */ public Vec3i north(int distance) { - return this.offset(Direction.NORTH, distance); + return this.offset(Direction.WEST, distance); } /** @@ -234,7 +234,7 @@ public Vec3i south() { * @implNote This can return the same vector if {@code distance} equals {@code 0}. */ public Vec3i south(int distance) { - return this.offset(Direction.SOUTH, distance); + return this.offset(Direction.EAST, distance); } /** @@ -250,7 +250,7 @@ public Vec3i west() { * @implNote This can return the same vector if {@code distance} equals {@code 0}. */ public Vec3i west(int distance) { - return this.offset(Direction.WEST, distance); + return this.offset(Direction.SOUTH, distance); } /** @@ -266,7 +266,7 @@ public Vec3i east() { * @implNote This can return the same vector if {@code distance} equals {@code 0}. */ public Vec3i east(int distance) { - return this.offset(Direction.EAST, distance); + return this.offset(Direction.NORTH, distance); } /** diff --git a/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/render/model/ItemModelGenerator.java b/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/render/model/ItemModelGenerator.java index 4dd96054f..988e7eb60 100644 --- a/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/render/model/ItemModelGenerator.java +++ b/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/render/model/ItemModelGenerator.java @@ -53,8 +53,8 @@ private List addLayerElements(int layer, String key, Sprite sprite int[] frames = contents.getDistinctFrameCount().toArray(); Map map = new EnumMap<>(Direction.class); - map.put(Direction.WEST, new ModelElementFace(null, layer, key, createUnlerpedTexture(new float[] { 0.0F, 0.0F, 16.0F, 16.0F }, 0, animationFrameDelta))); - map.put(Direction.EAST, new ModelElementFace(null, layer, key, createUnlerpedTexture(new float[] { 16.0F, 0.0F, 0.0F, 16.0F }, 0, animationFrameDelta))); + map.put(Direction.SOUTH, new ModelElementFace(null, layer, key, createUnlerpedTexture(new float[] { 0.0F, 0.0F, 16.0F, 16.0F }, 0, animationFrameDelta))); + map.put(Direction.NORTH, new ModelElementFace(null, layer, key, createUnlerpedTexture(new float[] { 16.0F, 0.0F, 0.0F, 16.0F }, 0, animationFrameDelta))); elements.add(new ModelElement(new Vec3f(0.0F, 0.0F, 7.5F), new Vec3f(16.0F, 16.0F, 8.5F), map, null, true)); int first1 = -1; @@ -107,21 +107,21 @@ private List addLayerElements(int layer, String key, Sprite sprite } } else { if (first1 != -1) { - elements.add(createVerticalOutlineElement(Direction.SOUTH, layer, key, first1, last1, x, height, animationFrameDelta, xFactor, yFactor)); + elements.add(createVerticalOutlineElement(Direction.EAST, layer, key, first1, last1, x, height, animationFrameDelta, xFactor, yFactor)); first1 = -1; } if (first2 != -1) { - elements.add(createVerticalOutlineElement(Direction.NORTH, layer, key, first2, last2, x, height, animationFrameDelta, xFactor, yFactor)); + elements.add(createVerticalOutlineElement(Direction.WEST, layer, key, first2, last2, x, height, animationFrameDelta, xFactor, yFactor)); first2 = -1; } } if (first1 != -1) { - elements.add(createVerticalOutlineElement(Direction.SOUTH, layer, key, first1, last1, x, height, animationFrameDelta, xFactor, yFactor)); + elements.add(createVerticalOutlineElement(Direction.EAST, layer, key, first1, last1, x, height, animationFrameDelta, xFactor, yFactor)); first1 = -1; } if (first2 != -1) { - elements.add(createVerticalOutlineElement(Direction.NORTH, layer, key, first2, last2, x, height, animationFrameDelta, xFactor, yFactor)); + elements.add(createVerticalOutlineElement(Direction.WEST, layer, key, first2, last2, x, height, animationFrameDelta, xFactor, yFactor)); first2 = -1; } } @@ -186,8 +186,8 @@ public static boolean doesPixelHaveEdge(SpriteContents sprite, int[] frames, int enum Side { UP(Direction.UP, 0, -1), DOWN(Direction.DOWN, 0, 1), - LEFT(Direction.SOUTH, -1, 0), - RIGHT(Direction.NORTH, 1, 0); + LEFT(Direction.EAST, -1, 0), + RIGHT(Direction.WEST, 1, 0); private final Direction direction; private final int offsetX; diff --git a/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/render/model/json/ModelElement.java b/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/render/model/json/ModelElement.java index 79a43a1ed..e6c00136d 100644 --- a/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/render/model/json/ModelElement.java +++ b/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/render/model/json/ModelElement.java @@ -44,10 +44,10 @@ private float[] getRotatedMatrix(Direction direction) { return switch (direction) { case DOWN -> new float[] { from.getX(), 16 - to.getZ(), to.getX(), 16 - from.getZ() }; case UP -> new float[] { from.getX(), from.getZ(), to.getX(), to.getZ() }; - case NORTH -> new float[] { 16 - to.getX(), 16 - to.getY(), 16 - from.getX(), 16 - from.getY() }; - case SOUTH -> new float[] { from.getX(), 16 - to.getY(), to.getX(), 16 - from.getY() }; - case WEST -> new float[] { from.getZ(), 16 - to.getY(), to.getZ(), 16 - from.getY() }; - case EAST -> new float[] { 16 - to.getZ(), 16 - to.getY(), 16 - from.getZ(), 16 - from.getY() }; + case WEST -> new float[] { 16 - to.getX(), 16 - to.getY(), 16 - from.getX(), 16 - from.getY() }; + case EAST -> new float[] { from.getX(), 16 - to.getY(), to.getX(), 16 - from.getY() }; + case SOUTH -> new float[] { from.getZ(), 16 - to.getY(), to.getZ(), 16 - from.getY() }; + case NORTH -> new float[] { 16 - to.getZ(), 16 - to.getY(), 16 - from.getZ(), 16 - from.getY() }; }; } @@ -119,7 +119,7 @@ private Map deserializeFaces(JsonDeserializationCon } private Direction getDirection(String name) { - Direction direction = Direction.byName(name).rotateClockwise(Direction.Axis.Y); + Direction direction = Direction.byName(name); if (direction == null) throw new JsonParseException("Unknown facing: " + name); else return direction; } diff --git a/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/render/model/json/ModelElementFace.java b/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/render/model/json/ModelElementFace.java index 3ec7fa933..72724e443 100644 --- a/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/render/model/json/ModelElementFace.java +++ b/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/render/model/json/ModelElementFace.java @@ -38,7 +38,6 @@ protected Deserializer() { public ModelElementFace deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException { JsonObject jsonObject = jsonElement.getAsJsonObject(); Direction direction = this.deserializeCullFace(jsonObject); - if (direction != null) direction = direction.rotateClockwise(Direction.Axis.Y); int i = this.deserializeTintIndex(jsonObject); String string = this.deserializeTexture(jsonObject); ModelElementTexture modelElementTexture = jsonDeserializationContext.deserialize(jsonObject, ModelElementTexture.class); diff --git a/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/util/math/AffineTransformations.java b/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/util/math/AffineTransformations.java index 8a479caaa..09c96b788 100644 --- a/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/util/math/AffineTransformations.java +++ b/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/util/math/AffineTransformations.java @@ -14,10 +14,10 @@ public class AffineTransformations { private static final Logger LOGGER = LogManager.getLogger(); public static final EnumMap DIRECTION_ROTATIONS = Util.make(Maps.newEnumMap(Direction.class), (enumMap) -> { - enumMap.put(Direction.WEST, AffineTransformation.identity()); - enumMap.put(Direction.SOUTH, new AffineTransformation(null, new Quaternion(new Vec3f(0.0F, 1.0F, 0.0F), 90.0F, true), null, null)); - enumMap.put(Direction.NORTH, new AffineTransformation(null, new Quaternion(new Vec3f(0.0F, 1.0F, 0.0F), -90.0F, true), null, null)); - enumMap.put(Direction.EAST, new AffineTransformation(null, new Quaternion(new Vec3f(0.0F, 1.0F, 0.0F), 180.0F, true), null, null)); + enumMap.put(Direction.SOUTH, AffineTransformation.identity()); + enumMap.put(Direction.EAST, new AffineTransformation(null, new Quaternion(new Vec3f(0.0F, 1.0F, 0.0F), 90.0F, true), null, null)); + enumMap.put(Direction.WEST, new AffineTransformation(null, new Quaternion(new Vec3f(0.0F, 1.0F, 0.0F), -90.0F, true), null, null)); + enumMap.put(Direction.NORTH, new AffineTransformation(null, new Quaternion(new Vec3f(0.0F, 1.0F, 0.0F), 180.0F, true), null, null)); enumMap.put(Direction.UP, new AffineTransformation(null, new Quaternion(new Vec3f(1.0F, 0.0F, 0.0F), -90.0F, true), null, null)); enumMap.put(Direction.DOWN, new AffineTransformation(null, new Quaternion(new Vec3f(1.0F, 0.0F, 0.0F), 90.0F, true), null, null)); }); diff --git a/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/util/math/CubeFace.java b/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/util/math/CubeFace.java index b47cc51d0..26b61a457 100644 --- a/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/util/math/CubeFace.java +++ b/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/util/math/CubeFace.java @@ -157,10 +157,10 @@ public static final class DirectionIds { static { DOWN = Direction.DOWN.ordinal(); UP = Direction.UP.ordinal(); - EAST = Direction.EAST.ordinal(); - WEST = Direction.WEST.ordinal(); - NORTH = Direction.NORTH.ordinal(); - SOUTH = Direction.SOUTH.ordinal(); + EAST = Direction.NORTH.ordinal(); + WEST = Direction.SOUTH.ordinal(); + NORTH = Direction.WEST.ordinal(); + SOUTH = Direction.EAST.ordinal(); } } } diff --git a/station-renderer-arsenic/src/main/java/net/modificationstation/stationapi/impl/client/arsenic/renderer/aocalc/LightingCalculatorImpl.java b/station-renderer-arsenic/src/main/java/net/modificationstation/stationapi/impl/client/arsenic/renderer/aocalc/LightingCalculatorImpl.java index 9979b677d..503354ef5 100644 --- a/station-renderer-arsenic/src/main/java/net/modificationstation/stationapi/impl/client/arsenic/renderer/aocalc/LightingCalculatorImpl.java +++ b/station-renderer-arsenic/src/main/java/net/modificationstation/stationapi/impl/client/arsenic/renderer/aocalc/LightingCalculatorImpl.java @@ -472,8 +472,8 @@ public float shadeMultiplier(Direction face) { return switch (face) { case DOWN -> 0.5F; case UP -> 1.0F; - case EAST, WEST -> 0.8F; - case NORTH, SOUTH -> 0.6F; + case NORTH, SOUTH -> 0.8F; + case WEST, EAST -> 0.6F; }; } } diff --git a/station-renderer-arsenic/src/main/java/net/modificationstation/stationapi/impl/client/arsenic/renderer/render/BakedModelRendererImpl.java b/station-renderer-arsenic/src/main/java/net/modificationstation/stationapi/impl/client/arsenic/renderer/render/BakedModelRendererImpl.java index f19e8c94c..076ec3c2b 100644 --- a/station-renderer-arsenic/src/main/java/net/modificationstation/stationapi/impl/client/arsenic/renderer/render/BakedModelRendererImpl.java +++ b/station-renderer-arsenic/src/main/java/net/modificationstation/stationapi/impl/client/arsenic/renderer/render/BakedModelRendererImpl.java @@ -189,7 +189,7 @@ private void renderBakedItemModelFlat(BakedModel model, ItemStack stack, float b random.setSeed(42L); boolean bl = stack != null && stack.itemId != 0 && stack.count > 0; for (BakedQuad bakedQuad : model.getQuads(null, null, random)) { - if (bakedQuad.getFace() != Direction.WEST) continue; + if (bakedQuad.getFace() != Direction.SOUTH) continue; int i = bl && bakedQuad.hasColor() ? this.itemColors.getColor(stack, bakedQuad.getColorIndex()) : -1; float light = MathHelper.lerp(bakedQuad.getEmission(), brightness, 1F); i = colorF2I(redI2F(i) * light, greenI2F(i) * light, blueI2F(i) * light); From 1650a6914ee6ba26245ae0f0617fde54f959d9fd Mon Sep 17 00:00:00 2001 From: mine_diver Date: Sat, 11 Apr 2026 00:56:23 +0500 Subject: [PATCH 24/43] BiomeDataInterpolator cache --- .../impl/worldgen/BiomeDataInterpolator.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/station-worldgen-api-v0/src/main/java/net/modificationstation/stationapi/impl/worldgen/BiomeDataInterpolator.java b/station-worldgen-api-v0/src/main/java/net/modificationstation/stationapi/impl/worldgen/BiomeDataInterpolator.java index 8c78bceff..23ef03e4c 100644 --- a/station-worldgen-api-v0/src/main/java/net/modificationstation/stationapi/impl/worldgen/BiomeDataInterpolator.java +++ b/station-worldgen-api-v0/src/main/java/net/modificationstation/stationapi/impl/worldgen/BiomeDataInterpolator.java @@ -1,11 +1,17 @@ package net.modificationstation.stationapi.impl.worldgen; +import it.unimi.dsi.fastutil.longs.Long2ReferenceMap; +import it.unimi.dsi.fastutil.longs.Long2ReferenceOpenHashMap; import net.minecraft.util.math.MathHelper; import net.minecraft.world.biome.Biome; import net.minecraft.world.biome.source.BiomeSource; import java.util.function.Function; public class BiomeDataInterpolator { + // TODO: remove when proper caching/saving is implemented + private static final Long2ReferenceMap GLOBAL_CACHE = new Long2ReferenceOpenHashMap<>(); + private static BiomeSource lastBiomeSource; + private final Function provider; private final float[] data = new float[4]; private final int bitShift; @@ -28,6 +34,11 @@ public BiomeDataInterpolator(Function provider, int side, int rad } public float get(BiomeSource source, int x, int z) { + if (lastBiomeSource != source) { + GLOBAL_CACHE.clear(); + lastBiomeSource = source; + } + int x1 = x >> bitShift; int z1 = z >> bitShift; @@ -61,7 +72,12 @@ private float getInArea(BiomeSource source, int x, int z) { float value = 0; for (int dx = -radius; dx <= radius; dx++) { for (int dz = -radius; dz <= radius; dz++) { - Biome biome = source.getBiome(x + dx * distance, z + dz * distance); + final int lookupX = x + dx * distance; + final int lookupZ = z + dz * distance; + final long key = ((long) (lookupX) << 32L) | lookupZ; + Biome biome = GLOBAL_CACHE.get(key); + if (biome == null) + GLOBAL_CACHE.put(key, biome = source.getBiome(lookupX, lookupZ)); value += provider.apply(biome).floatValue(); } } From 6cb0c73a914bfa33d07f6dc437bc52e08e052673 Mon Sep 17 00:00:00 2001 From: calmilamsy Date: Fri, 10 Apr 2026 23:06:29 +0100 Subject: [PATCH 25/43] Paulevs I swear to god --- .../mixin/worldgen/DimensionMixin.java | 22 ------------------- .../station-worldgen-api-v0.mixins.json | 1 - 2 files changed, 23 deletions(-) delete mode 100644 station-worldgen-api-v0/src/main/java/net/modificationstation/stationapi/mixin/worldgen/DimensionMixin.java diff --git a/station-worldgen-api-v0/src/main/java/net/modificationstation/stationapi/mixin/worldgen/DimensionMixin.java b/station-worldgen-api-v0/src/main/java/net/modificationstation/stationapi/mixin/worldgen/DimensionMixin.java deleted file mode 100644 index 88c68163f..000000000 --- a/station-worldgen-api-v0/src/main/java/net/modificationstation/stationapi/mixin/worldgen/DimensionMixin.java +++ /dev/null @@ -1,22 +0,0 @@ -package net.modificationstation.stationapi.mixin.worldgen; - -import net.minecraft.block.Block; -import net.minecraft.world.World; -import net.minecraft.world.dimension.Dimension; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@Mixin(Dimension.class) -public class DimensionMixin { - @Shadow public World world; - - @Inject(method = "isValidSpawnPoint", at = @At("HEAD"), cancellable = true) - private void fixSpawnPosition(int x, int z, CallbackInfoReturnable info) { - int blockID = this.world.getSpawnBlockId(x, z); - Block block = Block.BLOCKS[blockID]; - info.setReturnValue(block != null && block.isFullCube() && block.isOpaque()); - } -} diff --git a/station-worldgen-api-v0/src/main/resources/station-worldgen-api-v0.mixins.json b/station-worldgen-api-v0/src/main/resources/station-worldgen-api-v0.mixins.json index 2145db785..6bcfbf4f8 100644 --- a/station-worldgen-api-v0/src/main/resources/station-worldgen-api-v0.mixins.json +++ b/station-worldgen-api-v0/src/main/resources/station-worldgen-api-v0.mixins.json @@ -6,7 +6,6 @@ "mixins": [ "BiomeMixin", "BiomeSourceMixin", - "DimensionMixin", "NetherDimensionMixin", "NetherWorldSourceMixin", "OverworldDimensionMixin", From 31d295516f6abc68c11305193cb44f520e590889 Mon Sep 17 00:00:00 2001 From: calmilamsy Date: Sun, 12 Apr 2026 23:19:52 +0100 Subject: [PATCH 26/43] Add ItemCraftedEvent --- .../container/slot/ItemCraftedEvent.java | 15 +++++++++++++++ .../mixin/recipe/CraftingResultMixin.java | 19 +++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 station-recipes-v0/src/main/java/net/modificationstation/stationapi/api/event/container/slot/ItemCraftedEvent.java diff --git a/station-recipes-v0/src/main/java/net/modificationstation/stationapi/api/event/container/slot/ItemCraftedEvent.java b/station-recipes-v0/src/main/java/net/modificationstation/stationapi/api/event/container/slot/ItemCraftedEvent.java new file mode 100644 index 000000000..17a2c5c5c --- /dev/null +++ b/station-recipes-v0/src/main/java/net/modificationstation/stationapi/api/event/container/slot/ItemCraftedEvent.java @@ -0,0 +1,15 @@ +package net.modificationstation.stationapi.api.event.container.slot; + +import lombok.experimental.SuperBuilder; +import net.mine_diver.unsafeevents.Event; +import net.mine_diver.unsafeevents.event.Cancelable; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.inventory.Inventory; +import net.minecraft.item.ItemStack; + +@SuperBuilder +public class ItemCraftedEvent extends Event { + public final PlayerEntity player; + public final Inventory craftingMatrix; + public final ItemStack itemCrafted; +} diff --git a/station-recipes-v0/src/main/java/net/modificationstation/stationapi/mixin/recipe/CraftingResultMixin.java b/station-recipes-v0/src/main/java/net/modificationstation/stationapi/mixin/recipe/CraftingResultMixin.java index bbb916b62..f83c3fa2a 100644 --- a/station-recipes-v0/src/main/java/net/modificationstation/stationapi/mixin/recipe/CraftingResultMixin.java +++ b/station-recipes-v0/src/main/java/net/modificationstation/stationapi/mixin/recipe/CraftingResultMixin.java @@ -6,6 +6,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.screen.slot.CraftingResultSlot; import net.modificationstation.stationapi.api.StationAPI; +import net.modificationstation.stationapi.api.event.container.slot.ItemCraftedEvent; import net.modificationstation.stationapi.api.event.container.slot.ItemUsedInCraftingEvent; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -46,4 +47,22 @@ private void stationapi_onCrafted( .build() ); } + + @Inject( + method = "onTakeItem", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/item/ItemStack;onCraft(Lnet/minecraft/world/World;Lnet/minecraft/entity/player/PlayerEntity;)V", + shift = At.Shift.AFTER + ) + ) + private void stationapi_onTake(ItemStack stack, CallbackInfo ci) { + StationAPI.EVENT_BUS.post( + ItemCraftedEvent.builder() + .player(player) + .craftingMatrix(input) + .itemCrafted(stack).build() + ); + } + } From 5b10bbb0a909274d6f6d375e636d5abdbaa18bab Mon Sep 17 00:00:00 2001 From: calmilamsy Date: Sun, 12 Apr 2026 23:50:33 +0100 Subject: [PATCH 27/43] Add better invalid json recipe feedback --- .../stationapi/impl/recipe/JsonRecipeParserInit.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/station-recipes-v0/src/main/java/net/modificationstation/stationapi/impl/recipe/JsonRecipeParserInit.java b/station-recipes-v0/src/main/java/net/modificationstation/stationapi/impl/recipe/JsonRecipeParserInit.java index d3d3dd91d..69abc1f2a 100644 --- a/station-recipes-v0/src/main/java/net/modificationstation/stationapi/impl/recipe/JsonRecipeParserInit.java +++ b/station-recipes-v0/src/main/java/net/modificationstation/stationapi/impl/recipe/JsonRecipeParserInit.java @@ -65,7 +65,11 @@ private static void parseCraftingShaped(URL recipe) { keys[i] = pattern[i]; for (Map.Entry key : rawKeys) { keys[i] = key.getKey().charAt(0); - keys[i + 1] = new Gson().fromJson(key.getValue(), JsonItemKey.class).get().map(Function.identity(), Function.identity()); + Object out = new Gson().fromJson(key.getValue(), JsonItemKey.class).get().map(Function.identity(), Function.identity()); + if (out == null) { + throw new RuntimeException("Invalid element " + key.getValue() + " inside " + recipe + ", potential invalid item ID?"); + } + keys[i + 1] = out; i += 2; } CraftingRegistry.addShapedRecipe(json.getResult().getItemStack(), keys); From b21a58420b85f203e56520924019f9c8b3b16da8 Mon Sep 17 00:00:00 2001 From: mine_diver Date: Tue, 14 Apr 2026 04:32:19 +0500 Subject: [PATCH 28/43] Automatically set block and item translation keys on instantiation by converting snake_case identifiers into camelCase --- .../sltest/block/Blocks.java | 32 +++++++++---------- .../sltest/item/ItemListener.java | 26 +++++++-------- .../assets/sltest/stationapi/lang/en_US.lang | 12 +++---- .../stationapi/api/util/Util.java | 15 +++++++++ .../api/template/block/BlockTemplate.java | 2 ++ .../api/template/item/ItemTemplate.java | 2 ++ 6 files changed, 54 insertions(+), 35 deletions(-) diff --git a/src/test/java/net/modificationstation/sltest/block/Blocks.java b/src/test/java/net/modificationstation/sltest/block/Blocks.java index ac28cd7d1..42496c2a1 100644 --- a/src/test/java/net/modificationstation/sltest/block/Blocks.java +++ b/src/test/java/net/modificationstation/sltest/block/Blocks.java @@ -21,26 +21,26 @@ public enum Blocks { - TEST_BLOCK("test_block", "testBlock", id -> new TemplateBlock(id, Material.STONE).setHardness(1)), - TEST_ANIMATED_BLOCK("test_animated_block", "testAnimatedBlock", id -> new ModdedMetaBlock(id, Material.NETHER_PORTAL)), - CUSTOM_MODEL_BLOCK("farlands_block", "farlands_block", id -> new ModdedModelBlock(id, Material.SOIL).setHardness(1)), - FREEZER("freezer", "freezer", id -> new BlockFreezer(id).setHardness(2.5F).setSoundGroup(TemplateBlock.DEFAULT_SOUND_GROUP)), - ALTAR("altar", "altar", id -> new BlockAltar(id, Material.STONE).setHardness(3)), - VARIATION_BLOCK("variation_block", "variationBlock", id -> new VariationBlock(id, Material.STONE).setHardness(.5F).setSoundGroup(Block.DEFAULT_SOUND_GROUP).disableAutoItemRegistration()), - EMISSION_CHECKER("emission_checker", "emissionChecker", LampBlock::new), - INDISPENSABLE_BLOCK("indispensable_block", "indispensableBlock", IndispensableBlock::new), - MODDED_LEAVES("modded_leaves", "moddedLeaves", id -> new TemplateLeavesBlock(id, 52)), - MODDED_LOG("modded_log", "moddedLog", TemplateLogBlock::new), - EFFECT_BLOCK("effect_block", "effectBlock", EffectBlock::new), - EFFECT_BLOCK_INF("effect_block_inf", "effectBlockInf", EffectBlockInf::new), - EFFECT_BLOCK_CLEAR("effect_block_clear", "effectBlockClear", EffectBlockClear::new), - FANCY_WOOD_DOOR("fancy_wood_door_block", "fancyWoodDoor", id -> new TemplateDoorBlock(id, Material.WOOD)); + TEST_BLOCK("test_block", id -> new TemplateBlock(id, Material.STONE).setHardness(1)), + TEST_ANIMATED_BLOCK("test_animated_block", id -> new ModdedMetaBlock(id, Material.NETHER_PORTAL)), + CUSTOM_MODEL_BLOCK("farlands_block", id -> new ModdedModelBlock(id, Material.SOIL).setHardness(1)), + FREEZER("freezer", id -> new BlockFreezer(id).setHardness(2.5F).setSoundGroup(TemplateBlock.DEFAULT_SOUND_GROUP)), + ALTAR("altar", id -> new BlockAltar(id, Material.STONE).setHardness(3)), + VARIATION_BLOCK("variation_block", id -> new VariationBlock(id, Material.STONE).setHardness(.5F).setSoundGroup(Block.DEFAULT_SOUND_GROUP).disableAutoItemRegistration()), + EMISSION_CHECKER("emission_checker", LampBlock::new), + INDISPENSABLE_BLOCK("indispensable_block", IndispensableBlock::new), + MODDED_LEAVES("modded_leaves", id -> new TemplateLeavesBlock(id, 52)), + MODDED_LOG("modded_log", TemplateLogBlock::new), + EFFECT_BLOCK("effect_block", EffectBlock::new), + EFFECT_BLOCK_INF("effect_block_inf", EffectBlockInf::new), + EFFECT_BLOCK_CLEAR("effect_block_clear", EffectBlockClear::new), + FANCY_WOOD_DOOR("fancy_wood_door_block", id -> new TemplateDoorBlock(id, Material.WOOD)); private final Runnable register; private Block block; - Blocks(String id, String translationKey, Function factory) { - this.register = () -> block = factory.apply(of(NAMESPACE, id)).setTranslationKey(NAMESPACE, translationKey); + Blocks(String id, Function factory) { + this.register = () -> block = factory.apply(of(NAMESPACE, id)); } public Block get() { diff --git a/src/test/java/net/modificationstation/sltest/item/ItemListener.java b/src/test/java/net/modificationstation/sltest/item/ItemListener.java index 570e9a7c1..4a0fb4446 100644 --- a/src/test/java/net/modificationstation/sltest/item/ItemListener.java +++ b/src/test/java/net/modificationstation/sltest/item/ItemListener.java @@ -30,20 +30,20 @@ public void registerItems(ItemRegistryEvent event) { ToolLevel.GRAPH.putEdge(siblingNode, ToolMaterial.IRON.getToolLevel()); ToolLevel.GRAPH.removeEdge(ToolMaterial.STONE.getToolLevel(), ToolMaterial.IRON.getToolLevel()); - testItem = new ModdedItem(NAMESPACE.id("test_item")).setTranslationKey(NAMESPACE, "testItem"); //8475 + testItem = new ModdedItem(NAMESPACE.id("test_item")); //8475 testMaterial = ToolMaterialFactory.create("testMaterial", 3, Integer.MAX_VALUE, Float.MAX_VALUE, Integer.MAX_VALUE - 2).toolLevel(siblingNode); - testPickaxe = new ModdedPickaxeItem(NAMESPACE.id("test_pickaxe"), testMaterial).setTranslationKey(NAMESPACE, "testPickaxe"); //8476 - testNBTItem = new NBTItem(NAMESPACE.id("nbt_item")).setTranslationKey(NAMESPACE, "nbt_item"); //8477 - testModelItem = new ModelItem(NAMESPACE.id("model_item")).setMaxCount(1).setTranslationKey(NAMESPACE, "idkSomething"); - ironOre = event.register(NAMESPACE.id("ironOre"), new Item(ItemRegistry.AUTO_ID)).setTranslationKey(NAMESPACE.id("ironOre")); - generatedItem = event.register(NAMESPACE.id("generated_item"), new Item(ItemRegistry.AUTO_ID)).setTranslationKey(NAMESPACE.id("generatedItem")); - variationBlockIdle = new BlockStateItem(NAMESPACE.id("variation_block_idle"), Blocks.VARIATION_BLOCK.get().getDefaultState()).setTranslationKey(NAMESPACE, "variationBlockIdle"); - variationBlockPassive = new BlockStateItem(NAMESPACE.id("variation_block_passive"), Blocks.VARIATION_BLOCK.get().getDefaultState().with(VariationBlock.VARIANT, VariationBlock.Variant.PASSIVE)).setTranslationKey(NAMESPACE, "variationBlockPassive"); - variationBlockActive = new BlockStateItem(NAMESPACE.id("variation_block_active"), Blocks.VARIATION_BLOCK.get().getDefaultState().with(VariationBlock.VARIANT, VariationBlock.Variant.ACTIVE)).setTranslationKey(NAMESPACE, "variationBlockActive"); - testShears = new TestShearsItem(NAMESPACE.id("test_shears")).setTranslationKey(NAMESPACE, "test_shears"); - pacifistSword = new PacifistSwordItem(NAMESPACE.id("pacifist_sword")).setTranslationKey(NAMESPACE, "pacifist_sword"); - dullPickaxe = new DullPickaxeItem(NAMESPACE.id("dull_pickaxe")).setTranslationKey(NAMESPACE, "dull_pickaxe"); - fancyDoor = new TemplateDoorItem(NAMESPACE.id("fancy_wood_door"), Material.WOOD, Blocks.FANCY_WOOD_DOOR.get()).setTranslationKey(NAMESPACE, "fancyWoodDoor"); + testPickaxe = new ModdedPickaxeItem(NAMESPACE.id("test_pickaxe"), testMaterial); //8476 + testNBTItem = new NBTItem(NAMESPACE.id("nbt_item")); //8477 + testModelItem = new ModelItem(NAMESPACE.id("model_item")).setMaxCount(1); + ironOre = event.register(NAMESPACE.id("iron_ore"), new Item(ItemRegistry.AUTO_ID)); + generatedItem = event.register(NAMESPACE.id("generated_item"), new Item(ItemRegistry.AUTO_ID)); + variationBlockIdle = new BlockStateItem(NAMESPACE.id("variation_block_idle"), Blocks.VARIATION_BLOCK.get().getDefaultState()); + variationBlockPassive = new BlockStateItem(NAMESPACE.id("variation_block_passive"), Blocks.VARIATION_BLOCK.get().getDefaultState().with(VariationBlock.VARIANT, VariationBlock.Variant.PASSIVE)); + variationBlockActive = new BlockStateItem(NAMESPACE.id("variation_block_active"), Blocks.VARIATION_BLOCK.get().getDefaultState().with(VariationBlock.VARIANT, VariationBlock.Variant.ACTIVE)); + testShears = new TestShearsItem(NAMESPACE.id("test_shears")); + pacifistSword = new PacifistSwordItem(NAMESPACE.id("pacifist_sword")); + dullPickaxe = new DullPickaxeItem(NAMESPACE.id("dull_pickaxe")); + fancyDoor = new TemplateDoorItem(NAMESPACE.id("fancy_wood_door"), Material.WOOD, Blocks.FANCY_WOOD_DOOR.get()); } diff --git a/src/test/resources/assets/sltest/stationapi/lang/en_US.lang b/src/test/resources/assets/sltest/stationapi/lang/en_US.lang index ad2425699..b65d5e090 100644 --- a/src/test/resources/assets/sltest/stationapi/lang/en_US.lang +++ b/src/test/resources/assets/sltest/stationapi/lang/en_US.lang @@ -1,13 +1,13 @@ item.@.testItem.name=Test Item -item.@.idkSomething.name=IDK Something +item.@.modelItem.name=IDK Something key.@.testBind=Diamonds! tile.@.testBlock.name=Test Block tile.@.testAnimatedBlock0.name=Test Animated Block tile.@.testAnimatedBlock1.name=Charged Animated Block item.@.testPickaxe.name=Test Pickaxe -tile.@.farlands_block.name=FarLands Block +tile.@.farlandsBlock.name=FarLands Block tile.@.indispensableBlock.name=Indispensable Block -item.@.nbt_item.name=NBT Item +item.@.nbtItem.name=NBT Item tile.@.freezer.name=Freezer tile.@.altar.name=Altar item.@.ironOre.name=Iron Chunk @@ -16,9 +16,9 @@ tile.@.variationBlock.name=Variation Block item.@.variationBlockIdle.name=Variation Block Idle item.@.variationBlockPassive.name=Variation Block Passive item.@.variationBlockActive.name=Variation Block Active -item.@.test_shears.name=Test Shears -item.@.pacifist_sword.name=Pacifist Sword -item.@.dull_pickaxe.name=Dull Pickaxe +item.@.testShears.name=Test Shears +item.@.pacifistSword.name=Pacifist Sword +item.@.dullPickaxe.name=Dull Pickaxe gui.stationapi.effect.@.test_effect.name=Test Effect gui.stationapi.effect.@.test_effect.desc=Just a simple test! gui.stationapi.effect.@.infinity_effect.name=§5Infinity diff --git a/station-api-base/src/main/java/net/modificationstation/stationapi/api/util/Util.java b/station-api-base/src/main/java/net/modificationstation/stationapi/api/util/Util.java index fd46df9be..f4fc55e93 100644 --- a/station-api-base/src/main/java/net/modificationstation/stationapi/api/util/Util.java +++ b/station-api-base/src/main/java/net/modificationstation/stationapi/api/util/Util.java @@ -102,6 +102,21 @@ public static void error(String message) { LOGGER.error(message); } + public static String toCamelCase(String snakeCase) { + if (snakeCase == null || snakeCase.isEmpty()) return snakeCase; + StringBuilder result = new StringBuilder(); + boolean nextUpper = false; + for (int i = 0; i < snakeCase.length(); i++) { + char c = snakeCase.charAt(i); + if (c == '_') nextUpper = true; + else if (nextUpper) { + result.append(Character.toUpperCase(c)); + nextUpper = false; + } else result.append(c); + } + return result.toString(); + } + public static T throwOrPause(T t) { if (FabricLoader.getInstance().isDevelopmentEnvironment()) { LOGGER.error("Trying to throw a fatal exception, pausing in IDE", t); diff --git a/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/block/BlockTemplate.java b/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/block/BlockTemplate.java index 7be012cd8..ad04371a8 100644 --- a/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/block/BlockTemplate.java +++ b/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/block/BlockTemplate.java @@ -4,6 +4,7 @@ import net.modificationstation.stationapi.api.registry.BlockRegistry; import net.modificationstation.stationapi.api.registry.Registry; import net.modificationstation.stationapi.api.util.Identifier; +import net.modificationstation.stationapi.api.util.Util; public interface BlockTemplate { static int getNextId() { @@ -12,5 +13,6 @@ static int getNextId() { static void onConstructor(Block block, Identifier id) { Registry.register(BlockRegistry.INSTANCE, block.id, id, block); + block.setTranslationKey(id.namespace, Util.toCamelCase(id.path)); } } diff --git a/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/item/ItemTemplate.java b/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/item/ItemTemplate.java index 201b15661..3eac5e9e1 100644 --- a/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/item/ItemTemplate.java +++ b/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/item/ItemTemplate.java @@ -4,6 +4,7 @@ import net.modificationstation.stationapi.api.registry.ItemRegistry; import net.modificationstation.stationapi.api.registry.Registry; import net.modificationstation.stationapi.api.util.Identifier; +import net.modificationstation.stationapi.api.util.Util; public interface ItemTemplate { static int getNextId() { @@ -12,5 +13,6 @@ static int getNextId() { static void onConstructor(Item item, Identifier id) { Registry.register(ItemRegistry.INSTANCE, item.id, id, item); + item.setTranslationKey(id.namespace, Util.toCamelCase(id.path)); } } From 18943c02bb5ccb7177dd0947c57672c0d5c73022 Mon Sep 17 00:00:00 2001 From: mine_diver Date: Tue, 14 Apr 2026 19:11:26 +0500 Subject: [PATCH 29/43] despair --- .../assets/sltest/stationapi/lang/en_US.lang | 36 +++++++++---------- .../stationapi/api/util/Util.java | 15 -------- .../api/template/block/BlockTemplate.java | 3 +- .../api/template/item/ItemTemplate.java | 3 +- 4 files changed, 20 insertions(+), 37 deletions(-) diff --git a/src/test/resources/assets/sltest/stationapi/lang/en_US.lang b/src/test/resources/assets/sltest/stationapi/lang/en_US.lang index b65d5e090..108699dfc 100644 --- a/src/test/resources/assets/sltest/stationapi/lang/en_US.lang +++ b/src/test/resources/assets/sltest/stationapi/lang/en_US.lang @@ -1,24 +1,24 @@ -item.@.testItem.name=Test Item -item.@.modelItem.name=IDK Something +item.@.test_item.name=Test Item +item.@.model_item.name=IDK Something key.@.testBind=Diamonds! -tile.@.testBlock.name=Test Block -tile.@.testAnimatedBlock0.name=Test Animated Block -tile.@.testAnimatedBlock1.name=Charged Animated Block -item.@.testPickaxe.name=Test Pickaxe -tile.@.farlandsBlock.name=FarLands Block -tile.@.indispensableBlock.name=Indispensable Block -item.@.nbtItem.name=NBT Item +tile.@.test_block.name=Test Block +tile.@.test_animated_block0.name=Test Animated Block +tile.@.test_animated_block1.name=Charged Animated Block +item.@.test_pickaxe.name=Test Pickaxe +tile.@.farlands_block.name=FarLands Block +tile.@.indispensable_block.name=Indispensable Block +item.@.nbt_item.name=NBT Item tile.@.freezer.name=Freezer tile.@.altar.name=Altar -item.@.ironOre.name=Iron Chunk -item.@.generatedItem.name=Generated Item -tile.@.variationBlock.name=Variation Block -item.@.variationBlockIdle.name=Variation Block Idle -item.@.variationBlockPassive.name=Variation Block Passive -item.@.variationBlockActive.name=Variation Block Active -item.@.testShears.name=Test Shears -item.@.pacifistSword.name=Pacifist Sword -item.@.dullPickaxe.name=Dull Pickaxe +item.@.iron_ore.name=Iron Chunk +item.@.generated_item.name=Generated Item +tile.@.variation_block.name=Variation Block +item.@.variation_block_idle.name=Variation Block Idle +item.@.variation_block_passive.name=Variation Block Passive +item.@.variation_block_active.name=Variation Block Active +item.@.test_shears.name=Test Shears +item.@.pacifist_sword.name=Pacifist Sword +item.@.dull_pickaxe.name=Dull Pickaxe gui.stationapi.effect.@.test_effect.name=Test Effect gui.stationapi.effect.@.test_effect.desc=Just a simple test! gui.stationapi.effect.@.infinity_effect.name=§5Infinity diff --git a/station-api-base/src/main/java/net/modificationstation/stationapi/api/util/Util.java b/station-api-base/src/main/java/net/modificationstation/stationapi/api/util/Util.java index f4fc55e93..fd46df9be 100644 --- a/station-api-base/src/main/java/net/modificationstation/stationapi/api/util/Util.java +++ b/station-api-base/src/main/java/net/modificationstation/stationapi/api/util/Util.java @@ -102,21 +102,6 @@ public static void error(String message) { LOGGER.error(message); } - public static String toCamelCase(String snakeCase) { - if (snakeCase == null || snakeCase.isEmpty()) return snakeCase; - StringBuilder result = new StringBuilder(); - boolean nextUpper = false; - for (int i = 0; i < snakeCase.length(); i++) { - char c = snakeCase.charAt(i); - if (c == '_') nextUpper = true; - else if (nextUpper) { - result.append(Character.toUpperCase(c)); - nextUpper = false; - } else result.append(c); - } - return result.toString(); - } - public static T throwOrPause(T t) { if (FabricLoader.getInstance().isDevelopmentEnvironment()) { LOGGER.error("Trying to throw a fatal exception, pausing in IDE", t); diff --git a/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/block/BlockTemplate.java b/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/block/BlockTemplate.java index ad04371a8..60db7759a 100644 --- a/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/block/BlockTemplate.java +++ b/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/block/BlockTemplate.java @@ -4,7 +4,6 @@ import net.modificationstation.stationapi.api.registry.BlockRegistry; import net.modificationstation.stationapi.api.registry.Registry; import net.modificationstation.stationapi.api.util.Identifier; -import net.modificationstation.stationapi.api.util.Util; public interface BlockTemplate { static int getNextId() { @@ -13,6 +12,6 @@ static int getNextId() { static void onConstructor(Block block, Identifier id) { Registry.register(BlockRegistry.INSTANCE, block.id, id, block); - block.setTranslationKey(id.namespace, Util.toCamelCase(id.path)); + block.setTranslationKey(id.namespace, id.path); } } diff --git a/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/item/ItemTemplate.java b/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/item/ItemTemplate.java index 3eac5e9e1..8d812e33c 100644 --- a/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/item/ItemTemplate.java +++ b/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/item/ItemTemplate.java @@ -4,7 +4,6 @@ import net.modificationstation.stationapi.api.registry.ItemRegistry; import net.modificationstation.stationapi.api.registry.Registry; import net.modificationstation.stationapi.api.util.Identifier; -import net.modificationstation.stationapi.api.util.Util; public interface ItemTemplate { static int getNextId() { @@ -13,6 +12,6 @@ static int getNextId() { static void onConstructor(Item item, Identifier id) { Registry.register(ItemRegistry.INSTANCE, item.id, id, item); - item.setTranslationKey(id.namespace, Util.toCamelCase(id.path)); + item.setTranslationKey(id.namespace, id.path); } } From 55148ce12f313b9fbae01229a3a11b470a978f57 Mon Sep 17 00:00:00 2001 From: calmilamsy Date: Tue, 14 Apr 2026 15:19:27 +0100 Subject: [PATCH 30/43] Oh yeah make ItemUsedInCraftingEvent not fire on null items --- .../mixin/recipe/CraftingResultMixin.java | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/station-recipes-v0/src/main/java/net/modificationstation/stationapi/mixin/recipe/CraftingResultMixin.java b/station-recipes-v0/src/main/java/net/modificationstation/stationapi/mixin/recipe/CraftingResultMixin.java index f83c3fa2a..01c0529cb 100644 --- a/station-recipes-v0/src/main/java/net/modificationstation/stationapi/mixin/recipe/CraftingResultMixin.java +++ b/station-recipes-v0/src/main/java/net/modificationstation/stationapi/mixin/recipe/CraftingResultMixin.java @@ -37,15 +37,17 @@ private void stationapi_onCrafted( ItemStack arg, CallbackInfo ci, @Local(index = 2) int var2, @Local(index = 3) ItemStack var3 ) { - StationAPI.EVENT_BUS.post( - ItemUsedInCraftingEvent.builder() - .player(player) - .craftingMatrix(input) - .itemOrdinal(var2) - .itemCrafted(arg) - .itemUsed(var3) - .build() - ); + if (var3 != null) { + StationAPI.EVENT_BUS.post( + ItemUsedInCraftingEvent.builder() + .player(player) + .craftingMatrix(input) + .itemOrdinal(var2) + .itemCrafted(arg) + .itemUsed(var3) + .build() + ); + } } @Inject( From 7bcdd73a9774e95eea01df4fa14a2087a21fc283 Mon Sep 17 00:00:00 2001 From: calmilamsy Date: Tue, 14 Apr 2026 16:24:43 +0100 Subject: [PATCH 31/43] Add CraftingResultEvent and add other crafting event javadocs --- .../event/container/slot/ItemCraftedEvent.java | 4 +++- .../slot/ItemUsedInCraftingEvent.java | 3 +++ .../api/event/recipe/CraftingResultEvent.java | 18 ++++++++++++++++++ .../recipe/CraftingRecipeManagerMixin.java | 14 ++++++++++++++ 4 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 station-recipes-v0/src/main/java/net/modificationstation/stationapi/api/event/recipe/CraftingResultEvent.java diff --git a/station-recipes-v0/src/main/java/net/modificationstation/stationapi/api/event/container/slot/ItemCraftedEvent.java b/station-recipes-v0/src/main/java/net/modificationstation/stationapi/api/event/container/slot/ItemCraftedEvent.java index 17a2c5c5c..5c0361c8d 100644 --- a/station-recipes-v0/src/main/java/net/modificationstation/stationapi/api/event/container/slot/ItemCraftedEvent.java +++ b/station-recipes-v0/src/main/java/net/modificationstation/stationapi/api/event/container/slot/ItemCraftedEvent.java @@ -2,11 +2,13 @@ import lombok.experimental.SuperBuilder; import net.mine_diver.unsafeevents.Event; -import net.mine_diver.unsafeevents.event.Cancelable; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.inventory.Inventory; import net.minecraft.item.ItemStack; +/** + * This is fired when an item is taken from the result slot. + */ @SuperBuilder public class ItemCraftedEvent extends Event { public final PlayerEntity player; diff --git a/station-recipes-v0/src/main/java/net/modificationstation/stationapi/api/event/container/slot/ItemUsedInCraftingEvent.java b/station-recipes-v0/src/main/java/net/modificationstation/stationapi/api/event/container/slot/ItemUsedInCraftingEvent.java index 98cad0316..09269abbd 100644 --- a/station-recipes-v0/src/main/java/net/modificationstation/stationapi/api/event/container/slot/ItemUsedInCraftingEvent.java +++ b/station-recipes-v0/src/main/java/net/modificationstation/stationapi/api/event/container/slot/ItemUsedInCraftingEvent.java @@ -6,6 +6,9 @@ import net.minecraft.inventory.Inventory; import net.minecraft.item.ItemStack; +/** + * This is fired for each ingredient when an item is taken from the result slot. + */ @SuperBuilder public class ItemUsedInCraftingEvent extends Event { public final PlayerEntity player; diff --git a/station-recipes-v0/src/main/java/net/modificationstation/stationapi/api/event/recipe/CraftingResultEvent.java b/station-recipes-v0/src/main/java/net/modificationstation/stationapi/api/event/recipe/CraftingResultEvent.java new file mode 100644 index 000000000..1e89173af --- /dev/null +++ b/station-recipes-v0/src/main/java/net/modificationstation/stationapi/api/event/recipe/CraftingResultEvent.java @@ -0,0 +1,18 @@ +package net.modificationstation.stationapi.api.event.recipe; + +import lombok.experimental.SuperBuilder; +import net.mine_diver.unsafeevents.Event; +import net.minecraft.inventory.Inventory; +import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.Nullable; + +/** + * This is fired when a crafting recipe result is created. + * You can set the itemCrafted field to whatever item stack should be used instead. + */ +@SuperBuilder +public class CraftingResultEvent extends Event { + public final Inventory grid; + @Nullable + public ItemStack itemCrafted; +} diff --git a/station-recipes-v0/src/main/java/net/modificationstation/stationapi/mixin/recipe/CraftingRecipeManagerMixin.java b/station-recipes-v0/src/main/java/net/modificationstation/stationapi/mixin/recipe/CraftingRecipeManagerMixin.java index 6d4842e0a..fcd17e5d8 100644 --- a/station-recipes-v0/src/main/java/net/modificationstation/stationapi/mixin/recipe/CraftingRecipeManagerMixin.java +++ b/station-recipes-v0/src/main/java/net/modificationstation/stationapi/mixin/recipe/CraftingRecipeManagerMixin.java @@ -1,7 +1,13 @@ package net.modificationstation.stationapi.mixin.recipe; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import net.minecraft.inventory.CraftingInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.recipe.CraftingRecipe; import net.minecraft.recipe.CraftingRecipeManager; import net.modificationstation.stationapi.api.StationAPI; +import net.modificationstation.stationapi.api.event.recipe.CraftingResultEvent; import net.modificationstation.stationapi.api.event.recipe.RecipeRegisterEvent; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -45,4 +51,12 @@ private void stationapi_postRecipeEvents(CallbackInfo ci) { StationAPI.EVENT_BUS.post(RecipeRegisterEvent.builder().recipeId(CRAFTING_SHAPED.type()).build()); StationAPI.EVENT_BUS.post(RecipeRegisterEvent.builder().recipeId(CRAFTING_SHAPELESS.type()).build()); } + + @WrapOperation(method = "craft", at = @At(value = "INVOKE", target = "Lnet/minecraft/recipe/CraftingRecipe;craft(Lnet/minecraft/inventory/CraftingInventory;)Lnet/minecraft/item/ItemStack;")) + private ItemStack stationapi_redirectOutputEvent(CraftingRecipe instance, CraftingInventory craftingInventory, Operation original) { + ItemStack output = original.call(instance, craftingInventory); + CraftingResultEvent event = CraftingResultEvent.builder().grid(craftingInventory).itemCrafted(output).build(); + StationAPI.EVENT_BUS.post(event); + return event.itemCrafted; + } } From dd8491934e2b7da51ae668ffedd94bc3a07c3429 Mon Sep 17 00:00:00 2001 From: calmilamsy Date: Wed, 15 Apr 2026 15:00:07 +0100 Subject: [PATCH 32/43] Extract itemstack comparison in recipes to an overridable method --- .../stationapi/impl/recipe/StationShapedRecipe.java | 6 +++++- .../stationapi/impl/recipe/StationShapelessRecipe.java | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/station-recipes-v0/src/main/java/net/modificationstation/stationapi/impl/recipe/StationShapedRecipe.java b/station-recipes-v0/src/main/java/net/modificationstation/stationapi/impl/recipe/StationShapedRecipe.java index d57e08eac..d5898c34b 100644 --- a/station-recipes-v0/src/main/java/net/modificationstation/stationapi/impl/recipe/StationShapedRecipe.java +++ b/station-recipes-v0/src/main/java/net/modificationstation/stationapi/impl/recipe/StationShapedRecipe.java @@ -53,7 +53,7 @@ private boolean matches(CraftingInventory grid, int startX, int startY, boolean ItemStack item = itemOpt.get(); boolean ignoreDamage = item.getDamage() == -1; if (ignoreDamage) item.setDamage(itemToTest.getDamage()); - boolean equals = item.isItemEqual(itemToTest); + boolean equals = areItemsEqual(item, itemToTest); if (ignoreDamage) item.setDamage(-1); if (!equals) return false; } @@ -63,6 +63,10 @@ private boolean matches(CraftingInventory grid, int startX, int startY, boolean return true; } + public boolean areItemsEqual(ItemStack stack, ItemStack other) { + return stack.isItemEqual(other); + } + @Override public ItemStack craft(CraftingInventory arg) { return output.copy(); diff --git a/station-recipes-v0/src/main/java/net/modificationstation/stationapi/impl/recipe/StationShapelessRecipe.java b/station-recipes-v0/src/main/java/net/modificationstation/stationapi/impl/recipe/StationShapelessRecipe.java index d981a7bca..106daea37 100644 --- a/station-recipes-v0/src/main/java/net/modificationstation/stationapi/impl/recipe/StationShapelessRecipe.java +++ b/station-recipes-v0/src/main/java/net/modificationstation/stationapi/impl/recipe/StationShapelessRecipe.java @@ -44,7 +44,7 @@ public boolean matches(CraftingInventory arg) { ItemStack item = itemOpt.get(); boolean ignoreDamage = item.getDamage() == -1; if (ignoreDamage) item.setDamage(itemToTest.getDamage()); - equals = item.isItemEqual(itemToTest); + equals = areItemsEqual(item, itemToTest); if (ignoreDamage) item.setDamage(-1); } } @@ -60,6 +60,10 @@ public boolean matches(CraftingInventory arg) { return matchedIngredients.nextClearBit(0) >= ingredients.length; } + public boolean areItemsEqual(ItemStack stack, ItemStack other) { + return stack.isItemEqual(other); + } + @Override public ItemStack craft(CraftingInventory arg) { return output.copy(); From d7d8d154813332d81f50d2b53561711fd41c8d74 Mon Sep 17 00:00:00 2001 From: calmilamsy Date: Sun, 19 Apr 2026 14:31:27 +0100 Subject: [PATCH 33/43] Allow for resolving other class' namespace --- .../modificationstation/stationapi/api/util/Namespace.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/station-api-base/src/main/java/net/modificationstation/stationapi/api/util/Namespace.java b/station-api-base/src/main/java/net/modificationstation/stationapi/api/util/Namespace.java index 4dfe2c566..39dcdce41 100644 --- a/station-api-base/src/main/java/net/modificationstation/stationapi/api/util/Namespace.java +++ b/station-api-base/src/main/java/net/modificationstation/stationapi/api/util/Namespace.java @@ -62,8 +62,13 @@ public final class Namespace implements Comparable<@NotNull Namespace> { @ApiStatus.Experimental public static @NotNull Namespace resolve() { + return resolve(StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE).getCallerClass()); + } + + @ApiStatus.Experimental + public static @NotNull Namespace resolve(Class target) { return CLASS_CACHE.computeIfAbsent( - StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE).getCallerClass(), + target, (Class caller) -> { final Path callerPath; try { From 6474ea569e3e1d917b1b570beb7d24125a68649d Mon Sep 17 00:00:00 2001 From: calmilamsy Date: Tue, 21 Apr 2026 16:12:40 +0100 Subject: [PATCH 34/43] Make old mods get fingerpointed at when the game crashes on load --- .../stationapi/api/mod/entrypoint/EntrypointManager.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/station-api-base/src/main/java/net/modificationstation/stationapi/api/mod/entrypoint/EntrypointManager.java b/station-api-base/src/main/java/net/modificationstation/stationapi/api/mod/entrypoint/EntrypointManager.java index 7be2debae..5d66e4edf 100644 --- a/station-api-base/src/main/java/net/modificationstation/stationapi/api/mod/entrypoint/EntrypointManager.java +++ b/station-api-base/src/main/java/net/modificationstation/stationapi/api/mod/entrypoint/EntrypointManager.java @@ -123,9 +123,13 @@ else if (o instanceof Method listener) val name = logger.value(); return name.isEmpty() ? namespace.getLogger() : namespace.getLogger(name); }); - } catch (IllegalAccessException | NoSuchFieldException e) { + } catch (NoSuchFieldException e) { throw new RuntimeException(e); } + catch (IllegalAccessException | UnsupportedOperationException e) { + Namespace badNamespace = Namespace.resolve(oCl); + throw new RuntimeException("You are likely running an extremely outdated mod. Likely culprit: " + badNamespace, e); + } } } } \ No newline at end of file From b70a463113f0e4e3a26d935aac22398b1a5b8c1e Mon Sep 17 00:00:00 2001 From: calmilamsy Date: Tue, 21 Apr 2026 16:44:38 +0100 Subject: [PATCH 35/43] Rename EntityRegister to EntityRegistryEvent --- .../net/modificationstation/sltest/entity/EntityListener.java | 4 ++-- .../entity/{EntityRegister.java => EntityRegistryEvent.java} | 2 +- .../stationapi/mixin/entity/EntityRegistryMixin.java | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) rename station-entities-v0/src/main/java/net/modificationstation/stationapi/api/event/entity/{EntityRegister.java => EntityRegistryEvent.java} (95%) diff --git a/src/test/java/net/modificationstation/sltest/entity/EntityListener.java b/src/test/java/net/modificationstation/sltest/entity/EntityListener.java index ba6e44c09..d0adf65ba 100644 --- a/src/test/java/net/modificationstation/sltest/entity/EntityListener.java +++ b/src/test/java/net/modificationstation/sltest/entity/EntityListener.java @@ -1,7 +1,7 @@ package net.modificationstation.sltest.entity; import net.mine_diver.unsafeevents.listener.EventListener; -import net.modificationstation.stationapi.api.event.entity.EntityRegister; +import net.modificationstation.stationapi.api.event.entity.EntityRegistryEvent; import net.modificationstation.stationapi.api.event.registry.EntityHandlerRegistryEvent; import net.modificationstation.stationapi.api.event.registry.MobHandlerRegistryEvent; @@ -11,7 +11,7 @@ public class EntityListener { @EventListener - public void registerEntities(EntityRegister event) { + public void registerEntities(EntityRegistryEvent event) { event.register(TestEntity.class, "sltest:test"); event.register(PoorGuy.class, "GPoor"); } diff --git a/station-entities-v0/src/main/java/net/modificationstation/stationapi/api/event/entity/EntityRegister.java b/station-entities-v0/src/main/java/net/modificationstation/stationapi/api/event/entity/EntityRegistryEvent.java similarity index 95% rename from station-entities-v0/src/main/java/net/modificationstation/stationapi/api/event/entity/EntityRegister.java rename to station-entities-v0/src/main/java/net/modificationstation/stationapi/api/event/entity/EntityRegistryEvent.java index 7e0a1e8fc..cf6605798 100644 --- a/station-entities-v0/src/main/java/net/modificationstation/stationapi/api/event/entity/EntityRegister.java +++ b/station-entities-v0/src/main/java/net/modificationstation/stationapi/api/event/entity/EntityRegistryEvent.java @@ -5,7 +5,7 @@ import net.minecraft.entity.Entity; @SuperBuilder -public class EntityRegister extends Event { +public class EntityRegistryEvent extends Event { @FunctionalInterface public interface RegisterFunction { void register(Class entityClass, String entityIdentifier, int entityId); diff --git a/station-entities-v0/src/main/java/net/modificationstation/stationapi/mixin/entity/EntityRegistryMixin.java b/station-entities-v0/src/main/java/net/modificationstation/stationapi/mixin/entity/EntityRegistryMixin.java index bdde51e1c..57b90d97c 100644 --- a/station-entities-v0/src/main/java/net/modificationstation/stationapi/mixin/entity/EntityRegistryMixin.java +++ b/station-entities-v0/src/main/java/net/modificationstation/stationapi/mixin/entity/EntityRegistryMixin.java @@ -3,7 +3,7 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.EntityRegistry; import net.modificationstation.stationapi.api.StationAPI; -import net.modificationstation.stationapi.api.event.entity.EntityRegister; +import net.modificationstation.stationapi.api.event.entity.EntityRegistryEvent; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -24,7 +24,7 @@ private static void register(Class arg, String string, int i) @Inject(method = "", at = @At("RETURN")) private static void stationapi_onEntityRegister(CallbackInfo ci) { StationAPI.EVENT_BUS.post( - EntityRegister.builder() + EntityRegistryEvent.builder() .register(EntityRegistryMixin::register) .registerNoID((aClass, s) -> { idToClass.put(s, aClass); From 4908d802c2133a9c52817caacf00461da4e9bb93 Mon Sep 17 00:00:00 2001 From: calmilamsy Date: Tue, 21 Apr 2026 17:01:24 +0100 Subject: [PATCH 36/43] Revert "Rename EntityRegister to EntityRegistryEvent" This reverts commit b70a463113f0e4e3a26d935aac22398b1a5b8c1e. --- .../net/modificationstation/sltest/entity/EntityListener.java | 4 ++-- .../entity/{EntityRegistryEvent.java => EntityRegister.java} | 2 +- .../stationapi/mixin/entity/EntityRegistryMixin.java | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) rename station-entities-v0/src/main/java/net/modificationstation/stationapi/api/event/entity/{EntityRegistryEvent.java => EntityRegister.java} (95%) diff --git a/src/test/java/net/modificationstation/sltest/entity/EntityListener.java b/src/test/java/net/modificationstation/sltest/entity/EntityListener.java index d0adf65ba..ba6e44c09 100644 --- a/src/test/java/net/modificationstation/sltest/entity/EntityListener.java +++ b/src/test/java/net/modificationstation/sltest/entity/EntityListener.java @@ -1,7 +1,7 @@ package net.modificationstation.sltest.entity; import net.mine_diver.unsafeevents.listener.EventListener; -import net.modificationstation.stationapi.api.event.entity.EntityRegistryEvent; +import net.modificationstation.stationapi.api.event.entity.EntityRegister; import net.modificationstation.stationapi.api.event.registry.EntityHandlerRegistryEvent; import net.modificationstation.stationapi.api.event.registry.MobHandlerRegistryEvent; @@ -11,7 +11,7 @@ public class EntityListener { @EventListener - public void registerEntities(EntityRegistryEvent event) { + public void registerEntities(EntityRegister event) { event.register(TestEntity.class, "sltest:test"); event.register(PoorGuy.class, "GPoor"); } diff --git a/station-entities-v0/src/main/java/net/modificationstation/stationapi/api/event/entity/EntityRegistryEvent.java b/station-entities-v0/src/main/java/net/modificationstation/stationapi/api/event/entity/EntityRegister.java similarity index 95% rename from station-entities-v0/src/main/java/net/modificationstation/stationapi/api/event/entity/EntityRegistryEvent.java rename to station-entities-v0/src/main/java/net/modificationstation/stationapi/api/event/entity/EntityRegister.java index cf6605798..7e0a1e8fc 100644 --- a/station-entities-v0/src/main/java/net/modificationstation/stationapi/api/event/entity/EntityRegistryEvent.java +++ b/station-entities-v0/src/main/java/net/modificationstation/stationapi/api/event/entity/EntityRegister.java @@ -5,7 +5,7 @@ import net.minecraft.entity.Entity; @SuperBuilder -public class EntityRegistryEvent extends Event { +public class EntityRegister extends Event { @FunctionalInterface public interface RegisterFunction { void register(Class entityClass, String entityIdentifier, int entityId); diff --git a/station-entities-v0/src/main/java/net/modificationstation/stationapi/mixin/entity/EntityRegistryMixin.java b/station-entities-v0/src/main/java/net/modificationstation/stationapi/mixin/entity/EntityRegistryMixin.java index 57b90d97c..bdde51e1c 100644 --- a/station-entities-v0/src/main/java/net/modificationstation/stationapi/mixin/entity/EntityRegistryMixin.java +++ b/station-entities-v0/src/main/java/net/modificationstation/stationapi/mixin/entity/EntityRegistryMixin.java @@ -3,7 +3,7 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.EntityRegistry; import net.modificationstation.stationapi.api.StationAPI; -import net.modificationstation.stationapi.api.event.entity.EntityRegistryEvent; +import net.modificationstation.stationapi.api.event.entity.EntityRegister; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -24,7 +24,7 @@ private static void register(Class arg, String string, int i) @Inject(method = "", at = @At("RETURN")) private static void stationapi_onEntityRegister(CallbackInfo ci) { StationAPI.EVENT_BUS.post( - EntityRegistryEvent.builder() + EntityRegister.builder() .register(EntityRegistryMixin::register) .registerNoID((aClass, s) -> { idToClass.put(s, aClass); From 49324166a9dcfe592c394c0b3db08f8cace9a9c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Fild=C3=A1n?= Date: Tue, 21 Apr 2026 18:01:36 +0200 Subject: [PATCH 37/43] Make events more consistent and add missing register methods (#256) --- .../sltest/entity/EntityListener.java | 8 +- .../sltest/keyboard/KeyboardListener.java | 13 +++- .../sltest/option/OptionListener.java | 11 +-- .../sltest/packet/MineLMomentPacket.java | 78 +++++++++++++++++++ .../sltest/packet/PacketListener.java | 18 +++++ .../sltest/tileentity/TileEntityListener.java | 2 +- .../assets/sltest/stationapi/lang/en_US.lang | 1 + src/test/resources/fabric.mod.json | 3 +- .../BlockEntityRendererRegisterEvent.java | 4 + .../entity/BlockEntityRegisterEvent.java | 8 +- ...Register.java => EntityRegisterEvent.java} | 11 ++- .../mixin/entity/EntityRegistryMixin.java | 4 +- .../event/option/KeyBindingRegisterEvent.java | 4 + .../network/packet/PacketRegisterEvent.java | 22 +++++- .../stationapi/mixin/network/PacketMixin.java | 2 - 15 files changed, 163 insertions(+), 26 deletions(-) create mode 100644 src/test/java/net/modificationstation/sltest/packet/MineLMomentPacket.java create mode 100644 src/test/java/net/modificationstation/sltest/packet/PacketListener.java rename station-entities-v0/src/main/java/net/modificationstation/stationapi/api/event/entity/{EntityRegister.java => EntityRegisterEvent.java} (60%) diff --git a/src/test/java/net/modificationstation/sltest/entity/EntityListener.java b/src/test/java/net/modificationstation/sltest/entity/EntityListener.java index ba6e44c09..cb28cc41d 100644 --- a/src/test/java/net/modificationstation/sltest/entity/EntityListener.java +++ b/src/test/java/net/modificationstation/sltest/entity/EntityListener.java @@ -1,7 +1,7 @@ package net.modificationstation.sltest.entity; import net.mine_diver.unsafeevents.listener.EventListener; -import net.modificationstation.stationapi.api.event.entity.EntityRegister; +import net.modificationstation.stationapi.api.event.entity.EntityRegisterEvent; import net.modificationstation.stationapi.api.event.registry.EntityHandlerRegistryEvent; import net.modificationstation.stationapi.api.event.registry.MobHandlerRegistryEvent; @@ -11,9 +11,9 @@ public class EntityListener { @EventListener - public void registerEntities(EntityRegister event) { - event.register(TestEntity.class, "sltest:test"); - event.register(PoorGuy.class, "GPoor"); + public void registerEntities(EntityRegisterEvent event) { + event.register("sltest:test", TestEntity.class); + event.register("GPoor", PoorGuy.class); } @EventListener diff --git a/src/test/java/net/modificationstation/sltest/keyboard/KeyboardListener.java b/src/test/java/net/modificationstation/sltest/keyboard/KeyboardListener.java index c5872886d..2fdb13d2b 100644 --- a/src/test/java/net/modificationstation/sltest/keyboard/KeyboardListener.java +++ b/src/test/java/net/modificationstation/sltest/keyboard/KeyboardListener.java @@ -3,6 +3,7 @@ import net.mine_diver.unsafeevents.listener.EventListener; import net.modificationstation.sltest.SLTest; import net.modificationstation.sltest.option.OptionListener; +import net.modificationstation.sltest.packet.MineLMomentPacket; import net.modificationstation.stationapi.api.client.event.keyboard.KeyStateChangedEvent; import net.modificationstation.stationapi.api.network.packet.MessagePacket; import net.modificationstation.stationapi.api.network.packet.PacketHelper; @@ -10,10 +11,16 @@ import org.lwjgl.input.Keyboard; public class KeyboardListener { - @EventListener public static void keyStateChange(KeyStateChangedEvent event) { - if (event.environment == KeyStateChangedEvent.Environment.IN_GAME && Keyboard.getEventKey() == OptionListener.testBind.code) - PacketHelper.send(new MessagePacket(Identifier.of(SLTest.NAMESPACE, "give_me_diamonds"))); + if (event.environment == KeyStateChangedEvent.Environment.IN_GAME) { + if (Keyboard.getEventKey() == OptionListener.testBind.code) { + PacketHelper.send(new MessagePacket(Identifier.of(SLTest.NAMESPACE, "give_me_diamonds"))); + } + + if (Keyboard.getEventKey() == OptionListener.mineLMoment.code) { + PacketHelper.send(new MineLMomentPacket(0)); + } + } } } diff --git a/src/test/java/net/modificationstation/sltest/option/OptionListener.java b/src/test/java/net/modificationstation/sltest/option/OptionListener.java index e18043f69..efc67b516 100644 --- a/src/test/java/net/modificationstation/sltest/option/OptionListener.java +++ b/src/test/java/net/modificationstation/sltest/option/OptionListener.java @@ -5,15 +5,16 @@ import net.mine_diver.unsafeevents.listener.EventListener; import net.minecraft.client.option.KeyBinding; import net.modificationstation.stationapi.api.client.event.option.KeyBindingRegisterEvent; +import org.lwjgl.input.Keyboard; public class OptionListener { - + public static KeyBinding testBind; + public static KeyBinding mineLMoment; + @Environment(EnvType.CLIENT) @EventListener public void registerKeyBindings(KeyBindingRegisterEvent event) { - testBind = new KeyBinding("key.sltest.testBind", 21); - event.keyBindings.add(testBind); + event.register(testBind = new KeyBinding("key.sltest.testBind", 21)); + event.register(mineLMoment = new KeyBinding("key.sltest.mine_l_moment", Keyboard.KEY_L)); } - - public static KeyBinding testBind; } diff --git a/src/test/java/net/modificationstation/sltest/packet/MineLMomentPacket.java b/src/test/java/net/modificationstation/sltest/packet/MineLMomentPacket.java new file mode 100644 index 000000000..e5db8acbb --- /dev/null +++ b/src/test/java/net/modificationstation/sltest/packet/MineLMomentPacket.java @@ -0,0 +1,78 @@ +package net.modificationstation.sltest.packet; + +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.network.NetworkHandler; +import net.minecraft.network.packet.Packet; +import net.minecraft.world.World; +import net.modificationstation.stationapi.api.entity.player.PlayerHelper; +import net.modificationstation.stationapi.api.network.packet.ManagedPacket; +import net.modificationstation.stationapi.api.network.packet.PacketHelper; +import net.modificationstation.stationapi.api.network.packet.PacketType; +import net.modificationstation.stationapi.api.util.SideUtil; +import org.jetbrains.annotations.NotNull; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class MineLMomentPacket extends Packet implements ManagedPacket { + public static final PacketType TYPE = PacketType.builder(true, true, MineLMomentPacket::new).build(); + + int mineLMoments; + + public MineLMomentPacket(int mineLMoments) { + this.mineLMoments = mineLMoments; + } + + public MineLMomentPacket() { + } + + @Override + public void read(DataInputStream stream) { + try { + mineLMoments = stream.readInt(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + @Override + public void write(DataOutputStream stream) { + try { + stream.writeInt(mineLMoments); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + @Override + public void apply(NetworkHandler networkHandler) { + SideUtil.run(() -> handleClient(networkHandler), () -> handleServer(networkHandler)); + } + + @Environment(EnvType.CLIENT) + public void handleClient(NetworkHandler networkHandler) { + PlayerEntity player = PlayerHelper.getPlayerFromPacketHandler(networkHandler); + player.sendMessage(mineLMoments + " Mine L Moments have occurred near you"); + } + + @Environment(EnvType.SERVER) + public void handleServer(NetworkHandler networkHandler) { + PlayerEntity player = PlayerHelper.getPlayerFromPacketHandler(networkHandler); + World world = player.world; + + PacketHelper.sendToAllTracking(player, new MineLMomentPacket((int) world.getTime())); + } + + @Override + public int size() { + return 4; + } + + @Override + public @NotNull PacketType getType() { + return TYPE; + } +} diff --git a/src/test/java/net/modificationstation/sltest/packet/PacketListener.java b/src/test/java/net/modificationstation/sltest/packet/PacketListener.java new file mode 100644 index 000000000..188fdb4c9 --- /dev/null +++ b/src/test/java/net/modificationstation/sltest/packet/PacketListener.java @@ -0,0 +1,18 @@ +package net.modificationstation.sltest.packet; + +import net.mine_diver.unsafeevents.listener.EventListener; +import net.modificationstation.stationapi.api.event.network.packet.PacketRegisterEvent; +import net.modificationstation.stationapi.api.mod.entrypoint.Entrypoint; +import net.modificationstation.stationapi.api.util.Namespace; + +@SuppressWarnings("unused") +public class PacketListener { + @Entrypoint.Namespace + public static Namespace NAMESPACE; + + @EventListener + public void registerPackets(PacketRegisterEvent event) { + event.register(NAMESPACE.id("mine_l_moment"), MineLMomentPacket.TYPE); + } + +} diff --git a/src/test/java/net/modificationstation/sltest/tileentity/TileEntityListener.java b/src/test/java/net/modificationstation/sltest/tileentity/TileEntityListener.java index 14d656eab..fc03db703 100644 --- a/src/test/java/net/modificationstation/sltest/tileentity/TileEntityListener.java +++ b/src/test/java/net/modificationstation/sltest/tileentity/TileEntityListener.java @@ -9,6 +9,6 @@ public class TileEntityListener { @EventListener public void registerTileEntities(BlockEntityRegisterEvent event) { SLTest.LOGGER.info("reeee tile entiites"); - event.register(TileEntityFreezer.class, "sltest:freezer"); + event.register("sltest:freezer", TileEntityFreezer.class); } } diff --git a/src/test/resources/assets/sltest/stationapi/lang/en_US.lang b/src/test/resources/assets/sltest/stationapi/lang/en_US.lang index 108699dfc..4aa08c373 100644 --- a/src/test/resources/assets/sltest/stationapi/lang/en_US.lang +++ b/src/test/resources/assets/sltest/stationapi/lang/en_US.lang @@ -1,6 +1,7 @@ item.@.test_item.name=Test Item item.@.model_item.name=IDK Something key.@.testBind=Diamonds! +key.@.mine_l_moment=Mine L Moment tile.@.test_block.name=Test Block tile.@.test_animated_block0.name=Test Animated Block tile.@.test_animated_block1.name=Charged Animated Block diff --git a/src/test/resources/fabric.mod.json b/src/test/resources/fabric.mod.json index 43cbe9c22..f77d035c0 100644 --- a/src/test/resources/fabric.mod.json +++ b/src/test/resources/fabric.mod.json @@ -33,7 +33,8 @@ "net.modificationstation.sltest.worldgen.TestWorldgenListener", "net.modificationstation.sltest.bonemeal.BonemealListener", "net.modificationstation.sltest.dispenser.DispenserListener", - "net.modificationstation.sltest.effect.TestEffectListener" + "net.modificationstation.sltest.effect.TestEffectListener", + "net.modificationstation.sltest.packet.PacketListener" ], "stationapi:event_bus_client": [ "net.modificationstation.sltest.gui.GuiListener", diff --git a/station-blockentities-v0/src/main/java/net/modificationstation/stationapi/api/client/event/block/entity/BlockEntityRendererRegisterEvent.java b/station-blockentities-v0/src/main/java/net/modificationstation/stationapi/api/client/event/block/entity/BlockEntityRendererRegisterEvent.java index 06e2515c8..3eb84b90e 100644 --- a/station-blockentities-v0/src/main/java/net/modificationstation/stationapi/api/client/event/block/entity/BlockEntityRendererRegisterEvent.java +++ b/station-blockentities-v0/src/main/java/net/modificationstation/stationapi/api/client/event/block/entity/BlockEntityRendererRegisterEvent.java @@ -9,4 +9,8 @@ @SuperBuilder public class BlockEntityRendererRegisterEvent extends Event { public final Map, BlockEntityRenderer> renderers; + + public final void register(Class blockEntityClass, BlockEntityRenderer renderer) { + renderers.put(blockEntityClass, renderer); + } } diff --git a/station-blockentities-v0/src/main/java/net/modificationstation/stationapi/api/event/block/entity/BlockEntityRegisterEvent.java b/station-blockentities-v0/src/main/java/net/modificationstation/stationapi/api/event/block/entity/BlockEntityRegisterEvent.java index c974bdfe4..8a9e91937 100644 --- a/station-blockentities-v0/src/main/java/net/modificationstation/stationapi/api/event/block/entity/BlockEntityRegisterEvent.java +++ b/station-blockentities-v0/src/main/java/net/modificationstation/stationapi/api/event/block/entity/BlockEntityRegisterEvent.java @@ -3,13 +3,19 @@ import lombok.experimental.SuperBuilder; import net.mine_diver.unsafeevents.Event; import net.minecraft.block.entity.BlockEntity; +import net.modificationstation.stationapi.api.util.Identifier; + import java.util.function.BiConsumer; @SuperBuilder public class BlockEntityRegisterEvent extends Event { public final BiConsumer, String> register; - public final void register(Class blockEntityClass, String id) { + public final void register(String id, Class blockEntityClass) { register.accept(blockEntityClass, id); } + + public final void register(Identifier id, Class blockEntityClass) { + register.accept(blockEntityClass, id.toString()); + } } diff --git a/station-entities-v0/src/main/java/net/modificationstation/stationapi/api/event/entity/EntityRegister.java b/station-entities-v0/src/main/java/net/modificationstation/stationapi/api/event/entity/EntityRegisterEvent.java similarity index 60% rename from station-entities-v0/src/main/java/net/modificationstation/stationapi/api/event/entity/EntityRegister.java rename to station-entities-v0/src/main/java/net/modificationstation/stationapi/api/event/entity/EntityRegisterEvent.java index 7e0a1e8fc..356680ac4 100644 --- a/station-entities-v0/src/main/java/net/modificationstation/stationapi/api/event/entity/EntityRegister.java +++ b/station-entities-v0/src/main/java/net/modificationstation/stationapi/api/event/entity/EntityRegisterEvent.java @@ -3,9 +3,10 @@ import lombok.experimental.SuperBuilder; import net.mine_diver.unsafeevents.Event; import net.minecraft.entity.Entity; +import net.modificationstation.stationapi.api.util.Identifier; @SuperBuilder -public class EntityRegister extends Event { +public class EntityRegisterEvent extends Event { @FunctionalInterface public interface RegisterFunction { void register(Class entityClass, String entityIdentifier, int entityId); @@ -19,11 +20,15 @@ public interface RegisterFunctionNoId { public final RegisterFunction register; public final RegisterFunctionNoId registerNoID; - public final void register(Class entityClass, String entityIdentifier, int entityId) { + public final void register(String entityIdentifier, int entityId, Class entityClass) { register.register(entityClass, entityIdentifier, entityId); } - public final void register(Class entityClass, String entityIdentifier) { + public final void register(String entityIdentifier, Class entityClass) { registerNoID.register(entityClass, entityIdentifier); } + + public final void register(Identifier entityIdentifier, Class entityClass) { + registerNoID.register(entityClass, entityIdentifier.toString()); + } } diff --git a/station-entities-v0/src/main/java/net/modificationstation/stationapi/mixin/entity/EntityRegistryMixin.java b/station-entities-v0/src/main/java/net/modificationstation/stationapi/mixin/entity/EntityRegistryMixin.java index bdde51e1c..1a4aa3950 100644 --- a/station-entities-v0/src/main/java/net/modificationstation/stationapi/mixin/entity/EntityRegistryMixin.java +++ b/station-entities-v0/src/main/java/net/modificationstation/stationapi/mixin/entity/EntityRegistryMixin.java @@ -3,7 +3,7 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.EntityRegistry; import net.modificationstation.stationapi.api.StationAPI; -import net.modificationstation.stationapi.api.event.entity.EntityRegister; +import net.modificationstation.stationapi.api.event.entity.EntityRegisterEvent; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -24,7 +24,7 @@ private static void register(Class arg, String string, int i) @Inject(method = "", at = @At("RETURN")) private static void stationapi_onEntityRegister(CallbackInfo ci) { StationAPI.EVENT_BUS.post( - EntityRegister.builder() + EntityRegisterEvent.builder() .register(EntityRegistryMixin::register) .registerNoID((aClass, s) -> { idToClass.put(s, aClass); diff --git a/station-keybindings-v0/src/main/java/net/modificationstation/stationapi/api/client/event/option/KeyBindingRegisterEvent.java b/station-keybindings-v0/src/main/java/net/modificationstation/stationapi/api/client/event/option/KeyBindingRegisterEvent.java index f3ca8dfe1..23a220b9c 100644 --- a/station-keybindings-v0/src/main/java/net/modificationstation/stationapi/api/client/event/option/KeyBindingRegisterEvent.java +++ b/station-keybindings-v0/src/main/java/net/modificationstation/stationapi/api/client/event/option/KeyBindingRegisterEvent.java @@ -20,4 +20,8 @@ @SuperBuilder public class KeyBindingRegisterEvent extends Event { public final List keyBindings; + + public final void register(KeyBinding keyBinding) { + keyBindings.add(keyBinding); + } } diff --git a/station-networking-v0/src/main/java/net/modificationstation/stationapi/api/event/network/packet/PacketRegisterEvent.java b/station-networking-v0/src/main/java/net/modificationstation/stationapi/api/event/network/packet/PacketRegisterEvent.java index 788da6903..cbb98597e 100644 --- a/station-networking-v0/src/main/java/net/modificationstation/stationapi/api/event/network/packet/PacketRegisterEvent.java +++ b/station-networking-v0/src/main/java/net/modificationstation/stationapi/api/event/network/packet/PacketRegisterEvent.java @@ -6,6 +6,10 @@ import net.minecraft.network.packet.Packet; import net.modificationstation.stationapi.api.StationAPI; import net.modificationstation.stationapi.api.network.packet.MessagePacket; +import net.modificationstation.stationapi.api.network.packet.PacketType; +import net.modificationstation.stationapi.api.registry.PacketTypeRegistry; +import net.modificationstation.stationapi.api.registry.Registry; +import net.modificationstation.stationapi.api.util.Identifier; /** * Event that fires after vanilla packets are registered. @@ -33,15 +37,25 @@ public class PacketRegisterEvent extends Event implements PacketRegister { * *

Uses {@link PacketRegisterEvent#register} field to process the registration. * - * @param packetId the packet ID that you want to use for the packet. - * The ID is written as a byte, meaning it can be any number in the 0-255 (inclusive) range, - * except for already taken packet IDs. + * @param packetId the packet ID that you want to use for the packet. + * The ID is written as a byte, meaning it can be any number in the 0-255 (inclusive) range, + * except for already taken packet IDs. * @param receivableOnClient whether this packet is supposed to be received on the client side. * @param receivableOnServer whether this packet is supposed to be received on the server side. - * @param packetClass the packet's class that extends {@link Packet} or a sub class of it. + * @param packetClass the packet's class that extends {@link Packet} or a sub class of it. */ @Override public final void register(int packetId, boolean receivableOnClient, boolean receivableOnServer, Class packetClass) { register.register(packetId, receivableOnClient, receivableOnServer, packetClass); } + + /** + * Registers the given {@link PacketType} + * + * @param id The identifier of the packet + * @param packetType The packet type of the packet + */ + public final void register(Identifier id, PacketType packetType) { + Registry.register(PacketTypeRegistry.INSTANCE, id, packetType); + } } diff --git a/station-networking-v0/src/main/java/net/modificationstation/stationapi/mixin/network/PacketMixin.java b/station-networking-v0/src/main/java/net/modificationstation/stationapi/mixin/network/PacketMixin.java index bd9840c1a..9b62ba6af 100644 --- a/station-networking-v0/src/main/java/net/modificationstation/stationapi/mixin/network/PacketMixin.java +++ b/station-networking-v0/src/main/java/net/modificationstation/stationapi/mixin/network/PacketMixin.java @@ -7,12 +7,10 @@ import net.modificationstation.stationapi.api.event.network.packet.PacketRegisterEvent; import net.modificationstation.stationapi.api.network.packet.ManagedPacket; import net.modificationstation.stationapi.api.registry.PacketTypeRegistry; -import net.modificationstation.stationapi.api.util.Null; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; From 5cea7b81fbde371e1782eacd3c417520c4644add Mon Sep 17 00:00:00 2001 From: calmilamsy Date: Tue, 21 Apr 2026 17:28:19 +0100 Subject: [PATCH 38/43] Throw an exception if no valid entity/mob handler was found --- .../network/EntityClientNetworkHandler.java | 110 +++++++++--------- 1 file changed, 58 insertions(+), 52 deletions(-) diff --git a/station-entities-v0/src/main/java/net/modificationstation/stationapi/impl/client/network/EntityClientNetworkHandler.java b/station-entities-v0/src/main/java/net/modificationstation/stationapi/impl/client/network/EntityClientNetworkHandler.java index 98e7d6080..7a68c8ef7 100644 --- a/station-entities-v0/src/main/java/net/modificationstation/stationapi/impl/client/network/EntityClientNetworkHandler.java +++ b/station-entities-v0/src/main/java/net/modificationstation/stationapi/impl/client/network/EntityClientNetworkHandler.java @@ -52,64 +52,70 @@ private static void registerMessageListeners(MessageListenerRegistryEvent event) private static void handleEntitySpawn(PlayerEntity player, MessagePacket message) { EntityWorldAndPosFactory entityHandler = EntityHandlerRegistry.INSTANCE.get(of(message.strings[0])); - if (entityHandler != null) { - double - x = message.ints[1] / 32D, - y = message.ints[2] / 32D, - z = message.ints[3] / 32D; - //noinspection deprecation - ClientNetworkHandlerAccessor networkHandler = (ClientNetworkHandlerAccessor) ((Minecraft) FabricLoader.getInstance().getGameInstance()).getNetworkHandler(); - ClientWorld world = networkHandler.getWorld(); - Entity entity = entityHandler.create(world, x, y, z); - if (entity != null) { - entity.trackedPosX = message.ints[1]; - entity.trackedPosY = message.ints[2]; - entity.trackedPosZ = message.ints[3]; - entity.yaw = 0.0F; - entity.pitch = 0.0F; - entity.id = message.ints[0]; - world.forceEntity(message.ints[0], entity); - if (message.ints[4] > 0) { - if (entity instanceof HasOwner hasOwner) - hasOwner.setOwner(networkHandler.invokeGetEntity(message.ints[4])); - entity.setVelocityClient((double) message.shorts[0] / 8000.0D, (double) message.shorts[1] / 8000.0D, (double) message.shorts[2] / 8000.0D); - } - if (message.bytes != null) - entity.getDataTracker().writeUpdatedEntries(DataTracker.readEntries(new DataInputStream(new ByteArrayInputStream(message.bytes)))); - if (entity instanceof StationSpawnDataProvider provider) - provider.readFromMessage(message); + + if (entityHandler == null) { + throw new RuntimeException("Got entity handler id " + message.strings[0] + ", but found no registered entity handler!"); + } + + double + x = message.ints[1] / 32D, + y = message.ints[2] / 32D, + z = message.ints[3] / 32D; + //noinspection deprecation + ClientNetworkHandlerAccessor networkHandler = (ClientNetworkHandlerAccessor) ((Minecraft) FabricLoader.getInstance().getGameInstance()).getNetworkHandler(); + ClientWorld world = networkHandler.getWorld(); + Entity entity = entityHandler.create(world, x, y, z); + if (entity != null) { + entity.trackedPosX = message.ints[1]; + entity.trackedPosY = message.ints[2]; + entity.trackedPosZ = message.ints[3]; + entity.yaw = 0.0F; + entity.pitch = 0.0F; + entity.id = message.ints[0]; + world.forceEntity(message.ints[0], entity); + if (message.ints[4] > 0) { + if (entity instanceof HasOwner hasOwner) + hasOwner.setOwner(networkHandler.invokeGetEntity(message.ints[4])); + entity.setVelocityClient((double) message.shorts[0] / 8000.0D, (double) message.shorts[1] / 8000.0D, (double) message.shorts[2] / 8000.0D); } + if (message.bytes != null) + entity.getDataTracker().writeUpdatedEntries(DataTracker.readEntries(new DataInputStream(new ByteArrayInputStream(message.bytes)))); + if (entity instanceof StationSpawnDataProvider provider) + provider.readFromMessage(message); } } private static void handleMobSpawn(PlayerEntity player, MessagePacket message) { Function mobHandler = MobHandlerRegistry.INSTANCE.get(of(message.strings[0])); - if (mobHandler != null) { - double - x = message.ints[1] / 32D, - y = message.ints[2] / 32D, - z = message.ints[3] / 32D; - float yaw = (float)(message.bytes[0] * 360) / 256.0F; - float pitch = (float)(message.bytes[1] * 360) / 256.0F; - //noinspection deprecation - ClientNetworkHandlerAccessor networkHandler = (ClientNetworkHandlerAccessor) ((Minecraft) FabricLoader.getInstance().getGameInstance()).getNetworkHandler(); - ClientWorld world = networkHandler.getWorld(); - LivingEntity mob = mobHandler.apply(world); - if (mob != null) { - mob.trackedPosX = message.ints[1]; - mob.trackedPosY = message.ints[2]; - mob.trackedPosZ = message.ints[3]; - mob.id = message.ints[0]; - mob.setPositionAndAngles(x, y, z, yaw, pitch); - mob.interpolateOnly = true; - world.forceEntity(message.ints[0], mob); - //noinspection unchecked - List data = DataTracker.readEntries(new DataInputStream(new ByteArrayInputStream(Arrays.copyOfRange(message.bytes, 2, message.bytes.length)))); - if (data != null) - mob.getDataTracker().writeUpdatedEntries(data); - if (mob instanceof StationSpawnDataProvider provider) - provider.readFromMessage(message); - } + + if (mobHandler == null) { + throw new RuntimeException("Got mob handler id " + message.strings[0] + ", but found no registered entity handler!"); + } + + double + x = message.ints[1] / 32D, + y = message.ints[2] / 32D, + z = message.ints[3] / 32D; + float yaw = (float)(message.bytes[0] * 360) / 256.0F; + float pitch = (float)(message.bytes[1] * 360) / 256.0F; + //noinspection deprecation + ClientNetworkHandlerAccessor networkHandler = (ClientNetworkHandlerAccessor) ((Minecraft) FabricLoader.getInstance().getGameInstance()).getNetworkHandler(); + ClientWorld world = networkHandler.getWorld(); + LivingEntity mob = mobHandler.apply(world); + if (mob != null) { + mob.trackedPosX = message.ints[1]; + mob.trackedPosY = message.ints[2]; + mob.trackedPosZ = message.ints[3]; + mob.id = message.ints[0]; + mob.setPositionAndAngles(x, y, z, yaw, pitch); + mob.interpolateOnly = true; + world.forceEntity(message.ints[0], mob); + //noinspection unchecked + List data = DataTracker.readEntries(new DataInputStream(new ByteArrayInputStream(Arrays.copyOfRange(message.bytes, 2, message.bytes.length)))); + if (data != null) + mob.getDataTracker().writeUpdatedEntries(data); + if (mob instanceof StationSpawnDataProvider provider) + provider.readFromMessage(message); } } } From 7de78b349af3e21f4e75038894580b6428535ea9 Mon Sep 17 00:00:00 2001 From: calmilamsy Date: Tue, 21 Apr 2026 17:40:35 +0100 Subject: [PATCH 39/43] Make EntityRegisterEvent get mad if duplicate entities, remove non-identifier registry If you for some reason *need* int registration, first, consider your modding choices, and second, realise that this code is used exactly nowhere outside of vanilla. --- .../api/event/entity/EntityRegisterEvent.java | 18 ++---------------- .../mixin/entity/EntityRegistryMixin.java | 14 ++++++++------ 2 files changed, 10 insertions(+), 22 deletions(-) diff --git a/station-entities-v0/src/main/java/net/modificationstation/stationapi/api/event/entity/EntityRegisterEvent.java b/station-entities-v0/src/main/java/net/modificationstation/stationapi/api/event/entity/EntityRegisterEvent.java index 356680ac4..aec1963ea 100644 --- a/station-entities-v0/src/main/java/net/modificationstation/stationapi/api/event/entity/EntityRegisterEvent.java +++ b/station-entities-v0/src/main/java/net/modificationstation/stationapi/api/event/entity/EntityRegisterEvent.java @@ -9,26 +9,12 @@ public class EntityRegisterEvent extends Event { @FunctionalInterface public interface RegisterFunction { - void register(Class entityClass, String entityIdentifier, int entityId); - } - - @FunctionalInterface - public interface RegisterFunctionNoId { - void register(Class entityClass, String entityIdentifier); + void register(Class entityClass, Identifier entityIdentifier); } public final RegisterFunction register; - public final RegisterFunctionNoId registerNoID; - public final void register(String entityIdentifier, int entityId, Class entityClass) { - register.register(entityClass, entityIdentifier, entityId); - } - - public final void register(String entityIdentifier, Class entityClass) { - registerNoID.register(entityClass, entityIdentifier); - } - public final void register(Identifier entityIdentifier, Class entityClass) { - registerNoID.register(entityClass, entityIdentifier.toString()); + register.register(entityClass, entityIdentifier); } } diff --git a/station-entities-v0/src/main/java/net/modificationstation/stationapi/mixin/entity/EntityRegistryMixin.java b/station-entities-v0/src/main/java/net/modificationstation/stationapi/mixin/entity/EntityRegistryMixin.java index 1a4aa3950..9c252414f 100644 --- a/station-entities-v0/src/main/java/net/modificationstation/stationapi/mixin/entity/EntityRegistryMixin.java +++ b/station-entities-v0/src/main/java/net/modificationstation/stationapi/mixin/entity/EntityRegistryMixin.java @@ -4,6 +4,7 @@ import net.minecraft.entity.EntityRegistry; import net.modificationstation.stationapi.api.StationAPI; import net.modificationstation.stationapi.api.event.entity.EntityRegisterEvent; +import net.modificationstation.stationapi.api.util.Identifier; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -14,8 +15,6 @@ @Mixin(EntityRegistry.class) class EntityRegistryMixin { - @Shadow - private static void register(Class arg, String string, int i) { } @Shadow private static Map> idToClass; @@ -25,10 +24,13 @@ private static void register(Class arg, String string, int i) private static void stationapi_onEntityRegister(CallbackInfo ci) { StationAPI.EVENT_BUS.post( EntityRegisterEvent.builder() - .register(EntityRegistryMixin::register) - .registerNoID((aClass, s) -> { - idToClass.put(s, aClass); - classToId.put(aClass, s); + .register((entityClass, entityIdentifier) -> { + if (idToClass.containsKey(entityIdentifier.toString())) { + throw new RuntimeException("Duplicate entity identifier " + entityIdentifier); + } + + classToId.put(entityClass, entityIdentifier.toString()); + idToClass.put(entityIdentifier.toString(), entityClass); }) .build() ); From 35b42808033b5028f1fd52e50fc8f5b9d40c319f Mon Sep 17 00:00:00 2001 From: Drew Edwards Date: Tue, 28 Apr 2026 16:09:35 +0100 Subject: [PATCH 40/43] chore: update DFU to v9 (#257) * chore: update DFU to v9 * Optimize imports --------- Co-authored-by: mine_diver --- build.gradle.kts | 8 ++++++ gradle.properties | 2 +- .../stationapi/api/state/State.java | 2 +- .../impl/world/FlattenedWorldManager.java | 4 +-- .../api/registry/RegistryLoader.java | 2 +- .../stationapi/api/tag/TagGroupLoader.java | 5 +--- .../api/util/dynamic/EntryLoader.java | 2 +- .../api/client/texture/atlas/AtlasLoader.java | 2 +- .../texture/atlas/AtlasSourceManager.java | 3 ++- .../client/texture/atlas/AtlasSourceType.java | 4 +-- .../texture/atlas/DirectoryAtlasSource.java | 3 ++- .../texture/atlas/FilterAtlasSource.java | 4 +-- .../PalettedPermutationsAtlasSource.java | 5 ++-- .../texture/atlas/SingleAtlasSource.java | 6 ++--- .../texture/atlas/UnstitchAtlasSource.java | 5 ++-- .../metadata/ResourceMetadataSerializer.java | 4 +-- .../impl/resource/DefaultResourcePack.java | 25 +++++++++++++------ .../impl/resource/DirectoryResourcePack.java | 21 +++++++++++----- .../resource/NamespaceResourceManager.java | 2 +- .../datafixer/VanillaDataFixerImpl.java | 7 ++---- 20 files changed, 70 insertions(+), 46 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 35fe4b1d0..9934ec963 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -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 { diff --git a/gradle.properties b/gradle.properties index 84d71c3c4..5eb303d5b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -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 diff --git a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/api/state/State.java b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/api/state/State.java index 6479dcf79..bccd458fa 100644 --- a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/api/state/State.java +++ b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/api/state/State.java @@ -146,7 +146,7 @@ public ImmutableMap, Comparable> getEntries() { protected static > Codec createCodec(Codec codec, Function 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"); }); } } diff --git a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/impl/world/FlattenedWorldManager.java b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/impl/world/FlattenedWorldManager.java index b75bc9f83..308a9d91c 100644 --- a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/impl/world/FlattenedWorldManager.java +++ b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/impl/world/FlattenedWorldManager.java @@ -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()); @@ -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 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 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)); diff --git a/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/RegistryLoader.java b/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/RegistryLoader.java index d27352546..efe720f82 100644 --- a/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/RegistryLoader.java +++ b/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/RegistryLoader.java @@ -91,7 +91,7 @@ static void load(RegistryOps.RegistryInfoGetter registryInfoGetter, Resource try (BufferedReader reader = resource.getReader()) { JsonElement jsonElement = JsonParser.parseReader(reader); DataResult 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)); diff --git a/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/tag/TagGroupLoader.java b/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/tag/TagGroupLoader.java index a6181c66a..a7bf131c5 100644 --- a/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/tag/TagGroupLoader.java +++ b/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/tag/TagGroupLoader.java @@ -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; @@ -55,9 +54,7 @@ public Map> loadTags(ResourceManager manager) { JsonElement jsonElement = JsonParser.parseReader(reader); List list = map.computeIfAbsent(identifier2, identifierx -> new ArrayList<>()); DataResult 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(); diff --git a/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/util/dynamic/EntryLoader.java b/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/util/dynamic/EntryLoader.java index e086851ae..5c8243876 100644 --- a/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/util/dynamic/EntryLoader.java +++ b/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/util/dynamic/EntryLoader.java @@ -130,7 +130,7 @@ final class Impl implements EntryLoader { public void add(DynamicRegistryManager registryManager, RegistryKey key, Encoder encoder, int rawId, E entry, Lifecycle lifecycle) { DataResult dataResult = encoder.encodeStart(RegistryOps.of(JsonOps.INSTANCE, registryManager), entry); - Optional> optional = dataResult.error(); + Optional> optional = dataResult.error(); if (optional.isPresent()) { LOGGER.error("Error adding element: {}", optional.get().message()); } else { diff --git a/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/texture/atlas/AtlasLoader.java b/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/texture/atlas/AtlasLoader.java index 95829cc17..bc48b7193 100644 --- a/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/texture/atlas/AtlasLoader.java +++ b/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/texture/atlas/AtlasLoader.java @@ -64,7 +64,7 @@ public static AtlasLoader of(ResourceManager resourceManager, Identifier id) { ArrayList 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); } diff --git a/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/texture/atlas/AtlasSourceManager.java b/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/texture/atlas/AtlasSourceManager.java index 0558991b8..a9a9749cc 100644 --- a/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/texture/atlas/AtlasSourceManager.java +++ b/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/texture/atlas/AtlasSourceManager.java @@ -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; @@ -25,7 +26,7 @@ public class AtlasSourceManager { public static Codec TYPE_CODEC = CODEC.dispatch(AtlasSource::getType, AtlasSourceType::codec); public static Codec> LIST_CODEC = TYPE_CODEC.listOf().fieldOf("sources").codec(); - private static AtlasSourceType register(String id, Codec codec) { + private static AtlasSourceType register(String id, MapCodec codec) { Identifier identifier = Identifier.of(id); AtlasSourceType atlasSourceType = new AtlasSourceType(codec); AtlasSourceType atlasSourceType2 = SOURCE_TYPE_BY_ID.putIfAbsent(identifier, atlasSourceType); diff --git a/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/texture/atlas/AtlasSourceType.java b/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/texture/atlas/AtlasSourceType.java index f98ab3c13..1cf14133a 100644 --- a/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/texture/atlas/AtlasSourceType.java +++ b/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/texture/atlas/AtlasSourceType.java @@ -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 codec) {} +public record AtlasSourceType(MapCodec codec) {} diff --git a/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/texture/atlas/DirectoryAtlasSource.java b/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/texture/atlas/DirectoryAtlasSource.java index 461c5d27a..9866d44ac 100644 --- a/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/texture/atlas/DirectoryAtlasSource.java +++ b/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/texture/atlas/DirectoryAtlasSource.java @@ -1,6 +1,7 @@ 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; @@ -8,7 +9,7 @@ import static net.modificationstation.stationapi.api.StationAPI.NAMESPACE; public class DirectoryAtlasSource implements AtlasSource { - public static final Codec 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 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; diff --git a/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/texture/atlas/FilterAtlasSource.java b/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/texture/atlas/FilterAtlasSource.java index 71f9772b7..3f8a12a18 100644 --- a/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/texture/atlas/FilterAtlasSource.java +++ b/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/texture/atlas/FilterAtlasSource.java @@ -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 CODEC = RecordCodecBuilder.create(instance -> instance.group(BlockEntry.CODEC.fieldOf("pattern").forGetter(filterAtlasSource -> filterAtlasSource.pattern)).apply(instance, FilterAtlasSource::new)); + public static final MapCodec 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) { diff --git a/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/texture/atlas/PalettedPermutationsAtlasSource.java b/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/texture/atlas/PalettedPermutationsAtlasSource.java index 1dcee8a7f..eee4b2e1a 100644 --- a/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/texture/atlas/PalettedPermutationsAtlasSource.java +++ b/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/texture/atlas/PalettedPermutationsAtlasSource.java @@ -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; @@ -26,7 +27,7 @@ import static net.modificationstation.stationapi.impl.client.texture.StationRenderImpl.LOGGER; public class PalettedPermutationsAtlasSource implements AtlasSource { - public static final Codec 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 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 textures; private final Map permutations; private final Identifier paletteKey; diff --git a/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/texture/atlas/SingleAtlasSource.java b/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/texture/atlas/SingleAtlasSource.java index 324929356..774bcfccb 100644 --- a/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/texture/atlas/SingleAtlasSource.java +++ b/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/texture/atlas/SingleAtlasSource.java @@ -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 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 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 sprite; diff --git a/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/texture/atlas/UnstitchAtlasSource.java b/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/texture/atlas/UnstitchAtlasSource.java index 988690e61..093350402 100644 --- a/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/texture/atlas/UnstitchAtlasSource.java +++ b/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/texture/atlas/UnstitchAtlasSource.java @@ -1,6 +1,7 @@ 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; @@ -8,9 +9,9 @@ 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; @@ -19,7 +20,7 @@ import static net.modificationstation.stationapi.impl.client.texture.StationRenderImpl.LOGGER; public class UnstitchAtlasSource implements AtlasSource { - public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( + public static final MapCodec 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), diff --git a/station-resource-loader-v0/src/main/java/net/modificationstation/stationapi/api/resource/metadata/ResourceMetadataSerializer.java b/station-resource-loader-v0/src/main/java/net/modificationstation/stationapi/api/resource/metadata/ResourceMetadataSerializer.java index daab0252d..6d6c98da9 100644 --- a/station-resource-loader-v0/src/main/java/net/modificationstation/stationapi/api/resource/metadata/ResourceMetadataSerializer.java +++ b/station-resource-loader-v0/src/main/java/net/modificationstation/stationapi/api/resource/metadata/ResourceMetadataSerializer.java @@ -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(); } }; } diff --git a/station-resource-loader-v0/src/main/java/net/modificationstation/stationapi/impl/resource/DefaultResourcePack.java b/station-resource-loader-v0/src/main/java/net/modificationstation/stationapi/impl/resource/DefaultResourcePack.java index 8f16be553..260dd1ec9 100644 --- a/station-resource-loader-v0/src/main/java/net/modificationstation/stationapi/impl/resource/DefaultResourcePack.java +++ b/station-resource-loader-v0/src/main/java/net/modificationstation/stationapi/impl/resource/DefaultResourcePack.java @@ -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; @@ -51,24 +52,30 @@ public class DefaultResourcePack implements ResourcePack { @Override public @Nullable InputSupplier 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 paths; if (namespace == Namespace.MINECRAFT && atRoot) { paths = ROOT_PATHS; @@ -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 prefixSegments, boolean atRoot) { diff --git a/station-resource-loader-v0/src/main/java/net/modificationstation/stationapi/impl/resource/DirectoryResourcePack.java b/station-resource-loader-v0/src/main/java/net/modificationstation/stationapi/impl/resource/DirectoryResourcePack.java index f63e28126..7c0a54c2d 100644 --- a/station-resource-loader-v0/src/main/java/net/modificationstation/stationapi/impl/resource/DirectoryResourcePack.java +++ b/station-resource-loader-v0/src/main/java/net/modificationstation/stationapi/impl/resource/DirectoryResourcePack.java @@ -2,6 +2,7 @@ import com.google.common.base.Joiner; import com.google.common.collect.Sets; +import com.mojang.serialization.DataResult; import net.modificationstation.stationapi.api.util.Identifier; import net.modificationstation.stationapi.api.util.Namespace; import net.modificationstation.stationapi.api.resource.InputSupplier; @@ -56,13 +57,16 @@ public InputSupplier open(ResourceType type, Identifier id) { } public static InputSupplier open(Identifier id, Path path) { - return PathUtil.split(id.path).get().map(segments -> { + var result = PathUtil.split(id.path); + + if (result.isSuccess()) { + var segments = result.getOrThrow(); Path path2 = PathUtil.getPath(path, segments); return DirectoryResourcePack.open(path2); - }, result -> { - LOGGER.error("Invalid path {}: {}", id, result.message()); + } else { + LOGGER.error("Invalid path {}: {}", id, result.error().map(DataResult.Error::message)); return null; - }); + } } @Nullable @@ -75,10 +79,15 @@ private static InputSupplier open(Path path) { @Override public void findResources(ResourceType type, Namespace namespace, String prefix, ResourcePack.ResultConsumer consumer) { - PathUtil.split(prefix).get().ifLeft(prefixSegments -> { + var result = PathUtil.split(prefix); + + if (result.isSuccess()) { + var prefixSegments = result.getOrThrow(); Path path = this.root.resolve(type.getDirectory()).resolve(namespace.toString()); DirectoryResourcePack.findResources(namespace, path, prefixSegments, consumer); - }).ifRight(result -> LOGGER.error("Invalid path {}: {}", prefix, result.message())); + } else { + LOGGER.error("Invalid path {}: {}", prefix, result.error().map(DataResult.Error::message)); + } } public static void findResources(Namespace namespace, Path path, List prefixSegments, ResourcePack.ResultConsumer consumer) { diff --git a/station-resource-loader-v0/src/main/java/net/modificationstation/stationapi/impl/resource/NamespaceResourceManager.java b/station-resource-loader-v0/src/main/java/net/modificationstation/stationapi/impl/resource/NamespaceResourceManager.java index 3549efda7..cdfea3f93 100644 --- a/station-resource-loader-v0/src/main/java/net/modificationstation/stationapi/impl/resource/NamespaceResourceManager.java +++ b/station-resource-loader-v0/src/main/java/net/modificationstation/stationapi/impl/resource/NamespaceResourceManager.java @@ -52,7 +52,7 @@ public Set getAllNamespaces() { private Function> createOpener(Identifier id) { if (id.namespace == Namespace.MINECRAFT && id.path.startsWith("/")) { - final String[] segments = PathUtil.split(id.path.substring(1)).getOrThrow(false, LOGGER::error).toArray(String[]::new); + final String[] segments = PathUtil.split(id.path.substring(1)).getOrThrow().toArray(String[]::new); return pack -> pack.openRoot(segments.clone()); } else return pack -> pack.open(type, id); } diff --git a/station-vanilla-fix-v0/src/main/java/net/modificationstation/stationapi/impl/vanillafix/datafixer/VanillaDataFixerImpl.java b/station-vanilla-fix-v0/src/main/java/net/modificationstation/stationapi/impl/vanillafix/datafixer/VanillaDataFixerImpl.java index 647482e83..099e8e807 100644 --- a/station-vanilla-fix-v0/src/main/java/net/modificationstation/stationapi/impl/vanillafix/datafixer/VanillaDataFixerImpl.java +++ b/station-vanilla-fix-v0/src/main/java/net/modificationstation/stationapi/impl/vanillafix/datafixer/VanillaDataFixerImpl.java @@ -7,12 +7,10 @@ import net.mine_diver.unsafeevents.listener.EventListener; import net.modificationstation.stationapi.api.StationAPI; import net.modificationstation.stationapi.api.datafixer.DataFixers; -import net.modificationstation.stationapi.api.datafixer.TypeReferences; import net.modificationstation.stationapi.api.event.datafixer.DataFixerRegisterEvent; import net.modificationstation.stationapi.api.mod.entrypoint.Entrypoint; import net.modificationstation.stationapi.api.mod.entrypoint.EntrypointManager; import net.modificationstation.stationapi.api.mod.entrypoint.EventBusPolicy; -import net.modificationstation.stationapi.api.util.Util; import net.modificationstation.stationapi.api.vanillafix.datadamager.damage.StationFlatteningToMcRegionChunkDamage; import net.modificationstation.stationapi.api.vanillafix.datadamager.damage.StationFlatteningToMcRegionItemStackDamage; import net.modificationstation.stationapi.api.vanillafix.datadamager.schema.McRegionChunkDamagerSchema; @@ -25,7 +23,6 @@ import net.modificationstation.stationapi.api.vanillafix.datafixer.schema.StationFlatteningItemStackSchema; import java.lang.invoke.MethodHandles; -import java.util.Set; import java.util.function.Supplier; import static net.modificationstation.stationapi.api.StationAPI.NAMESPACE; @@ -48,7 +45,7 @@ public final class VanillaDataFixerImpl { builder.addFixer(new StationFlatteningToMcRegionChunkDamage(schema69420, "StationFlatteningToMcRegionChunkDamage")); Schema schema19132 = builder.addSchema(VANILLA_VERSION, McRegionItemStackDamagerSchema::new); builder.addFixer(new StationFlatteningToMcRegionItemStackDamage(schema19132, "StationFlatteningToMcRegionItemStackDamage")); - return builder.buildOptimized(Set.of(TypeReferences.LEVEL), Util.getBootstrapExecutor()); + return builder.build().fixer(); }); @EventListener @@ -60,7 +57,7 @@ private static void registerFixer(DataFixerRegisterEvent event) { builder.addFixer(new McRegionToStationFlatteningItemStackFix(schema69420, "McRegionToStationFlatteningItemStackFix")); Schema schema69421 = builder.addSchema(69421, StationFlatteningChunkSchema::new); builder.addFixer(new McRegionToStationFlatteningChunkFix(schema69421, "McRegionToStationFlatteningChunkFix")); - return builder.buildOptimized(Set.of(TypeReferences.LEVEL), executor); + return builder.build().fixer(); }, CURRENT_VERSION); } } From 6c6ca3dd9f14b8a7d3dcc17d80e603daa8aaf480 Mon Sep 17 00:00:00 2001 From: mine_diver Date: Thu, 7 May 2026 04:25:30 +0500 Subject: [PATCH 41/43] can't believe it, an actual cal L moment --- .../net/modificationstation/sltest/entity/EntityListener.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/net/modificationstation/sltest/entity/EntityListener.java b/src/test/java/net/modificationstation/sltest/entity/EntityListener.java index cb28cc41d..b31922d27 100644 --- a/src/test/java/net/modificationstation/sltest/entity/EntityListener.java +++ b/src/test/java/net/modificationstation/sltest/entity/EntityListener.java @@ -12,8 +12,8 @@ public class EntityListener { @EventListener public void registerEntities(EntityRegisterEvent event) { - event.register("sltest:test", TestEntity.class); - event.register("GPoor", PoorGuy.class); + event.register(NAMESPACE.id("test"), TestEntity.class); + event.register(NAMESPACE.id("gpoor"), PoorGuy.class); } @EventListener From e62f0b61fe2ca8810f4919868991adc9d063a716 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Fild=C3=A1n?= Date: Mon, 18 May 2026 15:16:24 +0200 Subject: [PATCH 42/43] Convention Tags (#254) * Temporary workspace update * Fix wooden and stone pressure plate id swap * Tags * Finish tags * Tagify vanilla recipes * Okay more tags * Revert "Temporary workspace update" This reverts commit a80ee354855b2a893230a15d4f98df9b40aaf6b2. --------- Co-authored-by: mineLdiver Co-authored-by: mineLdiver --- .../stationapi/api/registry/tag/ItemTags.java | 31 ++++++++++-- .../vanillafix/block/VanillaBlockFixImpl.java | 4 +- .../recipe/VanillaFuelItemFixImpl.java | 2 +- .../recipe/VanillaTagRecipeFixImpl.java | 23 +++++++++ .../c/stationapi/tags/blocks/bookshelves.json | 5 ++ .../stationapi/tags/blocks/brick_blocks.json | 8 ++++ .../tags/blocks/brick_blocks/normal.json | 5 ++ .../c/stationapi/tags/blocks/buttons.json | 8 ++++ .../stationapi/tags/blocks/buttons/stone.json | 5 ++ .../data/c/stationapi/tags/blocks/cacti.json | 5 ++ .../data/c/stationapi/tags/blocks/chests.json | 8 ++++ .../stationapi/tags/blocks/chests/wooden.json | 5 ++ .../c/stationapi/tags/blocks/clay_blocks.json | 5 ++ .../stationapi/tags/blocks/cobblestones.json | 12 +++++ .../tags/blocks/cobblestones/mossy.json | 5 ++ .../tags/blocks/cobblestones/normal.json | 5 ++ .../data/c/stationapi/tags/blocks/dirts.json | 5 ++ .../data/c/stationapi/tags/blocks/doors.json | 12 +++++ .../c/stationapi/tags/blocks/doors/iron.json | 5 ++ .../stationapi/tags/blocks/doors/wooden.json | 8 ++++ .../tags/blocks/doors/wooden/oak.json | 5 ++ .../c/stationapi/tags/blocks/fence_gates.json | 8 ++++ .../tags/blocks/fence_gates/wooden.json} | 1 - .../data/c/stationapi/tags/blocks/fences.json | 8 ++++ .../stationapi/tags/blocks/fences/wooden.json | 8 ++++ .../tags/blocks/fences/wooden/oak.json | 5 ++ .../c/stationapi/tags/blocks/flowers.json | 12 +++++ .../tags/blocks/flowers/normal.json | 6 +++ .../stationapi/tags/blocks/flowers/tall.json} | 1 - .../stationapi/tags/blocks/glass_blocks.json | 8 ++++ .../tags/blocks/glass_blocks/colorless.json | 5 ++ .../stationapi/tags/blocks/grass_blocks.json | 5 ++ .../c/stationapi/tags/blocks/gravels.json | 5 ++ .../c/stationapi/tags/blocks/ladders.json | 8 ++++ .../tags/blocks/ladders/wooden.json | 8 ++++ .../tags/blocks/ladders/wooden/oak.json | 5 ++ .../data/c/stationapi/tags/blocks/leaves.json | 5 ++ .../stationapi/tags/blocks/logs.json} | 2 +- .../c/stationapi/tags/blocks/mushrooms.json | 12 +++++ .../tags/blocks/mushrooms/brown.json | 5 ++ .../stationapi/tags/blocks/mushrooms/red.json | 5 ++ .../c/stationapi/tags/blocks/netherracks.json | 5 ++ .../c/stationapi/tags/blocks/obsidians.json | 8 ++++ .../tags/blocks/obsidians/normal.json | 5 ++ .../blocks/ore_bearing_ground/netherrack.json | 5 ++ .../tags/blocks/ore_bearing_ground/stone.json | 5 ++ .../data/c/stationapi/tags/blocks/ores.json | 28 +++++++++++ .../c/stationapi/tags/blocks/ores/coal.json | 5 ++ .../stationapi/tags/blocks/ores/diamond.json | 5 ++ .../c/stationapi/tags/blocks/ores/gold.json | 5 ++ .../c/stationapi/tags/blocks/ores/iron.json | 5 ++ .../c/stationapi/tags/blocks/ores/lapis.json | 5 ++ .../stationapi/tags/blocks/ores/redstone.json | 6 +++ .../data/c/stationapi/tags/blocks/planks.json | 8 ++++ .../c/stationapi/tags/blocks/planks/oak.json | 5 ++ .../tags/blocks/pressure_plates.json | 12 +++++ .../tags/blocks/pressure_plates/stone.json | 5 ++ .../tags/blocks/pressure_plates/wooden.json | 8 ++++ .../blocks/pressure_plates/wooden/oak.json | 5 ++ .../c/stationapi/tags/blocks/pumpkins.json | 6 +++ .../tags/blocks/pumpkins/jack_o_lanterns.json | 5 ++ .../tags/blocks/pumpkins/normal.json | 5 ++ .../data/c/stationapi/tags/blocks/sands.json | 8 ++++ .../stationapi/tags/blocks/sands/normal.json | 5 ++ .../tags/blocks/sandstone/blocks.json | 8 ++++ .../tags/blocks/sandstone/normal_blocks.json | 5 ++ .../c/stationapi/tags/blocks/saplings.json | 5 ++ .../data/c/stationapi/tags/blocks/signs.json | 8 ++++ .../stationapi/tags/blocks/signs/wooden.json | 8 ++++ .../tags/blocks/signs/wooden/oak.json | 12 +++++ .../blocks/signs/wooden/oak/standing.json | 5 ++ .../tags/blocks/signs/wooden/oak/wall.json | 5 ++ .../data/c/stationapi/tags/blocks/snow.json | 6 +++ .../data/c/stationapi/tags/blocks/stairs.json | 12 +++++ .../tags/blocks/stairs/cobblestone.json | 5 ++ .../stationapi/tags/blocks/stairs/wooden.json | 8 ++++ .../tags/blocks/stairs/wooden/oak.json | 5 ++ .../data/c/stationapi/tags/blocks/stones.json | 5 ++ .../tags/blocks/storage_blocks.json | 8 ++++ .../tags/blocks/storage_blocks/diamond.json | 5 ++ .../tags/blocks/storage_blocks/gold.json | 5 ++ .../tags/blocks/storage_blocks/iron.json | 5 ++ .../tags/blocks/storage_blocks/lapis.json | 5 ++ .../c/stationapi/tags/blocks/trapdoors.json | 8 ++++ .../tags/blocks/trapdoors/wooden.json | 8 ++++ .../tags/blocks/trapdoors/wooden/oak.json | 5 ++ .../data/c/stationapi/tags/blocks/wools.json | 5 ++ .../data/c/stationapi/tags/items/armors.json | 20 ++++++++ .../c/stationapi/tags/items/armors/boots.json | 24 ++++++++++ .../tags/items/armors/boots/chainmail.json | 5 ++ .../tags/items/armors/boots/diamond.json | 5 ++ .../tags/items/armors/boots/gold.json | 5 ++ .../tags/items/armors/boots/iron.json | 5 ++ .../tags/items/armors/boots/leather.json | 5 ++ .../tags/items/armors/chestplates.json | 24 ++++++++++ .../items/armors/chestplates/chainmail.json | 5 ++ .../items/armors/chestplates/diamond.json | 5 ++ .../tags/items/armors/chestplates/gold.json | 5 ++ .../tags/items/armors/chestplates/iron.json | 5 ++ .../items/armors/chestplates/leather.json | 5 ++ .../stationapi/tags/items/armors/helmets.json | 24 ++++++++++ .../tags/items/armors/helmets/chainmail.json | 5 ++ .../tags/items/armors/helmets/diamond.json | 5 ++ .../tags/items/armors/helmets/gold.json | 5 ++ .../tags/items/armors/helmets/iron.json | 5 ++ .../tags/items/armors/helmets/leather.json | 5 ++ .../tags/items/armors/leggings.json | 24 ++++++++++ .../tags/items/armors/leggings/chainmail.json | 5 ++ .../tags/items/armors/leggings/diamond.json | 5 ++ .../tags/items/armors/leggings/gold.json | 5 ++ .../tags/items/armors/leggings/iron.json | 5 ++ .../tags/items/armors/leggings/leather.json | 5 ++ .../data/c/stationapi/tags/items/bones.json | 5 ++ .../c/stationapi/tags/items/bookshelves.json | 5 ++ .../c/stationapi/tags/items/brick_blocks.json | 8 ++++ .../tags/items/brick_blocks/normal.json | 5 ++ .../data/c/stationapi/tags/items/bricks.json | 8 ++++ .../stationapi/tags/items/bricks/normal.json | 5 ++ .../data/c/stationapi/tags/items/buckets.json | 20 ++++++++ .../stationapi/tags/items/buckets/empty.json | 5 ++ .../c/stationapi/tags/items/buckets/lava.json | 5 ++ .../c/stationapi/tags/items/buckets/milk.json | 5 ++ .../stationapi/tags/items/buckets/water.json | 5 ++ .../data/c/stationapi/tags/items/buttons.json | 8 ++++ .../stationapi/tags/items/buttons/stone.json | 5 ++ .../data/c/stationapi/tags/items/cacti.json | 5 ++ .../data/c/stationapi/tags/items/chests.json | 8 ++++ .../stationapi/tags/items/chests/wooden.json | 5 ++ .../c/stationapi/tags/items/clay_blocks.json | 5 ++ .../data/c/stationapi/tags/items/coals.json | 5 ++ .../c/stationapi/tags/items/cobblestones.json | 12 +++++ .../tags/items/cobblestones/mossy.json | 5 ++ .../tags/items/cobblestones/normal.json | 5 ++ .../data/c/stationapi/tags/items/crops.json | 20 ++++++++ .../c/stationapi/tags/items/crops/cactus.json | 5 ++ .../stationapi/tags/items/crops/pumpkin.json | 5 ++ .../tags/items/crops/sugar_cane.json | 5 ++ .../c/stationapi/tags/items/crops/wheat.json | 5 ++ .../data/c/stationapi/tags/items/dirts.json | 5 ++ .../data/c/stationapi/tags/items/doors.json | 12 +++++ .../c/stationapi/tags/items/doors/iron.json | 5 ++ .../c/stationapi/tags/items/doors/wooden.json | 8 ++++ .../tags/items/doors/wooden/oak.json | 5 ++ .../data/c/stationapi/tags/items/dusts.json | 12 +++++ .../tags/items/dusts/glowstone.json | 5 ++ .../stationapi/tags/items/dusts/redstone.json | 5 ++ .../stationapi/tags/items/dyes.json} | 2 +- .../data/c/stationapi/tags/items/eggs.json | 8 ++++ .../c/stationapi/tags/items/eggs/chicken.json | 5 ++ .../c/stationapi/tags/items/feathers.json | 8 ++++ .../tags/items/feathers/chicken.json | 5 ++ .../c/stationapi/tags/items/fence_gates.json | 8 ++++ .../tags/items/fence_gates/wooden.json} | 1 - .../data/c/stationapi/tags/items/fences.json | 8 ++++ .../stationapi/tags/items/fences/wooden.json | 8 ++++ .../tags/items/fences/wooden/oak.json | 5 ++ .../data/c/stationapi/tags/items/flowers.json | 12 +++++ .../stationapi/tags/items/flowers/normal.json | 6 +++ .../stationapi/tags/items/flowers/tall.json} | 1 - .../data/c/stationapi/tags/items/foods.json | 48 +++++++++++++++++++ .../c/stationapi/tags/items/foods/bread.json | 5 ++ .../tags/items/foods/cooked_fish.json | 5 ++ .../tags/items/foods/cooked_meat.json | 5 ++ .../c/stationapi/tags/items/foods/cookie.json | 5 ++ .../tags/items/foods/edible_when_placed.json | 5 ++ .../c/stationapi/tags/items/foods/fruit.json | 6 +++ .../c/stationapi/tags/items/foods/golden.json | 5 ++ .../stationapi/tags/items/foods/raw_fish.json | 5 ++ .../stationapi/tags/items/foods/raw_meat.json | 5 ++ .../c/stationapi/tags/items/foods/soup.json | 5 ++ .../tags/items/foods/vegetable.json | 4 ++ .../data/c/stationapi/tags/items/gems.json | 8 ++++ .../c/stationapi/tags/items/gems/diamond.json | 5 ++ .../c/stationapi/tags/items/glass_blocks.json | 8 ++++ .../tags/items/glass_blocks/colorless.json | 5 ++ .../c/stationapi/tags/items/grass_blocks.json | 5 ++ .../data/c/stationapi/tags/items/gravels.json | 5 ++ .../c/stationapi/tags/items/gunpowders.json | 5 ++ .../data/c/stationapi/tags/items/ingots.json | 12 +++++ .../c/stationapi/tags/items/ingots/gold.json | 5 ++ .../c/stationapi/tags/items/ingots/iron.json | 5 ++ .../data/c/stationapi/tags/items/ladders.json | 8 ++++ .../stationapi/tags/items/ladders/wooden.json | 8 ++++ .../tags/items/ladders/wooden/oak.json | 5 ++ .../c/stationapi/tags/items/leathers.json | 8 ++++ .../c/stationapi/tags/items/leathers/cow.json | 5 ++ .../data/c/stationapi/tags/items/leaves.json | 5 ++ .../data/c/stationapi/tags/items/logs.json | 5 ++ .../c/stationapi/tags/items/mushrooms.json | 12 +++++ .../tags/items/mushrooms/brown.json | 5 ++ .../stationapi/tags/items/mushrooms/red.json | 5 ++ .../c/stationapi/tags/items/netherracks.json | 5 ++ .../c/stationapi/tags/items/obsidians.json | 8 ++++ .../tags/items/obsidians/normal.json | 5 ++ .../items/ore_bearing_ground/netherrack.json | 5 ++ .../tags/items/ore_bearing_ground/stone.json | 5 ++ .../data/c/stationapi/tags/items/ores.json | 28 +++++++++++ .../c/stationapi/tags/items/ores/coal.json | 5 ++ .../c/stationapi/tags/items/ores/diamond.json | 5 ++ .../c/stationapi/tags/items/ores/gold.json | 5 ++ .../c/stationapi/tags/items/ores/iron.json | 5 ++ .../c/stationapi/tags/items/ores/lapis.json | 5 ++ .../stationapi/tags/items/ores/redstone.json | 6 +++ .../data/c/stationapi/tags/items/planks.json | 8 ++++ .../c/stationapi/tags/items/planks/oak.json | 5 ++ .../tags/items/pressure_plates.json | 12 +++++ .../tags/items/pressure_plates/stone.json | 5 ++ .../tags/items/pressure_plates/wooden.json | 8 ++++ .../items/pressure_plates/wooden/oak.json | 5 ++ .../c/stationapi/tags/items/pumpkins.json | 6 +++ .../tags/items/pumpkins/jack_o_lanterns.json | 5 ++ .../tags/items/pumpkins/normal.json | 5 ++ .../data/c/stationapi/tags/items/sands.json | 8 ++++ .../c/stationapi/tags/items/sands/normal.json | 5 ++ .../tags/items/sandstone/blocks.json | 8 ++++ .../tags/items/sandstone/normal_blocks.json | 5 ++ .../c/stationapi/tags/items/saplings.json | 5 ++ .../data/c/stationapi/tags/items/seeds.json | 8 ++++ .../c/stationapi/tags/items/seeds/wheat.json | 5 ++ .../data/c/stationapi/tags/items/signs.json | 8 ++++ .../c/stationapi/tags/items/signs/wooden.json | 8 ++++ .../tags/items/signs/wooden/oak.json | 12 +++++ .../tags/items/signs/wooden/oak/standing.json | 5 ++ .../tags/items/signs/wooden/oak/wall.json | 5 ++ .../c/stationapi/tags/items/slime_balls.json | 5 ++ .../data/c/stationapi/tags/items/snow.json | 6 +++ .../data/c/stationapi/tags/items/stairs.json | 12 +++++ .../tags/items/stairs/cobblestone.json | 5 ++ .../stationapi/tags/items/stairs/wooden.json | 8 ++++ .../tags/items/stairs/wooden/oak.json | 5 ++ .../data/c/stationapi/tags/items/sticks.json | 8 ++++ .../stationapi/tags/items/sticks/wooden.json | 5 ++ .../data/c/stationapi/tags/items/stones.json | 5 ++ .../stationapi/tags/items/storage_blocks.json | 8 ++++ .../tags/items/storage_blocks/diamond.json | 5 ++ .../tags/items/storage_blocks/gold.json | 5 ++ .../tags/items/storage_blocks/iron.json | 5 ++ .../tags/items/storage_blocks/lapis.json | 5 ++ .../data/c/stationapi/tags/items/strings.json | 5 ++ .../data/c/stationapi/tags/items/tools.json | 24 ++++++++++ .../c/stationapi/tags/items/tools/axes.json | 24 ++++++++++ .../tags/items/tools/axes/diamond.json | 5 ++ .../tags/items/tools/axes/gold.json | 5 ++ .../tags/items/tools/axes/iron.json | 5 ++ .../tags/items/tools/axes/stone.json | 5 ++ .../tags/items/tools/axes/wooden.json | 5 ++ .../c/stationapi/tags/items/tools/bows.json | 5 ++ .../c/stationapi/tags/items/tools/hoes.json | 24 ++++++++++ .../tags/items/tools/hoes/diamond.json | 5 ++ .../tags/items/tools/hoes/gold.json | 5 ++ .../tags/items/tools/hoes/iron.json | 5 ++ .../tags/items/tools/hoes/stone.json | 5 ++ .../tags/items/tools/hoes/wooden.json | 5 ++ .../stationapi/tags/items/tools/igniters.json | 5 ++ .../stationapi/tags/items/tools/pickaxes.json | 24 ++++++++++ .../tags/items/tools/pickaxes/diamond.json | 5 ++ .../tags/items/tools/pickaxes/gold.json | 5 ++ .../tags/items/tools/pickaxes/iron.json | 5 ++ .../tags/items/tools/pickaxes/stone.json | 5 ++ .../tags/items/tools/pickaxes/wooden.json | 5 ++ .../c/stationapi/tags/items/tools/shears.json | 5 ++ .../stationapi/tags/items/tools/shovels.json | 24 ++++++++++ .../tags/items/tools/shovels/diamond.json | 5 ++ .../tags/items/tools/shovels/gold.json | 5 ++ .../tags/items/tools/shovels/iron.json | 5 ++ .../tags/items/tools/shovels/stone.json | 5 ++ .../tags/items/tools/shovels/wooden.json | 5 ++ .../c/stationapi/tags/items/tools/swords.json | 24 ++++++++++ .../tags/items/tools/swords/diamond.json | 5 ++ .../tags/items/tools/swords/gold.json | 5 ++ .../tags/items/tools/swords/iron.json | 5 ++ .../tags/items/tools/swords/stone.json | 5 ++ .../tags/items/tools/swords/wooden.json | 5 ++ .../c/stationapi/tags/items/trapdoors.json | 8 ++++ .../tags/items/trapdoors/wooden.json | 8 ++++ .../tags/items/trapdoors/wooden/oak.json | 5 ++ .../data/c/stationapi/tags/items/wools.json | 5 ++ .../stationapi/tags/blocks/logs.json | 5 -- .../stationapi/tags/blocks/rails.json | 7 --- .../minecraft/stationapi/tags/items/logs.json | 5 -- .../stationapi/tags/items/planks.json | 5 -- .../stationapi/tags/items/saplings.json | 5 -- 282 files changed, 1981 insertions(+), 40 deletions(-) create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/bookshelves.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/brick_blocks.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/brick_blocks/normal.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/buttons.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/buttons/stone.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/cacti.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/chests.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/chests/wooden.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/clay_blocks.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/cobblestones.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/cobblestones/mossy.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/cobblestones/normal.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/dirts.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/doors.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/doors/iron.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/doors/wooden.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/doors/wooden/oak.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/fence_gates.json rename station-vanilla-fix-v0/src/main/resources/data/{minecraft/stationapi/tags/items/logs_that_burn.json => c/stationapi/tags/blocks/fence_gates/wooden.json} (67%) create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/fences.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/fences/wooden.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/fences/wooden/oak.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/flowers.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/flowers/normal.json rename station-vanilla-fix-v0/src/main/resources/data/{minecraft/stationapi/tags/blocks/logs_that_burn.json => c/stationapi/tags/blocks/flowers/tall.json} (67%) create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/glass_blocks.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/glass_blocks/colorless.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/grass_blocks.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/gravels.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/ladders.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/ladders/wooden.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/ladders/wooden/oak.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/leaves.json rename station-vanilla-fix-v0/src/main/resources/data/{minecraft/stationapi/tags/blocks/leaves.json => c/stationapi/tags/blocks/logs.json} (51%) create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/mushrooms.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/mushrooms/brown.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/mushrooms/red.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/netherracks.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/obsidians.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/obsidians/normal.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/ore_bearing_ground/netherrack.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/ore_bearing_ground/stone.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/ores.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/ores/coal.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/ores/diamond.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/ores/gold.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/ores/iron.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/ores/lapis.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/ores/redstone.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/planks.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/planks/oak.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/pressure_plates.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/pressure_plates/stone.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/pressure_plates/wooden.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/pressure_plates/wooden/oak.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/pumpkins.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/pumpkins/jack_o_lanterns.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/pumpkins/normal.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/sands.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/sands/normal.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/sandstone/blocks.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/sandstone/normal_blocks.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/saplings.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/signs.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/signs/wooden.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/signs/wooden/oak.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/signs/wooden/oak/standing.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/signs/wooden/oak/wall.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/snow.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/stairs.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/stairs/cobblestone.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/stairs/wooden.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/stairs/wooden/oak.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/stones.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/storage_blocks.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/storage_blocks/diamond.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/storage_blocks/gold.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/storage_blocks/iron.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/storage_blocks/lapis.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/trapdoors.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/trapdoors/wooden.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/trapdoors/wooden/oak.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/wools.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/boots.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/boots/chainmail.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/boots/diamond.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/boots/gold.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/boots/iron.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/boots/leather.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/chestplates.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/chestplates/chainmail.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/chestplates/diamond.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/chestplates/gold.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/chestplates/iron.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/chestplates/leather.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/helmets.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/helmets/chainmail.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/helmets/diamond.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/helmets/gold.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/helmets/iron.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/helmets/leather.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/leggings.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/leggings/chainmail.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/leggings/diamond.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/leggings/gold.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/leggings/iron.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/leggings/leather.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/bones.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/bookshelves.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/brick_blocks.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/brick_blocks/normal.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/bricks.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/bricks/normal.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/buckets.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/buckets/empty.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/buckets/lava.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/buckets/milk.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/buckets/water.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/buttons.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/buttons/stone.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/cacti.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/chests.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/chests/wooden.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/clay_blocks.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/coals.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/cobblestones.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/cobblestones/mossy.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/cobblestones/normal.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/crops.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/crops/cactus.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/crops/pumpkin.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/crops/sugar_cane.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/crops/wheat.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/dirts.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/doors.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/doors/iron.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/doors/wooden.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/doors/wooden/oak.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/dusts.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/dusts/glowstone.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/dusts/redstone.json rename station-vanilla-fix-v0/src/main/resources/data/{minecraft/stationapi/tags/blocks/planks.json => c/stationapi/tags/items/dyes.json} (51%) create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/eggs.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/eggs/chicken.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/feathers.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/feathers/chicken.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/fence_gates.json rename station-vanilla-fix-v0/src/main/resources/data/{minecraft/stationapi/tags/blocks/wool.json => c/stationapi/tags/items/fence_gates/wooden.json} (65%) create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/fences.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/fences/wooden.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/fences/wooden/oak.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/flowers.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/flowers/normal.json rename station-vanilla-fix-v0/src/main/resources/data/{minecraft/stationapi/tags/items/coals.json => c/stationapi/tags/items/flowers/tall.json} (65%) create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/foods.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/foods/bread.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/foods/cooked_fish.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/foods/cooked_meat.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/foods/cookie.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/foods/edible_when_placed.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/foods/fruit.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/foods/golden.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/foods/raw_fish.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/foods/raw_meat.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/foods/soup.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/foods/vegetable.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/gems.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/gems/diamond.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/glass_blocks.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/glass_blocks/colorless.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/grass_blocks.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/gravels.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/gunpowders.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ingots.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ingots/gold.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ingots/iron.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ladders.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ladders/wooden.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ladders/wooden/oak.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/leathers.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/leathers/cow.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/leaves.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/logs.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/mushrooms.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/mushrooms/brown.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/mushrooms/red.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/netherracks.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/obsidians.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/obsidians/normal.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ore_bearing_ground/netherrack.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ore_bearing_ground/stone.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ores.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ores/coal.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ores/diamond.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ores/gold.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ores/iron.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ores/lapis.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ores/redstone.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/planks.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/planks/oak.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/pressure_plates.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/pressure_plates/stone.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/pressure_plates/wooden.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/pressure_plates/wooden/oak.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/pumpkins.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/pumpkins/jack_o_lanterns.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/pumpkins/normal.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/sands.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/sands/normal.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/sandstone/blocks.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/sandstone/normal_blocks.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/saplings.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/seeds.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/seeds/wheat.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/signs.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/signs/wooden.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/signs/wooden/oak.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/signs/wooden/oak/standing.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/signs/wooden/oak/wall.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/slime_balls.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/snow.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/stairs.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/stairs/cobblestone.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/stairs/wooden.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/stairs/wooden/oak.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/sticks.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/sticks/wooden.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/stones.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/storage_blocks.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/storage_blocks/diamond.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/storage_blocks/gold.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/storage_blocks/iron.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/storage_blocks/lapis.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/strings.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/axes.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/axes/diamond.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/axes/gold.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/axes/iron.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/axes/stone.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/axes/wooden.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/bows.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/hoes.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/hoes/diamond.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/hoes/gold.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/hoes/iron.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/hoes/stone.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/hoes/wooden.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/igniters.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/pickaxes.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/pickaxes/diamond.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/pickaxes/gold.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/pickaxes/iron.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/pickaxes/stone.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/pickaxes/wooden.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/shears.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/shovels.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/shovels/diamond.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/shovels/gold.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/shovels/iron.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/shovels/stone.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/shovels/wooden.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/swords.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/swords/diamond.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/swords/gold.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/swords/iron.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/swords/stone.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/swords/wooden.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/trapdoors.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/trapdoors/wooden.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/trapdoors/wooden/oak.json create mode 100644 station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/wools.json delete mode 100644 station-vanilla-fix-v0/src/main/resources/data/minecraft/stationapi/tags/blocks/logs.json delete mode 100644 station-vanilla-fix-v0/src/main/resources/data/minecraft/stationapi/tags/blocks/rails.json delete mode 100644 station-vanilla-fix-v0/src/main/resources/data/minecraft/stationapi/tags/items/logs.json delete mode 100644 station-vanilla-fix-v0/src/main/resources/data/minecraft/stationapi/tags/items/planks.json delete mode 100644 station-vanilla-fix-v0/src/main/resources/data/minecraft/stationapi/tags/items/saplings.json diff --git a/station-items-v0/src/main/java/net/modificationstation/stationapi/api/registry/tag/ItemTags.java b/station-items-v0/src/main/java/net/modificationstation/stationapi/api/registry/tag/ItemTags.java index e2295f22a..c4cad5a21 100644 --- a/station-items-v0/src/main/java/net/modificationstation/stationapi/api/registry/tag/ItemTags.java +++ b/station-items-v0/src/main/java/net/modificationstation/stationapi/api/registry/tag/ItemTags.java @@ -10,10 +10,33 @@ @NoArgsConstructor(access = AccessLevel.PRIVATE) public final class ItemTags { public static final TagKey - SAPLINGS = of("saplings"), - LOGS = of("logs"), - PLANKS = of("planks"), - COALS = of("coals"); + COALS = of("c:coals"), // Used for Fuel + + SAPLINGS = of("c:saplings"), + PLANKS = of("c:planks"), + NORMAL_COBBLESTONE = of("c:cobblestones/normal"), + NORMAL_SAND = of("c:sands/normal"), + WOODEN_CHESTS = of("c:chests/wooden"), + WOOLS = of("c:wools"), + IRON_INGOT = of("c:ingots/iron"), + GOLD_INGOT = of("c:ingots/gold"), + GLOWSTONE_DUST = of("c:dusts/glowstone"), + REDSTONE_DUST = of("c:dusts/redstone"), + DIAMOND = of("c:gems/diamond"), + GOLD_BLOCKS = of("c:storage_blocks/gold"), + NORMAL_BRICKS = of("c:bricks/normal"), + STRINGS = of("c:strings"), + GUNPOWDERS = of("c:gunpowders"), + LEATHERS = of("c:leathers"), + FEATHERS = of("c:feathers"), + SLIMEBALLS = of("c:slime_balls"), + BONE = of("c:bones"), + EGGS = of("c:eggs"), + WHEAT = of("c:crops/wheat"), + BOWS = of("c:tools/bows"), + WOODEN_STICK = of("c:sticks/wooden"), + RED_MUSHROOMS = of("c:mushrooms/red"), + BROWN_MUSHROOMS = of("c:mushrooms/brown"); private static TagKey of(String id) { return TagKey.of(ItemRegistry.KEY, Identifier.of(id)); diff --git a/station-vanilla-fix-v0/src/main/java/net/modificationstation/stationapi/impl/vanillafix/block/VanillaBlockFixImpl.java b/station-vanilla-fix-v0/src/main/java/net/modificationstation/stationapi/impl/vanillafix/block/VanillaBlockFixImpl.java index 31128650c..91736311c 100644 --- a/station-vanilla-fix-v0/src/main/java/net/modificationstation/stationapi/impl/vanillafix/block/VanillaBlockFixImpl.java +++ b/station-vanilla-fix-v0/src/main/java/net/modificationstation/stationapi/impl/vanillafix/block/VanillaBlockFixImpl.java @@ -118,9 +118,9 @@ private static void registerBlocks(BlockRegistryEvent event) { .accept("cobblestone_stairs", COBBLESTONE_STAIRS) .accept("oak_wall_sign", WALL_SIGN) .accept("lever", LEVER) - .accept("oak_pressure_plate", STONE_PRESSURE_PLATE) + .accept("stone_pressure_plate", STONE_PRESSURE_PLATE) .accept("iron_door", IRON_DOOR) - .accept("stone_pressure_plate", WOODEN_PRESSURE_PLATE) + .accept("oak_pressure_plate", WOODEN_PRESSURE_PLATE) .accept("redstone_ore", REDSTONE_ORE) .accept("redstone_ore_lit", LIT_REDSTONE_ORE) .accept("redstone_torch", REDSTONE_TORCH) diff --git a/station-vanilla-fix-v0/src/main/java/net/modificationstation/stationapi/impl/vanillafix/recipe/VanillaFuelItemFixImpl.java b/station-vanilla-fix-v0/src/main/java/net/modificationstation/stationapi/impl/vanillafix/recipe/VanillaFuelItemFixImpl.java index 85df8894a..af3018118 100644 --- a/station-vanilla-fix-v0/src/main/java/net/modificationstation/stationapi/impl/vanillafix/recipe/VanillaFuelItemFixImpl.java +++ b/station-vanilla-fix-v0/src/main/java/net/modificationstation/stationapi/impl/vanillafix/recipe/VanillaFuelItemFixImpl.java @@ -27,7 +27,7 @@ private static void registerFuel(RecipeRegisterEvent event) { for (Block block : Block.BLOCKS) if (block != null && block.material == Material.WOOD && Item.ITEMS[block.id] != null) FuelRegistry.addFuelItem(Item.ITEMS[block.id], 300); - FuelRegistry.addFuelItem(Item.STICK, 100); + FuelRegistry.addFuelTag(ItemTags.WOODEN_STICK, 100); FuelRegistry.addFuelTag(ItemTags.COALS, 1600); FuelRegistry.addFuelItem(Item.LAVA_BUCKET, 20000); FuelRegistry.addFuelTag(ItemTags.SAPLINGS, 100); diff --git a/station-vanilla-fix-v0/src/main/java/net/modificationstation/stationapi/impl/vanillafix/recipe/VanillaTagRecipeFixImpl.java b/station-vanilla-fix-v0/src/main/java/net/modificationstation/stationapi/impl/vanillafix/recipe/VanillaTagRecipeFixImpl.java index 2088c0551..717f4d5e3 100644 --- a/station-vanilla-fix-v0/src/main/java/net/modificationstation/stationapi/impl/vanillafix/recipe/VanillaTagRecipeFixImpl.java +++ b/station-vanilla-fix-v0/src/main/java/net/modificationstation/stationapi/impl/vanillafix/recipe/VanillaTagRecipeFixImpl.java @@ -13,6 +13,29 @@ public class VanillaTagRecipeFixImpl { private static final Supplier>> TAGIFICATION_MAP = Suppliers.memoize(() -> { val builder = ImmutableMap.>builder(); builder.put(Block.PLANKS.asItem(), ItemTags.PLANKS); + builder.put(Block.COBBLESTONE.asItem(), ItemTags.NORMAL_COBBLESTONE); + builder.put(Block.SAND.asItem(), ItemTags.NORMAL_SAND); + builder.put(Block.CHEST.asItem(), ItemTags.WOODEN_CHESTS); + builder.put(Block.WOOL.asItem(), ItemTags.WOOLS); + builder.put(Item.IRON_INGOT, ItemTags.IRON_INGOT); + builder.put(Item.GOLD_INGOT, ItemTags.GOLD_INGOT); + builder.put(Item.GLOWSTONE_DUST, ItemTags.GLOWSTONE_DUST); + builder.put(Item.REDSTONE, ItemTags.REDSTONE_DUST); + builder.put(Item.DIAMOND, ItemTags.DIAMOND); + builder.put(Block.GOLD_BLOCK.asItem(), ItemTags.GOLD_BLOCKS); + builder.put(Item.BRICK, ItemTags.NORMAL_BRICKS); + builder.put(Item.STRING, ItemTags.STRINGS); + builder.put(Item.GUNPOWDER, ItemTags.GUNPOWDERS); + builder.put(Item.LEATHER, ItemTags.LEATHERS); + builder.put(Item.FEATHER, ItemTags.FEATHERS); + builder.put(Item.SLIMEBALL, ItemTags.SLIMEBALLS); + builder.put(Item.BONE, ItemTags.BONE); + builder.put(Item.EGG, ItemTags.EGGS); + builder.put(Item.WHEAT, ItemTags.WHEAT); + builder.put(Item.BOW, ItemTags.BOWS); + builder.put(Item.STICK, ItemTags.WOODEN_STICK); + builder.put(Block.RED_MUSHROOM.asItem(), ItemTags.RED_MUSHROOMS); + builder.put(Block.BROWN_MUSHROOM.asItem(), ItemTags.BROWN_MUSHROOMS); return builder.build(); }); diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/bookshelves.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/bookshelves.json new file mode 100644 index 000000000..c09b2185b --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/bookshelves.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:bookshelf" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/brick_blocks.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/brick_blocks.json new file mode 100644 index 000000000..5556d8ba5 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/brick_blocks.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#c:brick_blocks/normal", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/brick_blocks/normal.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/brick_blocks/normal.json new file mode 100644 index 000000000..e7d8939ed --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/brick_blocks/normal.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:bricks" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/buttons.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/buttons.json new file mode 100644 index 000000000..e5d178222 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/buttons.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#c:buttons/stone", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/buttons/stone.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/buttons/stone.json new file mode 100644 index 000000000..9c621fa96 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/buttons/stone.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:stone_button" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/cacti.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/cacti.json new file mode 100644 index 000000000..2624ccf24 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/cacti.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:cactus" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/chests.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/chests.json new file mode 100644 index 000000000..2e9aef7dd --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/chests.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#c:chests/wooden", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/chests/wooden.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/chests/wooden.json new file mode 100644 index 000000000..7c4bb0ac8 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/chests/wooden.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:chest" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/clay_blocks.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/clay_blocks.json new file mode 100644 index 000000000..957a556db --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/clay_blocks.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:clay" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/cobblestones.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/cobblestones.json new file mode 100644 index 000000000..730c6d9ee --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/cobblestones.json @@ -0,0 +1,12 @@ +{ + "values": [ + { + "id": "#c:cobblestones/normal", + "required": false + }, + { + "id": "#c:cobblestones/mossy", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/cobblestones/mossy.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/cobblestones/mossy.json new file mode 100644 index 000000000..c32be6c96 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/cobblestones/mossy.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:mossy_cobblestone" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/cobblestones/normal.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/cobblestones/normal.json new file mode 100644 index 000000000..dac674da5 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/cobblestones/normal.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:cobblestone" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/dirts.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/dirts.json new file mode 100644 index 000000000..43dcd5c3a --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/dirts.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:dirt" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/doors.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/doors.json new file mode 100644 index 000000000..a3038ef25 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/doors.json @@ -0,0 +1,12 @@ +{ + "values": [ + { + "id": "#c:doors/wooden", + "required": false + }, + { + "id": "#c:doors/iron", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/doors/iron.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/doors/iron.json new file mode 100644 index 000000000..0d2e961fc --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/doors/iron.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:iron_door" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/doors/wooden.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/doors/wooden.json new file mode 100644 index 000000000..b79e91667 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/doors/wooden.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#c:doors/wooden/oak", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/doors/wooden/oak.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/doors/wooden/oak.json new file mode 100644 index 000000000..35e6fe95d --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/doors/wooden/oak.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:oak_door" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/fence_gates.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/fence_gates.json new file mode 100644 index 000000000..f8bdd85de --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/fence_gates.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#c:fence_gates/wooden", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/minecraft/stationapi/tags/items/logs_that_burn.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/fence_gates/wooden.json similarity index 67% rename from station-vanilla-fix-v0/src/main/resources/data/minecraft/stationapi/tags/items/logs_that_burn.json rename to station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/fence_gates/wooden.json index 4d5e4bbc8..d6649e775 100644 --- a/station-vanilla-fix-v0/src/main/resources/data/minecraft/stationapi/tags/items/logs_that_burn.json +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/fence_gates/wooden.json @@ -1,5 +1,4 @@ { "values": [ - "log" ] } \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/fences.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/fences.json new file mode 100644 index 000000000..7e5df1630 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/fences.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#c:fences/wooden", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/fences/wooden.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/fences/wooden.json new file mode 100644 index 000000000..6601ea7eb --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/fences/wooden.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#c:fences/wooden/oak", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/fences/wooden/oak.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/fences/wooden/oak.json new file mode 100644 index 000000000..ad173def4 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/fences/wooden/oak.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:oak_fence" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/flowers.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/flowers.json new file mode 100644 index 000000000..a4281c705 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/flowers.json @@ -0,0 +1,12 @@ +{ + "values": [ + { + "id": "#c:flowers/small", + "required": false + }, + { + "id": "#c:flowers/tall", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/flowers/normal.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/flowers/normal.json new file mode 100644 index 000000000..027a199cc --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/flowers/normal.json @@ -0,0 +1,6 @@ +{ + "values": [ + "minecraft:dandelion", + "minecraft:rose" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/minecraft/stationapi/tags/blocks/logs_that_burn.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/flowers/tall.json similarity index 67% rename from station-vanilla-fix-v0/src/main/resources/data/minecraft/stationapi/tags/blocks/logs_that_burn.json rename to station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/flowers/tall.json index 4d5e4bbc8..d6649e775 100644 --- a/station-vanilla-fix-v0/src/main/resources/data/minecraft/stationapi/tags/blocks/logs_that_burn.json +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/flowers/tall.json @@ -1,5 +1,4 @@ { "values": [ - "log" ] } \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/glass_blocks.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/glass_blocks.json new file mode 100644 index 000000000..edc769b25 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/glass_blocks.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#c:glass_blocks/colorless", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/glass_blocks/colorless.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/glass_blocks/colorless.json new file mode 100644 index 000000000..ac8b5e508 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/glass_blocks/colorless.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:glass" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/grass_blocks.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/grass_blocks.json new file mode 100644 index 000000000..ce2108c7a --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/grass_blocks.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:grass_block" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/gravels.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/gravels.json new file mode 100644 index 000000000..f6968bff6 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/gravels.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:gravel" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/ladders.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/ladders.json new file mode 100644 index 000000000..18735c86a --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/ladders.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#c:ladders/wooden", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/ladders/wooden.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/ladders/wooden.json new file mode 100644 index 000000000..8aed27c0f --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/ladders/wooden.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#c:ladders/wooden/oak", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/ladders/wooden/oak.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/ladders/wooden/oak.json new file mode 100644 index 000000000..f75f2a493 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/ladders/wooden/oak.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:ladder" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/leaves.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/leaves.json new file mode 100644 index 000000000..fb8b0a4cd --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/leaves.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:leaves" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/minecraft/stationapi/tags/blocks/leaves.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/logs.json similarity index 51% rename from station-vanilla-fix-v0/src/main/resources/data/minecraft/stationapi/tags/blocks/leaves.json rename to station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/logs.json index f6e64238b..7d753fa0e 100644 --- a/station-vanilla-fix-v0/src/main/resources/data/minecraft/stationapi/tags/blocks/leaves.json +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/logs.json @@ -1,5 +1,5 @@ { "values": [ - "leaves" + "minecraft:log" ] } \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/mushrooms.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/mushrooms.json new file mode 100644 index 000000000..380184392 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/mushrooms.json @@ -0,0 +1,12 @@ +{ + "values": [ + { + "id": "#c:mushrooms/brown", + "required": false + }, + { + "id": "#c:mushrooms/red", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/mushrooms/brown.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/mushrooms/brown.json new file mode 100644 index 000000000..3ad854c71 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/mushrooms/brown.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:brown_mushroom" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/mushrooms/red.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/mushrooms/red.json new file mode 100644 index 000000000..02bd559b4 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/mushrooms/red.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:red_mushroom" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/netherracks.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/netherracks.json new file mode 100644 index 000000000..daa9c6670 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/netherracks.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:netherrack" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/obsidians.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/obsidians.json new file mode 100644 index 000000000..6ec927ee0 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/obsidians.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#c:obsidians/normal", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/obsidians/normal.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/obsidians/normal.json new file mode 100644 index 000000000..170248454 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/obsidians/normal.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:obsidian" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/ore_bearing_ground/netherrack.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/ore_bearing_ground/netherrack.json new file mode 100644 index 000000000..daa9c6670 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/ore_bearing_ground/netherrack.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:netherrack" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/ore_bearing_ground/stone.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/ore_bearing_ground/stone.json new file mode 100644 index 000000000..c2d7c79f3 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/ore_bearing_ground/stone.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:stone" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/ores.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/ores.json new file mode 100644 index 000000000..c123df021 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/ores.json @@ -0,0 +1,28 @@ +{ + "values": [ + { + "id": "#c:ores/coal", + "required": false + }, + { + "id": "#c:ores/diamond", + "required": false + }, + { + "id": "#c:ores/gold", + "required": false + }, + { + "id": "#c:ores/iron", + "required": false + }, + { + "id": "#c:ores/lapis", + "required": false + }, + { + "id": "#c:ores/redstone", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/ores/coal.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/ores/coal.json new file mode 100644 index 000000000..853f057b1 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/ores/coal.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:coal_ore" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/ores/diamond.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/ores/diamond.json new file mode 100644 index 000000000..15fe2f020 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/ores/diamond.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:diamond_ore" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/ores/gold.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/ores/gold.json new file mode 100644 index 000000000..f28475b5d --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/ores/gold.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:gold_ore" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/ores/iron.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/ores/iron.json new file mode 100644 index 000000000..82b4cad74 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/ores/iron.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:iron_ore" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/ores/lapis.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/ores/lapis.json new file mode 100644 index 000000000..6c8e743d4 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/ores/lapis.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:lapis_ore" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/ores/redstone.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/ores/redstone.json new file mode 100644 index 000000000..3c1d149bd --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/ores/redstone.json @@ -0,0 +1,6 @@ +{ + "values": [ + "minecraft:redstone_ore", + "minecraft:redstone_ore_lit" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/planks.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/planks.json new file mode 100644 index 000000000..1eb54ebed --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/planks.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#c:planks/oak", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/planks/oak.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/planks/oak.json new file mode 100644 index 000000000..45a159b9d --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/planks/oak.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:oak_planks" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/pressure_plates.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/pressure_plates.json new file mode 100644 index 000000000..2894de153 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/pressure_plates.json @@ -0,0 +1,12 @@ +{ + "values": [ + { + "id": "#c:pressure_plates/wooden", + "required": false + }, + { + "id": "#c:pressure_plates/stone", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/pressure_plates/stone.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/pressure_plates/stone.json new file mode 100644 index 000000000..73a951ee7 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/pressure_plates/stone.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:stone_pressure_plate" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/pressure_plates/wooden.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/pressure_plates/wooden.json new file mode 100644 index 000000000..371016797 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/pressure_plates/wooden.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#c:pressure_plates/wooden/oak", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/pressure_plates/wooden/oak.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/pressure_plates/wooden/oak.json new file mode 100644 index 000000000..7c41ec38a --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/pressure_plates/wooden/oak.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:oak_pressure_plate" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/pumpkins.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/pumpkins.json new file mode 100644 index 000000000..89f031d14 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/pumpkins.json @@ -0,0 +1,6 @@ +{ + "values": [ + "#c:pumpkins/normal", + "#c:pumpkins/jack_o_lanterns" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/pumpkins/jack_o_lanterns.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/pumpkins/jack_o_lanterns.json new file mode 100644 index 000000000..598454b50 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/pumpkins/jack_o_lanterns.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:jack_o_lantern" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/pumpkins/normal.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/pumpkins/normal.json new file mode 100644 index 000000000..1a0f6d399 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/pumpkins/normal.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:carved_pumpkin" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/sands.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/sands.json new file mode 100644 index 000000000..6d89dd83c --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/sands.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#c:sands/normal", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/sands/normal.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/sands/normal.json new file mode 100644 index 000000000..af14f42f5 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/sands/normal.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:sand" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/sandstone/blocks.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/sandstone/blocks.json new file mode 100644 index 000000000..31d5c5a60 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/sandstone/blocks.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#c:sandstone/normal_blocks", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/sandstone/normal_blocks.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/sandstone/normal_blocks.json new file mode 100644 index 000000000..22418f38b --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/sandstone/normal_blocks.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:sandstone" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/saplings.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/saplings.json new file mode 100644 index 000000000..bec4643c3 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/saplings.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:sapling" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/signs.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/signs.json new file mode 100644 index 000000000..1e9a02f2b --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/signs.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#c:signs/wooden", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/signs/wooden.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/signs/wooden.json new file mode 100644 index 000000000..fa8f3ce9c --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/signs/wooden.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#c:signs/wooden/oak", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/signs/wooden/oak.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/signs/wooden/oak.json new file mode 100644 index 000000000..8c16e8628 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/signs/wooden/oak.json @@ -0,0 +1,12 @@ +{ + "values": [ + { + "id": "#c:signs/wooden/oak/standing", + "required": false + }, + { + "id": "#c:signs/wooden/oak/wall", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/signs/wooden/oak/standing.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/signs/wooden/oak/standing.json new file mode 100644 index 000000000..e0213dea1 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/signs/wooden/oak/standing.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:oak_sign" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/signs/wooden/oak/wall.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/signs/wooden/oak/wall.json new file mode 100644 index 000000000..85e311742 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/signs/wooden/oak/wall.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:oak_wall_sign" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/snow.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/snow.json new file mode 100644 index 000000000..49f75e369 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/snow.json @@ -0,0 +1,6 @@ +{ + "values": [ + "minecraft:snow", + "minecraft:snow_block" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/stairs.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/stairs.json new file mode 100644 index 000000000..ed43adf49 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/stairs.json @@ -0,0 +1,12 @@ +{ + "values": [ + { + "id": "#c:stairs/wooden", + "required": false + }, + { + "id": "#c:stairs/cobblestone", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/stairs/cobblestone.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/stairs/cobblestone.json new file mode 100644 index 000000000..e758f5a2f --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/stairs/cobblestone.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:cobblestone_stairs" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/stairs/wooden.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/stairs/wooden.json new file mode 100644 index 000000000..dad6da197 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/stairs/wooden.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#c:stairs/wooden/oak", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/stairs/wooden/oak.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/stairs/wooden/oak.json new file mode 100644 index 000000000..075e2b35d --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/stairs/wooden/oak.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:oak_stairs" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/stones.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/stones.json new file mode 100644 index 000000000..c2d7c79f3 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/stones.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:stone" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/storage_blocks.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/storage_blocks.json new file mode 100644 index 000000000..5d1b01ea2 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/storage_blocks.json @@ -0,0 +1,8 @@ +{ + "values": [ + "#c:storage_blocks/diamond", + "#c:storage_blocks/gold", + "#c:storage_blocks/iron", + "#c:storage_blocks/lapis" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/storage_blocks/diamond.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/storage_blocks/diamond.json new file mode 100644 index 000000000..acd7f52de --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/storage_blocks/diamond.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:diamond_block" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/storage_blocks/gold.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/storage_blocks/gold.json new file mode 100644 index 000000000..546dde03c --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/storage_blocks/gold.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:gold_block" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/storage_blocks/iron.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/storage_blocks/iron.json new file mode 100644 index 000000000..01fb2965f --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/storage_blocks/iron.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:iron_block" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/storage_blocks/lapis.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/storage_blocks/lapis.json new file mode 100644 index 000000000..f4ca82bbd --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/storage_blocks/lapis.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:lapis_block" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/trapdoors.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/trapdoors.json new file mode 100644 index 000000000..852b6970a --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/trapdoors.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#c:trapdoors/wooden", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/trapdoors/wooden.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/trapdoors/wooden.json new file mode 100644 index 000000000..594e83e04 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/trapdoors/wooden.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#c:trapdoors/wooden/oak", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/trapdoors/wooden/oak.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/trapdoors/wooden/oak.json new file mode 100644 index 000000000..0e9914282 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/trapdoors/wooden/oak.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:oak_trapdoor" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/wools.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/wools.json new file mode 100644 index 000000000..ad2d8e50f --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/blocks/wools.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:wool" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors.json new file mode 100644 index 000000000..b4db1ca2a --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors.json @@ -0,0 +1,20 @@ +{ + "values": [ + { + "id": "#c:armors/helmets", + "required": false + }, + { + "id": "#c:armors/chestplates", + "required": false + }, + { + "id": "#c:armors/leggings", + "required": false + }, + { + "id": "#c:armors/boots", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/boots.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/boots.json new file mode 100644 index 000000000..8dbb3db1b --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/boots.json @@ -0,0 +1,24 @@ +{ + "values": [ + { + "id": "#c:armors/boots/leather", + "required": false + }, + { + "id": "#c:armors/boots/chainmail", + "required": false + }, + { + "id": "#c:armors/boots/iron", + "required": false + }, + { + "id": "#c:armors/boots/gold", + "required": false + }, + { + "id": "#c:armors/boots/diamond", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/boots/chainmail.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/boots/chainmail.json new file mode 100644 index 000000000..921e4a423 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/boots/chainmail.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:chainmail_boots" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/boots/diamond.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/boots/diamond.json new file mode 100644 index 000000000..b02ec32ab --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/boots/diamond.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:diamond_boots" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/boots/gold.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/boots/gold.json new file mode 100644 index 000000000..c8c2f8577 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/boots/gold.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:golden_boots" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/boots/iron.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/boots/iron.json new file mode 100644 index 000000000..891e91fb4 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/boots/iron.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:iron_boots" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/boots/leather.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/boots/leather.json new file mode 100644 index 000000000..f8bae69ca --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/boots/leather.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:leather_boots" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/chestplates.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/chestplates.json new file mode 100644 index 000000000..857a4ebc5 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/chestplates.json @@ -0,0 +1,24 @@ +{ + "values": [ + { + "id": "#c:armors/chestplates/leather", + "required": false + }, + { + "id": "#c:armors/chestplates/chainmail", + "required": false + }, + { + "id": "#c:armors/chestplates/iron", + "required": false + }, + { + "id": "#c:armors/chestplates/gold", + "required": false + }, + { + "id": "#c:armors/chestplates/diamond", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/chestplates/chainmail.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/chestplates/chainmail.json new file mode 100644 index 000000000..e6b43eca2 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/chestplates/chainmail.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:chainmail_chestplate" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/chestplates/diamond.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/chestplates/diamond.json new file mode 100644 index 000000000..9ced7f5b0 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/chestplates/diamond.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:diamond_chestplate" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/chestplates/gold.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/chestplates/gold.json new file mode 100644 index 000000000..135197ce2 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/chestplates/gold.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:golden_chestplate" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/chestplates/iron.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/chestplates/iron.json new file mode 100644 index 000000000..debb907e3 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/chestplates/iron.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:iron_chestplate" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/chestplates/leather.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/chestplates/leather.json new file mode 100644 index 000000000..0901fe1db --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/chestplates/leather.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:leather_chestplate" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/helmets.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/helmets.json new file mode 100644 index 000000000..d759b263f --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/helmets.json @@ -0,0 +1,24 @@ +{ + "values": [ + { + "id": "#c:armors/helmets/leather", + "required": false + }, + { + "id": "#c:armors/helmets/chainmail", + "required": false + }, + { + "id": "#c:armors/helmets/iron", + "required": false + }, + { + "id": "#c:armors/helmets/gold", + "required": false + }, + { + "id": "#c:armors/helmets/diamond", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/helmets/chainmail.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/helmets/chainmail.json new file mode 100644 index 000000000..6d279735e --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/helmets/chainmail.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:chainmail_helmet" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/helmets/diamond.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/helmets/diamond.json new file mode 100644 index 000000000..d63043ab6 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/helmets/diamond.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:diamond_helmet" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/helmets/gold.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/helmets/gold.json new file mode 100644 index 000000000..577efbec8 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/helmets/gold.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:golden_helmet" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/helmets/iron.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/helmets/iron.json new file mode 100644 index 000000000..23c03b773 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/helmets/iron.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:iron_helmet" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/helmets/leather.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/helmets/leather.json new file mode 100644 index 000000000..697d40c5a --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/helmets/leather.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:leather_helmet" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/leggings.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/leggings.json new file mode 100644 index 000000000..17968426d --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/leggings.json @@ -0,0 +1,24 @@ +{ + "values": [ + { + "id": "#c:armors/leggings/leather", + "required": false + }, + { + "id": "#c:armors/leggings/chainmail", + "required": false + }, + { + "id": "#c:armors/leggings/iron", + "required": false + }, + { + "id": "#c:armors/leggings/gold", + "required": false + }, + { + "id": "#c:armors/leggings/diamond", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/leggings/chainmail.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/leggings/chainmail.json new file mode 100644 index 000000000..9c0ed90f6 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/leggings/chainmail.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:chainmail_leggings" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/leggings/diamond.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/leggings/diamond.json new file mode 100644 index 000000000..2267fe826 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/leggings/diamond.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:diamond_leggings" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/leggings/gold.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/leggings/gold.json new file mode 100644 index 000000000..16221885c --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/leggings/gold.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:golden_leggings" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/leggings/iron.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/leggings/iron.json new file mode 100644 index 000000000..579efd2ec --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/leggings/iron.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:iron_leggings" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/leggings/leather.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/leggings/leather.json new file mode 100644 index 000000000..7fef752bc --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/armors/leggings/leather.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:leather_leggings" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/bones.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/bones.json new file mode 100644 index 000000000..5af534fcf --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/bones.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:bone" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/bookshelves.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/bookshelves.json new file mode 100644 index 000000000..c09b2185b --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/bookshelves.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:bookshelf" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/brick_blocks.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/brick_blocks.json new file mode 100644 index 000000000..5556d8ba5 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/brick_blocks.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#c:brick_blocks/normal", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/brick_blocks/normal.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/brick_blocks/normal.json new file mode 100644 index 000000000..e7d8939ed --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/brick_blocks/normal.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:bricks" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/bricks.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/bricks.json new file mode 100644 index 000000000..5d8b6dee1 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/bricks.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#c:bricks/normal", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/bricks/normal.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/bricks/normal.json new file mode 100644 index 000000000..8f632e499 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/bricks/normal.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:brick" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/buckets.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/buckets.json new file mode 100644 index 000000000..93bd2646e --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/buckets.json @@ -0,0 +1,20 @@ +{ + "values": [ + { + "id": "#c:buckets/empty", + "required": false + }, + { + "id": "#c:buckets/water", + "required": false + }, + { + "id": "#c:buckets/lava", + "required": false + }, + { + "id": "#c:buckets/milk", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/buckets/empty.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/buckets/empty.json new file mode 100644 index 000000000..67b2045bb --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/buckets/empty.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:bucket" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/buckets/lava.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/buckets/lava.json new file mode 100644 index 000000000..fec09c771 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/buckets/lava.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:lava_bucket" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/buckets/milk.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/buckets/milk.json new file mode 100644 index 000000000..899451cb2 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/buckets/milk.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:milk_bucket" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/buckets/water.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/buckets/water.json new file mode 100644 index 000000000..6486764e5 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/buckets/water.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:water_bucket" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/buttons.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/buttons.json new file mode 100644 index 000000000..e5d178222 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/buttons.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#c:buttons/stone", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/buttons/stone.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/buttons/stone.json new file mode 100644 index 000000000..9c621fa96 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/buttons/stone.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:stone_button" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/cacti.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/cacti.json new file mode 100644 index 000000000..2624ccf24 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/cacti.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:cactus" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/chests.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/chests.json new file mode 100644 index 000000000..2e9aef7dd --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/chests.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#c:chests/wooden", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/chests/wooden.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/chests/wooden.json new file mode 100644 index 000000000..7c4bb0ac8 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/chests/wooden.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:chest" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/clay_blocks.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/clay_blocks.json new file mode 100644 index 000000000..957a556db --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/clay_blocks.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:clay" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/coals.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/coals.json new file mode 100644 index 000000000..21fb3440a --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/coals.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:coal" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/cobblestones.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/cobblestones.json new file mode 100644 index 000000000..730c6d9ee --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/cobblestones.json @@ -0,0 +1,12 @@ +{ + "values": [ + { + "id": "#c:cobblestones/normal", + "required": false + }, + { + "id": "#c:cobblestones/mossy", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/cobblestones/mossy.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/cobblestones/mossy.json new file mode 100644 index 000000000..c32be6c96 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/cobblestones/mossy.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:mossy_cobblestone" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/cobblestones/normal.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/cobblestones/normal.json new file mode 100644 index 000000000..dac674da5 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/cobblestones/normal.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:cobblestone" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/crops.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/crops.json new file mode 100644 index 000000000..7b2f6db8c --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/crops.json @@ -0,0 +1,20 @@ +{ + "values": [ + { + "id": "#c:crops/cactus", + "required": false + }, + { + "id": "#c:crops/pumpkin", + "required": false + }, + { + "id": "#c:crops/sugar_cane", + "required": false + }, + { + "id": "#c:crops/wheat", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/crops/cactus.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/crops/cactus.json new file mode 100644 index 000000000..2624ccf24 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/crops/cactus.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:cactus" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/crops/pumpkin.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/crops/pumpkin.json new file mode 100644 index 000000000..1a0f6d399 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/crops/pumpkin.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:carved_pumpkin" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/crops/sugar_cane.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/crops/sugar_cane.json new file mode 100644 index 000000000..6e3dc8c98 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/crops/sugar_cane.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:sugar_cane" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/crops/wheat.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/crops/wheat.json new file mode 100644 index 000000000..498cb445f --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/crops/wheat.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:wheat" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/dirts.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/dirts.json new file mode 100644 index 000000000..43dcd5c3a --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/dirts.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:dirt" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/doors.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/doors.json new file mode 100644 index 000000000..a3038ef25 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/doors.json @@ -0,0 +1,12 @@ +{ + "values": [ + { + "id": "#c:doors/wooden", + "required": false + }, + { + "id": "#c:doors/iron", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/doors/iron.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/doors/iron.json new file mode 100644 index 000000000..0d2e961fc --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/doors/iron.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:iron_door" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/doors/wooden.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/doors/wooden.json new file mode 100644 index 000000000..b79e91667 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/doors/wooden.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#c:doors/wooden/oak", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/doors/wooden/oak.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/doors/wooden/oak.json new file mode 100644 index 000000000..35e6fe95d --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/doors/wooden/oak.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:oak_door" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/dusts.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/dusts.json new file mode 100644 index 000000000..d0edbb6a1 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/dusts.json @@ -0,0 +1,12 @@ +{ + "values": [ + { + "id": "#c:dusts/glowstone", + "required": false + }, + { + "id": "#c:dusts/redstone", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/dusts/glowstone.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/dusts/glowstone.json new file mode 100644 index 000000000..668258c52 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/dusts/glowstone.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:glowstone_dust" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/dusts/redstone.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/dusts/redstone.json new file mode 100644 index 000000000..a096239ec --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/dusts/redstone.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:redstone" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/minecraft/stationapi/tags/blocks/planks.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/dyes.json similarity index 51% rename from station-vanilla-fix-v0/src/main/resources/data/minecraft/stationapi/tags/blocks/planks.json rename to station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/dyes.json index 56a4c1d23..85ad5a29e 100644 --- a/station-vanilla-fix-v0/src/main/resources/data/minecraft/stationapi/tags/blocks/planks.json +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/dyes.json @@ -1,5 +1,5 @@ { "values": [ - "oak_planks" + "minecraft:dye" ] } \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/eggs.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/eggs.json new file mode 100644 index 000000000..7e58e9215 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/eggs.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#c:eggs/chicken", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/eggs/chicken.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/eggs/chicken.json new file mode 100644 index 000000000..cbcbec3c4 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/eggs/chicken.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:egg" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/feathers.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/feathers.json new file mode 100644 index 000000000..7bd8e61b3 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/feathers.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#c:feathers/chicken", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/feathers/chicken.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/feathers/chicken.json new file mode 100644 index 000000000..808620070 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/feathers/chicken.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:feather" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/fence_gates.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/fence_gates.json new file mode 100644 index 000000000..f8bdd85de --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/fence_gates.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#c:fence_gates/wooden", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/minecraft/stationapi/tags/blocks/wool.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/fence_gates/wooden.json similarity index 65% rename from station-vanilla-fix-v0/src/main/resources/data/minecraft/stationapi/tags/blocks/wool.json rename to station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/fence_gates/wooden.json index a5e2315ee..d6649e775 100644 --- a/station-vanilla-fix-v0/src/main/resources/data/minecraft/stationapi/tags/blocks/wool.json +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/fence_gates/wooden.json @@ -1,5 +1,4 @@ { "values": [ - "wool" ] } \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/fences.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/fences.json new file mode 100644 index 000000000..7e5df1630 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/fences.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#c:fences/wooden", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/fences/wooden.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/fences/wooden.json new file mode 100644 index 000000000..6601ea7eb --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/fences/wooden.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#c:fences/wooden/oak", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/fences/wooden/oak.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/fences/wooden/oak.json new file mode 100644 index 000000000..ad173def4 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/fences/wooden/oak.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:oak_fence" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/flowers.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/flowers.json new file mode 100644 index 000000000..a4281c705 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/flowers.json @@ -0,0 +1,12 @@ +{ + "values": [ + { + "id": "#c:flowers/small", + "required": false + }, + { + "id": "#c:flowers/tall", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/flowers/normal.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/flowers/normal.json new file mode 100644 index 000000000..027a199cc --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/flowers/normal.json @@ -0,0 +1,6 @@ +{ + "values": [ + "minecraft:dandelion", + "minecraft:rose" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/minecraft/stationapi/tags/items/coals.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/flowers/tall.json similarity index 65% rename from station-vanilla-fix-v0/src/main/resources/data/minecraft/stationapi/tags/items/coals.json rename to station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/flowers/tall.json index d3bb90846..d6649e775 100644 --- a/station-vanilla-fix-v0/src/main/resources/data/minecraft/stationapi/tags/items/coals.json +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/flowers/tall.json @@ -1,5 +1,4 @@ { "values": [ - "coal" ] } \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/foods.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/foods.json new file mode 100644 index 000000000..45062dbf5 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/foods.json @@ -0,0 +1,48 @@ +{ + "values": [ + { + "id": "#c:foods/fruit", + "required": false + }, + { + "id": "#c:foods/vegetable", + "required": false + }, + { + "id": "#c:foods/bread", + "required": false + }, + { + "id": "#c:foods/cookie", + "required": false + }, + { + "id": "#c:foods/raw_meat", + "required": false + }, + { + "id": "#c:foods/raw_fish", + "required": false + }, + { + "id": "#c:foods/cooked_meat", + "required": false + }, + { + "id": "#c:foods/cooked_fish", + "required": false + }, + { + "id": "#c:foods/soup", + "required": false + }, + { + "id": "#c:foods/golden", + "required": false + }, + { + "id": "#c:foods/edible_when_placed", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/foods/bread.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/foods/bread.json new file mode 100644 index 000000000..7873bb3c3 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/foods/bread.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:bread" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/foods/cooked_fish.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/foods/cooked_fish.json new file mode 100644 index 000000000..96f56a960 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/foods/cooked_fish.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:cooked_cod" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/foods/cooked_meat.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/foods/cooked_meat.json new file mode 100644 index 000000000..1fbb43cce --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/foods/cooked_meat.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:cooked_porkchop" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/foods/cookie.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/foods/cookie.json new file mode 100644 index 000000000..a7c0dc91d --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/foods/cookie.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:cookie" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/foods/edible_when_placed.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/foods/edible_when_placed.json new file mode 100644 index 000000000..d1a45a922 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/foods/edible_when_placed.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:cake" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/foods/fruit.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/foods/fruit.json new file mode 100644 index 000000000..163db5c8b --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/foods/fruit.json @@ -0,0 +1,6 @@ +{ + "values": [ + "minecraft:apple", + "minecraft:golden_apple" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/foods/golden.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/foods/golden.json new file mode 100644 index 000000000..973c89422 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/foods/golden.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:golden_apple" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/foods/raw_fish.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/foods/raw_fish.json new file mode 100644 index 000000000..083be88ce --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/foods/raw_fish.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:cod" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/foods/raw_meat.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/foods/raw_meat.json new file mode 100644 index 000000000..6d2744349 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/foods/raw_meat.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:porkchop" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/foods/soup.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/foods/soup.json new file mode 100644 index 000000000..69f5dc612 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/foods/soup.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:mushroom_stew" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/foods/vegetable.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/foods/vegetable.json new file mode 100644 index 000000000..d6649e775 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/foods/vegetable.json @@ -0,0 +1,4 @@ +{ + "values": [ + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/gems.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/gems.json new file mode 100644 index 000000000..c3ae0cd74 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/gems.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#c:gems/diamond", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/gems/diamond.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/gems/diamond.json new file mode 100644 index 000000000..f44f30dd5 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/gems/diamond.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:diamond" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/glass_blocks.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/glass_blocks.json new file mode 100644 index 000000000..edc769b25 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/glass_blocks.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#c:glass_blocks/colorless", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/glass_blocks/colorless.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/glass_blocks/colorless.json new file mode 100644 index 000000000..ac8b5e508 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/glass_blocks/colorless.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:glass" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/grass_blocks.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/grass_blocks.json new file mode 100644 index 000000000..ce2108c7a --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/grass_blocks.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:grass_block" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/gravels.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/gravels.json new file mode 100644 index 000000000..f6968bff6 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/gravels.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:gravel" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/gunpowders.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/gunpowders.json new file mode 100644 index 000000000..d5835ce7f --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/gunpowders.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:gunpowder" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ingots.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ingots.json new file mode 100644 index 000000000..fdd8c8bc3 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ingots.json @@ -0,0 +1,12 @@ +{ + "values": [ + { + "id": "#c:ingots/iron", + "required": false + }, + { + "id": "#c:ingots/gold", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ingots/gold.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ingots/gold.json new file mode 100644 index 000000000..07e9f66a3 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ingots/gold.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:gold_ingot" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ingots/iron.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ingots/iron.json new file mode 100644 index 000000000..c656021bd --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ingots/iron.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:iron_ingot" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ladders.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ladders.json new file mode 100644 index 000000000..18735c86a --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ladders.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#c:ladders/wooden", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ladders/wooden.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ladders/wooden.json new file mode 100644 index 000000000..8aed27c0f --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ladders/wooden.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#c:ladders/wooden/oak", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ladders/wooden/oak.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ladders/wooden/oak.json new file mode 100644 index 000000000..f75f2a493 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ladders/wooden/oak.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:ladder" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/leathers.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/leathers.json new file mode 100644 index 000000000..1a7ac047c --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/leathers.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#c:leathers/cow", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/leathers/cow.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/leathers/cow.json new file mode 100644 index 000000000..71b797d35 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/leathers/cow.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:leather" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/leaves.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/leaves.json new file mode 100644 index 000000000..fb8b0a4cd --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/leaves.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:leaves" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/logs.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/logs.json new file mode 100644 index 000000000..7d753fa0e --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/logs.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:log" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/mushrooms.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/mushrooms.json new file mode 100644 index 000000000..380184392 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/mushrooms.json @@ -0,0 +1,12 @@ +{ + "values": [ + { + "id": "#c:mushrooms/brown", + "required": false + }, + { + "id": "#c:mushrooms/red", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/mushrooms/brown.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/mushrooms/brown.json new file mode 100644 index 000000000..3ad854c71 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/mushrooms/brown.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:brown_mushroom" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/mushrooms/red.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/mushrooms/red.json new file mode 100644 index 000000000..02bd559b4 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/mushrooms/red.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:red_mushroom" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/netherracks.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/netherracks.json new file mode 100644 index 000000000..daa9c6670 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/netherracks.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:netherrack" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/obsidians.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/obsidians.json new file mode 100644 index 000000000..6ec927ee0 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/obsidians.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#c:obsidians/normal", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/obsidians/normal.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/obsidians/normal.json new file mode 100644 index 000000000..170248454 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/obsidians/normal.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:obsidian" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ore_bearing_ground/netherrack.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ore_bearing_ground/netherrack.json new file mode 100644 index 000000000..daa9c6670 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ore_bearing_ground/netherrack.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:netherrack" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ore_bearing_ground/stone.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ore_bearing_ground/stone.json new file mode 100644 index 000000000..c2d7c79f3 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ore_bearing_ground/stone.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:stone" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ores.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ores.json new file mode 100644 index 000000000..c123df021 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ores.json @@ -0,0 +1,28 @@ +{ + "values": [ + { + "id": "#c:ores/coal", + "required": false + }, + { + "id": "#c:ores/diamond", + "required": false + }, + { + "id": "#c:ores/gold", + "required": false + }, + { + "id": "#c:ores/iron", + "required": false + }, + { + "id": "#c:ores/lapis", + "required": false + }, + { + "id": "#c:ores/redstone", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ores/coal.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ores/coal.json new file mode 100644 index 000000000..853f057b1 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ores/coal.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:coal_ore" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ores/diamond.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ores/diamond.json new file mode 100644 index 000000000..15fe2f020 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ores/diamond.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:diamond_ore" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ores/gold.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ores/gold.json new file mode 100644 index 000000000..f28475b5d --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ores/gold.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:gold_ore" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ores/iron.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ores/iron.json new file mode 100644 index 000000000..82b4cad74 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ores/iron.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:iron_ore" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ores/lapis.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ores/lapis.json new file mode 100644 index 000000000..6c8e743d4 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ores/lapis.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:lapis_ore" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ores/redstone.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ores/redstone.json new file mode 100644 index 000000000..3c1d149bd --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/ores/redstone.json @@ -0,0 +1,6 @@ +{ + "values": [ + "minecraft:redstone_ore", + "minecraft:redstone_ore_lit" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/planks.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/planks.json new file mode 100644 index 000000000..1eb54ebed --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/planks.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#c:planks/oak", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/planks/oak.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/planks/oak.json new file mode 100644 index 000000000..45a159b9d --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/planks/oak.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:oak_planks" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/pressure_plates.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/pressure_plates.json new file mode 100644 index 000000000..2894de153 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/pressure_plates.json @@ -0,0 +1,12 @@ +{ + "values": [ + { + "id": "#c:pressure_plates/wooden", + "required": false + }, + { + "id": "#c:pressure_plates/stone", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/pressure_plates/stone.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/pressure_plates/stone.json new file mode 100644 index 000000000..73a951ee7 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/pressure_plates/stone.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:stone_pressure_plate" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/pressure_plates/wooden.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/pressure_plates/wooden.json new file mode 100644 index 000000000..371016797 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/pressure_plates/wooden.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#c:pressure_plates/wooden/oak", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/pressure_plates/wooden/oak.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/pressure_plates/wooden/oak.json new file mode 100644 index 000000000..7c41ec38a --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/pressure_plates/wooden/oak.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:oak_pressure_plate" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/pumpkins.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/pumpkins.json new file mode 100644 index 000000000..89f031d14 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/pumpkins.json @@ -0,0 +1,6 @@ +{ + "values": [ + "#c:pumpkins/normal", + "#c:pumpkins/jack_o_lanterns" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/pumpkins/jack_o_lanterns.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/pumpkins/jack_o_lanterns.json new file mode 100644 index 000000000..598454b50 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/pumpkins/jack_o_lanterns.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:jack_o_lantern" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/pumpkins/normal.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/pumpkins/normal.json new file mode 100644 index 000000000..1a0f6d399 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/pumpkins/normal.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:carved_pumpkin" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/sands.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/sands.json new file mode 100644 index 000000000..6d89dd83c --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/sands.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#c:sands/normal", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/sands/normal.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/sands/normal.json new file mode 100644 index 000000000..af14f42f5 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/sands/normal.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:sand" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/sandstone/blocks.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/sandstone/blocks.json new file mode 100644 index 000000000..31d5c5a60 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/sandstone/blocks.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#c:sandstone/normal_blocks", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/sandstone/normal_blocks.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/sandstone/normal_blocks.json new file mode 100644 index 000000000..22418f38b --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/sandstone/normal_blocks.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:sandstone" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/saplings.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/saplings.json new file mode 100644 index 000000000..bec4643c3 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/saplings.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:sapling" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/seeds.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/seeds.json new file mode 100644 index 000000000..bc8edbd7a --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/seeds.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#c:seeds/wheat", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/seeds/wheat.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/seeds/wheat.json new file mode 100644 index 000000000..b90459c29 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/seeds/wheat.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:wheat_seeds" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/signs.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/signs.json new file mode 100644 index 000000000..1e9a02f2b --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/signs.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#c:signs/wooden", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/signs/wooden.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/signs/wooden.json new file mode 100644 index 000000000..fa8f3ce9c --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/signs/wooden.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#c:signs/wooden/oak", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/signs/wooden/oak.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/signs/wooden/oak.json new file mode 100644 index 000000000..8c16e8628 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/signs/wooden/oak.json @@ -0,0 +1,12 @@ +{ + "values": [ + { + "id": "#c:signs/wooden/oak/standing", + "required": false + }, + { + "id": "#c:signs/wooden/oak/wall", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/signs/wooden/oak/standing.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/signs/wooden/oak/standing.json new file mode 100644 index 000000000..e0213dea1 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/signs/wooden/oak/standing.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:oak_sign" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/signs/wooden/oak/wall.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/signs/wooden/oak/wall.json new file mode 100644 index 000000000..85e311742 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/signs/wooden/oak/wall.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:oak_wall_sign" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/slime_balls.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/slime_balls.json new file mode 100644 index 000000000..533c25d91 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/slime_balls.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:slime_ball" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/snow.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/snow.json new file mode 100644 index 000000000..49f75e369 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/snow.json @@ -0,0 +1,6 @@ +{ + "values": [ + "minecraft:snow", + "minecraft:snow_block" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/stairs.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/stairs.json new file mode 100644 index 000000000..ed43adf49 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/stairs.json @@ -0,0 +1,12 @@ +{ + "values": [ + { + "id": "#c:stairs/wooden", + "required": false + }, + { + "id": "#c:stairs/cobblestone", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/stairs/cobblestone.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/stairs/cobblestone.json new file mode 100644 index 000000000..e758f5a2f --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/stairs/cobblestone.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:cobblestone_stairs" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/stairs/wooden.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/stairs/wooden.json new file mode 100644 index 000000000..dad6da197 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/stairs/wooden.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#c:stairs/wooden/oak", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/stairs/wooden/oak.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/stairs/wooden/oak.json new file mode 100644 index 000000000..075e2b35d --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/stairs/wooden/oak.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:oak_stairs" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/sticks.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/sticks.json new file mode 100644 index 000000000..75eaab408 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/sticks.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#c:sticks/wooden", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/sticks/wooden.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/sticks/wooden.json new file mode 100644 index 000000000..019b63dd3 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/sticks/wooden.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:stick" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/stones.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/stones.json new file mode 100644 index 000000000..c2d7c79f3 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/stones.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:stone" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/storage_blocks.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/storage_blocks.json new file mode 100644 index 000000000..5d1b01ea2 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/storage_blocks.json @@ -0,0 +1,8 @@ +{ + "values": [ + "#c:storage_blocks/diamond", + "#c:storage_blocks/gold", + "#c:storage_blocks/iron", + "#c:storage_blocks/lapis" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/storage_blocks/diamond.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/storage_blocks/diamond.json new file mode 100644 index 000000000..acd7f52de --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/storage_blocks/diamond.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:diamond_block" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/storage_blocks/gold.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/storage_blocks/gold.json new file mode 100644 index 000000000..546dde03c --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/storage_blocks/gold.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:gold_block" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/storage_blocks/iron.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/storage_blocks/iron.json new file mode 100644 index 000000000..01fb2965f --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/storage_blocks/iron.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:iron_block" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/storage_blocks/lapis.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/storage_blocks/lapis.json new file mode 100644 index 000000000..f4ca82bbd --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/storage_blocks/lapis.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:lapis_block" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/strings.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/strings.json new file mode 100644 index 000000000..d018256cf --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/strings.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:string" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools.json new file mode 100644 index 000000000..8e29cf096 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools.json @@ -0,0 +1,24 @@ +{ + "values": [ + { + "id": "#c:tools/axes", + "required": false + }, + { + "id": "#c:tools/hoes", + "required": false + }, + { + "id": "#c:tools/pickaxes", + "required": false + }, + { + "id": "#c:tools/shovels", + "required": false + }, + { + "id": "#c:tools/swords", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/axes.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/axes.json new file mode 100644 index 000000000..78c83bf4e --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/axes.json @@ -0,0 +1,24 @@ +{ + "values": [ + { + "id": "#c:tools/axes/wooden", + "required": false + }, + { + "id": "#c:tools/axes/stone", + "required": false + }, + { + "id": "#c:tools/axes/iron", + "required": false + }, + { + "id": "#c:tools/axes/gold", + "required": false + }, + { + "id": "#c:tools/axes/diamond", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/axes/diamond.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/axes/diamond.json new file mode 100644 index 000000000..553fb8467 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/axes/diamond.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:diamond_axe" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/axes/gold.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/axes/gold.json new file mode 100644 index 000000000..e301b8f9c --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/axes/gold.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:golden_axe" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/axes/iron.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/axes/iron.json new file mode 100644 index 000000000..5aa9f144c --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/axes/iron.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:iron_axe" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/axes/stone.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/axes/stone.json new file mode 100644 index 000000000..f1e53bdf1 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/axes/stone.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:stone_axe" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/axes/wooden.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/axes/wooden.json new file mode 100644 index 000000000..cf7bee90f --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/axes/wooden.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:wooden_axe" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/bows.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/bows.json new file mode 100644 index 000000000..a1c8a443d --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/bows.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:bow" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/hoes.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/hoes.json new file mode 100644 index 000000000..9bc9ca9c3 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/hoes.json @@ -0,0 +1,24 @@ +{ + "values": [ + { + "id": "#c:tools/hoes/wooden", + "required": false + }, + { + "id": "#c:tools/hoes/stone", + "required": false + }, + { + "id": "#c:tools/hoes/iron", + "required": false + }, + { + "id": "#c:tools/hoes/gold", + "required": false + }, + { + "id": "#c:tools/hoes/diamond", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/hoes/diamond.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/hoes/diamond.json new file mode 100644 index 000000000..42ab99367 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/hoes/diamond.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:diamond_hoe" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/hoes/gold.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/hoes/gold.json new file mode 100644 index 000000000..32c3b6452 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/hoes/gold.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:golden_hoe" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/hoes/iron.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/hoes/iron.json new file mode 100644 index 000000000..cb14e6452 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/hoes/iron.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:iron_hoe" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/hoes/stone.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/hoes/stone.json new file mode 100644 index 000000000..f1aab833b --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/hoes/stone.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:stone_hoe" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/hoes/wooden.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/hoes/wooden.json new file mode 100644 index 000000000..bda3418de --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/hoes/wooden.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:wooden_hoe" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/igniters.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/igniters.json new file mode 100644 index 000000000..808aaa93d --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/igniters.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:flint_and_steel" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/pickaxes.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/pickaxes.json new file mode 100644 index 000000000..ed896e661 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/pickaxes.json @@ -0,0 +1,24 @@ +{ + "values": [ + { + "id": "#c:tools/pickaxes/wooden", + "required": false + }, + { + "id": "#c:tools/pickaxes/stone", + "required": false + }, + { + "id": "#c:tools/pickaxes/iron", + "required": false + }, + { + "id": "#c:tools/pickaxes/gold", + "required": false + }, + { + "id": "#c:tools/pickaxes/diamond", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/pickaxes/diamond.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/pickaxes/diamond.json new file mode 100644 index 000000000..509b60292 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/pickaxes/diamond.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:diamond_pickaxe" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/pickaxes/gold.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/pickaxes/gold.json new file mode 100644 index 000000000..7b75d5c9c --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/pickaxes/gold.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:golden_pickaxe" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/pickaxes/iron.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/pickaxes/iron.json new file mode 100644 index 000000000..d36d7dff0 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/pickaxes/iron.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:iron_pickaxe" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/pickaxes/stone.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/pickaxes/stone.json new file mode 100644 index 000000000..9f7b7591c --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/pickaxes/stone.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:stone_pickaxe" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/pickaxes/wooden.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/pickaxes/wooden.json new file mode 100644 index 000000000..eae984c7e --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/pickaxes/wooden.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:wooden_pickaxe" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/shears.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/shears.json new file mode 100644 index 000000000..240007816 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/shears.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:shears" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/shovels.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/shovels.json new file mode 100644 index 000000000..c1b92f462 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/shovels.json @@ -0,0 +1,24 @@ +{ + "values": [ + { + "id": "#c:tools/shovels/wooden", + "required": false + }, + { + "id": "#c:tools/shovels/stone", + "required": false + }, + { + "id": "#c:tools/shovels/iron", + "required": false + }, + { + "id": "#c:tools/shovels/gold", + "required": false + }, + { + "id": "#c:tools/shovels/diamond", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/shovels/diamond.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/shovels/diamond.json new file mode 100644 index 000000000..36ca4aea2 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/shovels/diamond.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:diamond_shovel" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/shovels/gold.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/shovels/gold.json new file mode 100644 index 000000000..fbab6702d --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/shovels/gold.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:golden_shovel" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/shovels/iron.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/shovels/iron.json new file mode 100644 index 000000000..3ebdc367d --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/shovels/iron.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:iron_shovel" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/shovels/stone.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/shovels/stone.json new file mode 100644 index 000000000..5bb66e730 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/shovels/stone.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:stone_shovel" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/shovels/wooden.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/shovels/wooden.json new file mode 100644 index 000000000..90efafeea --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/shovels/wooden.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:wooden_shovel" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/swords.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/swords.json new file mode 100644 index 000000000..01d7f3fd4 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/swords.json @@ -0,0 +1,24 @@ +{ + "values": [ + { + "id": "#c:tools/swords/wooden", + "required": false + }, + { + "id": "#c:tools/swords/stone", + "required": false + }, + { + "id": "#c:tools/swords/iron", + "required": false + }, + { + "id": "#c:tools/swords/gold", + "required": false + }, + { + "id": "#c:tools/swords/diamond", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/swords/diamond.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/swords/diamond.json new file mode 100644 index 000000000..761d0cc2e --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/swords/diamond.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:diamond_sword" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/swords/gold.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/swords/gold.json new file mode 100644 index 000000000..24afbe2e0 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/swords/gold.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:golden_sword" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/swords/iron.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/swords/iron.json new file mode 100644 index 000000000..9424ba7cf --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/swords/iron.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:iron_sword" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/swords/stone.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/swords/stone.json new file mode 100644 index 000000000..4212b9110 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/swords/stone.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:stone_sword" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/swords/wooden.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/swords/wooden.json new file mode 100644 index 000000000..8acc04a8a --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/tools/swords/wooden.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:wooden_sword" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/trapdoors.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/trapdoors.json new file mode 100644 index 000000000..852b6970a --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/trapdoors.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#c:trapdoors/wooden", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/trapdoors/wooden.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/trapdoors/wooden.json new file mode 100644 index 000000000..594e83e04 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/trapdoors/wooden.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#c:trapdoors/wooden/oak", + "required": false + } + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/trapdoors/wooden/oak.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/trapdoors/wooden/oak.json new file mode 100644 index 000000000..0e9914282 --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/trapdoors/wooden/oak.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:oak_trapdoor" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/wools.json b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/wools.json new file mode 100644 index 000000000..ad2d8e50f --- /dev/null +++ b/station-vanilla-fix-v0/src/main/resources/data/c/stationapi/tags/items/wools.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:wool" + ] +} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/minecraft/stationapi/tags/blocks/logs.json b/station-vanilla-fix-v0/src/main/resources/data/minecraft/stationapi/tags/blocks/logs.json deleted file mode 100644 index df3d3b893..000000000 --- a/station-vanilla-fix-v0/src/main/resources/data/minecraft/stationapi/tags/blocks/logs.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "#logs_that_burn" - ] -} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/minecraft/stationapi/tags/blocks/rails.json b/station-vanilla-fix-v0/src/main/resources/data/minecraft/stationapi/tags/blocks/rails.json deleted file mode 100644 index 7bcb3f53b..000000000 --- a/station-vanilla-fix-v0/src/main/resources/data/minecraft/stationapi/tags/blocks/rails.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "values": [ - "rail", - "powered_rail", - "detector_rail" - ] -} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/minecraft/stationapi/tags/items/logs.json b/station-vanilla-fix-v0/src/main/resources/data/minecraft/stationapi/tags/items/logs.json deleted file mode 100644 index df3d3b893..000000000 --- a/station-vanilla-fix-v0/src/main/resources/data/minecraft/stationapi/tags/items/logs.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "#logs_that_burn" - ] -} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/minecraft/stationapi/tags/items/planks.json b/station-vanilla-fix-v0/src/main/resources/data/minecraft/stationapi/tags/items/planks.json deleted file mode 100644 index 56a4c1d23..000000000 --- a/station-vanilla-fix-v0/src/main/resources/data/minecraft/stationapi/tags/items/planks.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "oak_planks" - ] -} \ No newline at end of file diff --git a/station-vanilla-fix-v0/src/main/resources/data/minecraft/stationapi/tags/items/saplings.json b/station-vanilla-fix-v0/src/main/resources/data/minecraft/stationapi/tags/items/saplings.json deleted file mode 100644 index 074539787..000000000 --- a/station-vanilla-fix-v0/src/main/resources/data/minecraft/stationapi/tags/items/saplings.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "sapling" - ] -} \ No newline at end of file From 31cf518ce83db0f4b6732648bd188b0b7772327c Mon Sep 17 00:00:00 2001 From: mine_diver Date: Wed, 27 May 2026 22:20:39 +0500 Subject: [PATCH 43/43] Change version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 5eb303d5b..6a91b6790 100644 --- a/gradle.properties +++ b/gradle.properties @@ -22,7 +22,7 @@ fabric.loom.multiProjectOptimisation=true spasm_version = 0.2.2 # Mod Properties - mod_version = 2.0.0-alpha.5.4 + mod_version = 2.0.0-alpha.6 maven_group = net.modificationstation archives_base_name = StationAPI