From b513ab1262056c7d02ebba14776f3c035ec5c6cc Mon Sep 17 00:00:00 2001 From: koka Date: Mon, 31 Aug 2026 11:45:46 +0200 Subject: [PATCH 1/5] fix(anotherworld): require a vault before raids --- .../sanctuary26/anotherworld/vault/VaultData.java | 12 +++++++++++- .../anotherworld/vault/VaultDrillingService.java | 11 +++++++++++ .../anotherworld/vault/VaultRulesSmoke.java | 10 ++++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/anotherworld/src/main/java/fr/koka99cab/sanctuary26/anotherworld/vault/VaultData.java b/anotherworld/src/main/java/fr/koka99cab/sanctuary26/anotherworld/vault/VaultData.java index 3303d7d..978f5e1 100644 --- a/anotherworld/src/main/java/fr/koka99cab/sanctuary26/anotherworld/vault/VaultData.java +++ b/anotherworld/src/main/java/fr/koka99cab/sanctuary26/anotherworld/vault/VaultData.java @@ -113,6 +113,12 @@ public final class VaultData extends SavedData { && address.pos() == center.asLong() && address.owner().equals(ownerId)); } + public boolean hasRegisteredVault(UUID owner) { + if (owner == null) return false; + String ownerId = owner.toString(); + return vaults.stream().anyMatch(address -> address.owner().equals(ownerId)); + } + public void unregisterNear(ServerLevel level, BlockPos member) { String dimension = dimension(level); boolean changed = vaults.removeIf(address -> { @@ -163,7 +169,7 @@ public final class VaultData extends SavedData { /** Transfers the exact 20% raid share into the attacker's unlimited balances without item spam. */ public long transferRaid(UUID owner, UUID attacker) { - if (owner == null || attacker == null || owner.equals(attacker)) return 0L; + if (!canReceiveRaidLoot(owner, attacker, hasRegisteredVault(attacker))) return 0L; Account source = accounts.get(owner); if (source == null) return 0L; Account target = accounts.computeIfAbsent(attacker, ignored -> new Account()); @@ -180,6 +186,10 @@ public final class VaultData extends SavedData { return total; } + static boolean canReceiveRaidLoot(UUID owner, UUID attacker, boolean attackerHasRegisteredVault) { + return owner != null && attacker != null && !owner.equals(attacker) && attackerHasRegisteredVault; + } + public long protectionRemaining(UUID owner, long gameTime) { Account account = accounts.get(owner); return account == null ? 0L : Math.max(0L, account.protectedUntil - gameTime); diff --git a/anotherworld/src/main/java/fr/koka99cab/sanctuary26/anotherworld/vault/VaultDrillingService.java b/anotherworld/src/main/java/fr/koka99cab/sanctuary26/anotherworld/vault/VaultDrillingService.java index 74d71b8..f079ced 100644 --- a/anotherworld/src/main/java/fr/koka99cab/sanctuary26/anotherworld/vault/VaultDrillingService.java +++ b/anotherworld/src/main/java/fr/koka99cab/sanctuary26/anotherworld/vault/VaultDrillingService.java @@ -48,6 +48,10 @@ public final class VaultDrillingService { attacker.sendSystemMessage(Component.translatable("message.anotherworld.safe_vault.inactive")); return false; } + if (!data.hasRegisteredVault(attacker.getUUID())) { + attacker.sendSystemMessage(Component.translatable("message.anotherworld.safe_vault.raid_requires_vault")); + return false; + } if (!data.hasContents(formed.owner())) { attacker.sendSystemMessage(Component.translatable("message.anotherworld.safe_vault.empty")); return false; @@ -104,6 +108,13 @@ public final class VaultDrillingService { attacker.stopUsingItem(); return; } + if (!VaultData.get(level.getServer()).hasRegisteredVault(attacker.getUUID())) { + cancel(attacker, false); + attacker.sendOverlayMessage(Component.translatable( + "message.anotherworld.safe_vault.raid_requires_vault")); + attacker.stopUsingItem(); + return; + } int elapsed = session.elapsedTicks() + 1; Session progressed = session.withElapsed(elapsed); diff --git a/anotherworld/src/test/java/fr/koka99cab/sanctuary26/anotherworld/vault/VaultRulesSmoke.java b/anotherworld/src/test/java/fr/koka99cab/sanctuary26/anotherworld/vault/VaultRulesSmoke.java index 34a8c0f..7ee23fd 100644 --- a/anotherworld/src/test/java/fr/koka99cab/sanctuary26/anotherworld/vault/VaultRulesSmoke.java +++ b/anotherworld/src/test/java/fr/koka99cab/sanctuary26/anotherworld/vault/VaultRulesSmoke.java @@ -1,5 +1,7 @@ package fr.koka99cab.sanctuary26.anotherworld.vault; +import java.util.UUID; + public final class VaultRulesSmoke { private VaultRulesSmoke() { } @@ -55,6 +57,14 @@ public final class VaultRulesSmoke { require(VaultRules.raidLoot(Integer.MAX_VALUE) == 429_496_730L, "32-bit balance raid"); require(VaultRules.raidLoot(Long.MAX_VALUE) == 1_844_674_407_370_955_162L, "64-bit balance raid without overflow"); + UUID owner = UUID.fromString("00000000-0000-0000-0000-000000000001"); + UUID attacker = UUID.fromString("00000000-0000-0000-0000-000000000002"); + require(!VaultData.canReceiveRaidLoot(owner, attacker, false), + "an attacker without a registered vault cannot receive raid loot"); + require(VaultData.canReceiveRaidLoot(owner, attacker, true), + "an attacker with a registered vault can receive raid loot"); + require(!VaultData.canReceiveRaidLoot(owner, owner, true), + "a vault owner cannot receive loot from their own vault"); require(VaultRules.saturatingAdd(Long.MAX_VALUE - 2L, 10L) == Long.MAX_VALUE, "balance saturation without overflow"); for (long balance : new long[] {0L, Integer.MAX_VALUE, (long) Integer.MAX_VALUE + 1L, Long.MAX_VALUE}) { -- 2.54.0 From 66944ec4929e0b5f5fe86fb07ae2c427a3b78ba5 Mon Sep 17 00:00:00 2001 From: koka Date: Mon, 31 Aug 2026 11:46:02 +0200 Subject: [PATCH 2/5] fix(companions): suppress loot and quest progress --- .../onlyfun/loot/OnlyFunLootboxDrops.java | 4 +++- .../api/entity/SanctuaryEntityPolicy.java | 21 ++++++++++++++++++ .../gameplay/SanctuaryCompanions.java | 3 ++- .../sanctuary/mixin/EntityCompanionMixin.java | 4 ++-- .../mixin/LivingEntityCompanionMixin.java | 20 +++++++++++++++++ .../sanctuary/shop/QuestBoardService.java | 4 +++- .../sanctuary/shop/QuestRequestService.java | 4 +++- .../src/main/resources/sanctuary.mixins.json | 1 + .../entity/SanctuaryEntityPolicySmoke.java | 22 +++++++++++++++++++ 9 files changed, 77 insertions(+), 6 deletions(-) create mode 100644 sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/api/entity/SanctuaryEntityPolicy.java create mode 100644 sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/mixin/LivingEntityCompanionMixin.java create mode 100644 sanctuary/src/test/java/fr/koka99cab/sanctuary26/sanctuary/api/entity/SanctuaryEntityPolicySmoke.java diff --git a/onlyfun/src/main/java/fr/koka99cab/sanctuary26/onlyfun/loot/OnlyFunLootboxDrops.java b/onlyfun/src/main/java/fr/koka99cab/sanctuary26/onlyfun/loot/OnlyFunLootboxDrops.java index cefb53a..e4ad55d 100644 --- a/onlyfun/src/main/java/fr/koka99cab/sanctuary26/onlyfun/loot/OnlyFunLootboxDrops.java +++ b/onlyfun/src/main/java/fr/koka99cab/sanctuary26/onlyfun/loot/OnlyFunLootboxDrops.java @@ -2,6 +2,7 @@ package fr.koka99cab.sanctuary26.onlyfun.loot; import fr.koka99cab.sanctuary26.onlyfun.OnlyFunMod; import fr.koka99cab.sanctuary26.onlyfun.registry.OnlyFunRegistries; +import fr.koka99cab.sanctuary26.sanctuary.api.entity.SanctuaryEntityPolicy; import net.fabricmc.fabric.api.entity.event.v1.ServerLivingEntityEvents; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; @@ -38,7 +39,8 @@ public final class OnlyFunLootboxDrops { } private static void afterDeath(LivingEntity entity, DamageSource source) { - if (!(entity instanceof Mob mob) || !(entity.level() instanceof ServerLevel level)) return; + if (SanctuaryEntityPolicy.isTemporaryCompanion(entity) + || !(entity instanceof Mob mob) || !(entity.level() instanceof ServerLevel level)) return; ServerPlayer killer = playerKiller(entity, source); if (killer == null || killer.isSpectator()) return; diff --git a/sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/api/entity/SanctuaryEntityPolicy.java b/sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/api/entity/SanctuaryEntityPolicy.java new file mode 100644 index 0000000..a0e447e --- /dev/null +++ b/sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/api/entity/SanctuaryEntityPolicy.java @@ -0,0 +1,21 @@ +package fr.koka99cab.sanctuary26.sanctuary.api.entity; + +import java.util.Set; +import net.minecraft.world.entity.Entity; + +/** Public cross-module policy for Sanctuary-owned temporary gameplay entities. */ +public final class SanctuaryEntityPolicy { + public static final String TEMPORARY_COMPANION_TAG = "sanctuary_companion"; + + private SanctuaryEntityPolicy() { + } + + /** Temporary companions must never yield loot, experience or quest progress. */ + public static boolean isTemporaryCompanion(Entity entity) { + return entity != null && containsTemporaryCompanionTag(entity.entityTags()); + } + + static boolean containsTemporaryCompanionTag(Set tags) { + return tags != null && tags.contains(TEMPORARY_COMPANION_TAG); + } +} diff --git a/sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/gameplay/SanctuaryCompanions.java b/sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/gameplay/SanctuaryCompanions.java index 7cb169a..9006215 100644 --- a/sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/gameplay/SanctuaryCompanions.java +++ b/sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/gameplay/SanctuaryCompanions.java @@ -1,6 +1,7 @@ package fr.koka99cab.sanctuary26.sanctuary.gameplay; import fr.koka99cab.sanctuary26.sanctuary.SanctuaryMod; +import fr.koka99cab.sanctuary26.sanctuary.api.entity.SanctuaryEntityPolicy; import java.util.HashMap; import java.util.Map; import java.util.UUID; @@ -24,7 +25,7 @@ import net.minecraft.world.item.SpawnEggItem; /** Server-owned lifecycle for the one companion equipped by each player. */ public final class SanctuaryCompanions { - public static final String ENTITY_TAG = "sanctuary_companion"; + public static final String ENTITY_TAG = SanctuaryEntityPolicy.TEMPORARY_COMPANION_TAG; private static final String OWNER_TAG_PREFIX = "sanctuary_companion_owner_"; private static final Identifier MINI_SCALE = SanctuaryMod.id("companion/mini_scale"); private static final double TELEPORT_DISTANCE_SQUARED = 144.0D; diff --git a/sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/mixin/EntityCompanionMixin.java b/sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/mixin/EntityCompanionMixin.java index 18d84dd..e43fd65 100644 --- a/sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/mixin/EntityCompanionMixin.java +++ b/sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/mixin/EntityCompanionMixin.java @@ -1,6 +1,6 @@ package fr.koka99cab.sanctuary26.sanctuary.mixin; -import fr.koka99cab.sanctuary26.sanctuary.gameplay.SanctuaryCompanions; +import fr.koka99cab.sanctuary26.sanctuary.api.entity.SanctuaryEntityPolicy; import net.minecraft.world.entity.Entity; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -12,7 +12,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; abstract class EntityCompanionMixin { @Inject(method = "shouldBeSaved", at = @At("HEAD"), cancellable = true) private void sanctuary$doNotSaveTemporaryCompanion(CallbackInfoReturnable cir) { - if (((Entity) (Object) this).entityTags().contains(SanctuaryCompanions.ENTITY_TAG)) { + if (SanctuaryEntityPolicy.isTemporaryCompanion((Entity) (Object) this)) { cir.setReturnValue(false); } } diff --git a/sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/mixin/LivingEntityCompanionMixin.java b/sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/mixin/LivingEntityCompanionMixin.java new file mode 100644 index 0000000..70ea678 --- /dev/null +++ b/sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/mixin/LivingEntityCompanionMixin.java @@ -0,0 +1,20 @@ +package fr.koka99cab.sanctuary26.sanctuary.mixin; + +import fr.koka99cab.sanctuary26.sanctuary.api.entity.SanctuaryEntityPolicy; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.entity.LivingEntity; +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; + +/** Temporary companions can be defeated, but never become a renewable loot or XP source. */ +@Mixin(LivingEntity.class) +abstract class LivingEntityCompanionMixin { + @Inject(method = "dropAllDeathLoot", at = @At("HEAD"), cancellable = true) + private void sanctuary$suppressTemporaryCompanionLoot(ServerLevel level, DamageSource source, + CallbackInfo ci) { + if (SanctuaryEntityPolicy.isTemporaryCompanion((LivingEntity) (Object) this)) ci.cancel(); + } +} diff --git a/sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/shop/QuestBoardService.java b/sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/shop/QuestBoardService.java index 1eb5495..62cecaa 100644 --- a/sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/shop/QuestBoardService.java +++ b/sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/shop/QuestBoardService.java @@ -1,5 +1,6 @@ package fr.koka99cab.sanctuary26.sanctuary.shop; +import fr.koka99cab.sanctuary26.sanctuary.api.entity.SanctuaryEntityPolicy; import fr.koka99cab.sanctuary26.sanctuary.api.inventory.SanctuaryPlayerInventoryView; import fr.koka99cab.sanctuary26.sanctuary.registry.SanctuaryRegistries; import java.time.Duration; @@ -199,7 +200,8 @@ public final class QuestBoardService { } private static void afterDeath(LivingEntity entity, DamageSource source) { - if (!(entity.level() instanceof ServerLevel level)) return; + if (SanctuaryEntityPolicy.isTemporaryCompanion(entity) + || !(entity.level() instanceof ServerLevel level)) return; ServerPlayer player = killer(entity, source); if (player == null || player.isSpectator()) return; Identifier killed = BuiltInRegistries.ENTITY_TYPE.getKey(entity.getType()); diff --git a/sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/shop/QuestRequestService.java b/sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/shop/QuestRequestService.java index 2fbf388..7385642 100644 --- a/sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/shop/QuestRequestService.java +++ b/sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/shop/QuestRequestService.java @@ -1,5 +1,6 @@ package fr.koka99cab.sanctuary26.sanctuary.shop; +import fr.koka99cab.sanctuary26.sanctuary.api.entity.SanctuaryEntityPolicy; import fr.koka99cab.sanctuary26.sanctuary.api.inventory.SanctuaryPlayerInventoryView; import fr.koka99cab.sanctuary26.sanctuary.network.QuestRequestAcceptPayload; import fr.koka99cab.sanctuary26.sanctuary.network.QuestRequestConfirmPayload; @@ -323,7 +324,8 @@ public final class QuestRequestService { } private static void afterDeath(LivingEntity entity, DamageSource source) { - if (!(entity.level() instanceof ServerLevel level)) return; + if (SanctuaryEntityPolicy.isTemporaryCompanion(entity) + || !(entity.level() instanceof ServerLevel level)) return; ServerPlayer killer = killer(entity, source); if (killer == null || killer.isSpectator()) return; Identifier killedType = BuiltInRegistries.ENTITY_TYPE.getKey(entity.getType()); diff --git a/sanctuary/src/main/resources/sanctuary.mixins.json b/sanctuary/src/main/resources/sanctuary.mixins.json index be7239a..03751ad 100644 --- a/sanctuary/src/main/resources/sanctuary.mixins.json +++ b/sanctuary/src/main/resources/sanctuary.mixins.json @@ -11,6 +11,7 @@ "InventoryMixin", "InventoryMenuMixin", "ItemTooltipMixin", + "LivingEntityCompanionMixin", "PlayerOverflowMixin", "SlotMixin", "ServerGamePacketListenerMixin" diff --git a/sanctuary/src/test/java/fr/koka99cab/sanctuary26/sanctuary/api/entity/SanctuaryEntityPolicySmoke.java b/sanctuary/src/test/java/fr/koka99cab/sanctuary26/sanctuary/api/entity/SanctuaryEntityPolicySmoke.java new file mode 100644 index 0000000..416d1c4 --- /dev/null +++ b/sanctuary/src/test/java/fr/koka99cab/sanctuary26/sanctuary/api/entity/SanctuaryEntityPolicySmoke.java @@ -0,0 +1,22 @@ +package fr.koka99cab.sanctuary26.sanctuary.api.entity; + +import java.util.Set; + +public final class SanctuaryEntityPolicySmoke { + private SanctuaryEntityPolicySmoke() { + } + + public static void main(String[] arguments) { + require(SanctuaryEntityPolicy.containsTemporaryCompanionTag( + Set.of(SanctuaryEntityPolicy.TEMPORARY_COMPANION_TAG)), + "temporary companion tag was not recognized"); + require(!SanctuaryEntityPolicy.containsTemporaryCompanionTag(Set.of("minecraft:mob")), + "ordinary mob was classified as a temporary companion"); + require(!SanctuaryEntityPolicy.containsTemporaryCompanionTag(Set.of()), + "untagged mob was classified as a temporary companion"); + } + + private static void require(boolean value, String message) { + if (!value) throw new AssertionError(message); + } +} -- 2.54.0 From 6fcc56552c565e952b8da054dd3b797bb5a62327 Mon Sep 17 00:00:00 2001 From: koka Date: Mon, 31 Aug 2026 11:46:17 +0200 Subject: [PATCH 3/5] fix(canaplia): preserve crop variants through growth --- .../canaplia/CanapliaHarvestService.java | 6 ++-- .../canaplia/CanapliaVariantLifecycle.java | 36 +++++++++++++++++++ .../canaplia/block/CanapliaHempCropBlock.java | 23 ++++++++---- .../canaplia/block/CanapliaHempTopBlock.java | 5 ++- .../item/CanapliaVariantBlockItem.java | 12 +++++-- .../canaplia/CanapliaGameplaySmoke.java | 16 +++++++++ 6 files changed, 86 insertions(+), 12 deletions(-) create mode 100644 itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/CanapliaVariantLifecycle.java diff --git a/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/CanapliaHarvestService.java b/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/CanapliaHarvestService.java index 7ffda83..c5fb687 100644 --- a/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/CanapliaHarvestService.java +++ b/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/CanapliaHarvestService.java @@ -34,7 +34,8 @@ public final class CanapliaHarvestService { public static void onMatureHarvest(ServerLevel level, ServerPlayer player, BlockPos pos, BlockState state) { if (!state.is(CanapliaContent.HEMP_CROP) || !CanapliaContent.HEMP_CROP.isMaxAge(state)) return; - CanapliaVariantKey parent = state.getValue(CanapliaHempCropBlock.VARIANT); + CanapliaVariantKey parent = CanapliaVariantLifecycle.harvestedFromPlant( + state.getValue(CanapliaHempCropBlock.VARIANT)); CanapliaKnowledge.discover(player, parent, "harvest"); ClimateCropForaging.CropClimate climate = ClimateCropForaging.climate(level.getBiome(pos)); AmbianceLunarHarvestApi.Conditions lunar = AmbianceLunarHarvestApi.evaluate(level, pos); @@ -65,7 +66,8 @@ public final class CanapliaHarvestService { if (pos.equals(center)) continue; BlockState state = level.getBlockState(pos); if (state.is(CanapliaContent.HEMP_CROP) && CanapliaContent.HEMP_CROP.isMaxAge(state)) { - variants.add(state.getValue(CanapliaHempCropBlock.VARIANT)); + variants.add(CanapliaVariantLifecycle.harvestedFromPlant( + state.getValue(CanapliaHempCropBlock.VARIANT))); } } return Set.copyOf(variants); diff --git a/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/CanapliaVariantLifecycle.java b/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/CanapliaVariantLifecycle.java new file mode 100644 index 0000000..5167ef3 --- /dev/null +++ b/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/CanapliaVariantLifecycle.java @@ -0,0 +1,36 @@ +package fr.koka99cab.sanctuary26.itsalive.canaplia; + +/** Stable variant hand-off across placement, growth, block-state persistence and harvest. */ +public final class CanapliaVariantLifecycle { + private CanapliaVariantLifecycle() { + } + + public static CanapliaVariantKey plantedFromSeed(CanapliaVariantKey seedVariant) { + return require(seedVariant); + } + + public static CanapliaVariantKey afterGrowth(CanapliaVariantKey currentVariant) { + return require(currentVariant); + } + + public static CanapliaVariantKey upperFromLower(CanapliaVariantKey lowerVariant) { + return require(lowerVariant); + } + + public static CanapliaVariantKey harvestedFromPlant(CanapliaVariantKey plantVariant) { + return require(plantVariant); + } + + public static String persistedKey(CanapliaVariantKey variant) { + return require(variant).key(); + } + + public static CanapliaVariantKey fromPersistedKey(String key) { + return CanapliaVariantKey.byKey(key).orElse(CanapliaVariantKey.COMMON); + } + + private static CanapliaVariantKey require(CanapliaVariantKey variant) { + if (variant == null) throw new IllegalArgumentException("Canaplia variant cannot be null"); + return variant; + } +} diff --git a/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/block/CanapliaHempCropBlock.java b/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/block/CanapliaHempCropBlock.java index 1a32bae..920161c 100644 --- a/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/block/CanapliaHempCropBlock.java +++ b/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/block/CanapliaHempCropBlock.java @@ -2,6 +2,7 @@ package fr.koka99cab.sanctuary26.itsalive.canaplia.block; import fr.koka99cab.sanctuary26.itsalive.canaplia.CanapliaContent; import fr.koka99cab.sanctuary26.itsalive.canaplia.CanapliaHarvestService; +import fr.koka99cab.sanctuary26.itsalive.canaplia.CanapliaVariantLifecycle; import fr.koka99cab.sanctuary26.itsalive.canaplia.CanapliaVariantKey; import net.minecraft.core.BlockPos; import net.minecraft.server.level.ServerLevel; @@ -43,19 +44,28 @@ public final class CanapliaHempCropBlock extends CropBlock { @Override protected ItemStack getCloneItemStack(LevelReader level, BlockPos pos, BlockState state, boolean includeData) { - return new ItemStack(CanapliaContent.family(state.getValue(VARIANT)).seeds()); + CanapliaVariantKey variant = CanapliaVariantLifecycle.harvestedFromPlant(state.getValue(VARIANT)); + return new ItemStack(CanapliaContent.family(variant).seeds()); } @Override protected void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { - super.randomTick(state, level, pos, random); - synchronizeUpper(level, pos, level.getBlockState(pos)); + if (level.getRawBrightness(pos, 0) < 9) return; + int age = getAge(state); + if (age >= getMaxAge()) return; + float speed = getGrowthSpeed(this, level, pos); + if (random.nextInt((int) (25.0F / speed) + 1) != 0) return; + BlockState grown = state.setValue(AGE, age + 1).setValue(VARIANT, + CanapliaVariantLifecycle.afterGrowth(state.getValue(VARIANT))); + level.setBlock(pos, grown, Block.UPDATE_CLIENTS); + synchronizeUpper(level, pos, grown); } @Override public void growCrops(Level level, BlockPos pos, BlockState state) { int age = Math.min(getMaxAge(), getAge(state) + getBonemealAgeIncrease(level)); - BlockState grown = state.setValue(AGE, age); + BlockState grown = state.setValue(AGE, age).setValue(VARIANT, + CanapliaVariantLifecycle.afterGrowth(state.getValue(VARIANT))); level.setBlock(pos, grown, Block.UPDATE_CLIENTS); synchronizeUpper(level, pos, grown); } @@ -78,7 +88,7 @@ public final class CanapliaHempCropBlock extends CropBlock { if (!(level instanceof ServerLevel serverLevel) || !(player instanceof ServerPlayer serverPlayer)) { return InteractionResult.FAIL; } - CanapliaVariantKey variant = state.getValue(VARIANT); + CanapliaVariantKey variant = CanapliaVariantLifecycle.harvestedFromPlant(state.getValue(VARIANT)); Block.popResource(serverLevel, pos, new ItemStack(CanapliaContent.family(variant).bud(), 1 + serverLevel.getRandom().nextInt(3))); CanapliaHarvestService.onMatureHarvest(serverLevel, serverPlayer, pos, state); @@ -97,7 +107,8 @@ public final class CanapliaHempCropBlock extends CropBlock { if (getAge(state) >= UPPER_START_AGE) { if (aboveState.isAir() || aboveState.is(CanapliaContent.HEMP_TOP)) { level.setBlock(above, CanapliaContent.HEMP_TOP.defaultBlockState() - .setValue(AGE, getAge(state)).setValue(VARIANT, state.getValue(VARIANT)), Block.UPDATE_CLIENTS); + .setValue(AGE, getAge(state)).setValue(VARIANT, + CanapliaVariantLifecycle.upperFromLower(state.getValue(VARIANT))), Block.UPDATE_CLIENTS); } } else if (aboveState.is(CanapliaContent.HEMP_TOP)) { level.removeBlock(above, false); diff --git a/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/block/CanapliaHempTopBlock.java b/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/block/CanapliaHempTopBlock.java index 01316a7..cec51a1 100644 --- a/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/block/CanapliaHempTopBlock.java +++ b/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/block/CanapliaHempTopBlock.java @@ -1,6 +1,7 @@ package fr.koka99cab.sanctuary26.itsalive.canaplia.block; import fr.koka99cab.sanctuary26.itsalive.canaplia.CanapliaContent; +import fr.koka99cab.sanctuary26.itsalive.canaplia.CanapliaVariantLifecycle; import fr.koka99cab.sanctuary26.itsalive.canaplia.CanapliaVariantKey; import net.minecraft.core.BlockPos; import net.minecraft.world.item.ItemStack; @@ -26,7 +27,9 @@ public final class CanapliaHempTopBlock extends CropBlock { @Override protected ItemStack getCloneItemStack(LevelReader level, BlockPos pos, BlockState state, boolean includeData) { - return new ItemStack(CanapliaContent.family(state.getValue(CanapliaHempCropBlock.VARIANT)).seeds()); + CanapliaVariantKey variant = CanapliaVariantLifecycle.harvestedFromPlant( + state.getValue(CanapliaHempCropBlock.VARIANT)); + return new ItemStack(CanapliaContent.family(variant).seeds()); } @Override diff --git a/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/item/CanapliaVariantBlockItem.java b/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/item/CanapliaVariantBlockItem.java index d2163a3..83f53ae 100644 --- a/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/item/CanapliaVariantBlockItem.java +++ b/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/item/CanapliaVariantBlockItem.java @@ -1,5 +1,6 @@ package fr.koka99cab.sanctuary26.itsalive.canaplia.item; +import fr.koka99cab.sanctuary26.itsalive.canaplia.CanapliaVariantLifecycle; import fr.koka99cab.sanctuary26.itsalive.canaplia.CanapliaVariantKey; import fr.koka99cab.sanctuary26.itsalive.canaplia.block.CanapliaHempCropBlock; import fr.koka99cab.sanctuary26.itsalive.canaplia.block.CanapliaResinBlock; @@ -24,12 +25,17 @@ public final class CanapliaVariantBlockItem extends BlockItem { @Override protected BlockState getPlacementState(BlockPlaceContext context) { BlockState state = super.getPlacementState(context); - if (state == null) return null; + return applyVariant(state, variant); + } + + public static BlockState applyVariant(BlockState state, CanapliaVariantKey variant) { + if (state == null || variant == null) return state; + CanapliaVariantKey placed = CanapliaVariantLifecycle.plantedFromSeed(variant); if (state.hasProperty(CanapliaHempCropBlock.VARIANT)) { - return state.setValue(CanapliaHempCropBlock.VARIANT, variant); + return state.setValue(CanapliaHempCropBlock.VARIANT, placed); } if (state.hasProperty(CanapliaResinBlock.VARIANT)) { - return state.setValue(CanapliaResinBlock.VARIANT, variant); + return state.setValue(CanapliaResinBlock.VARIANT, placed); } return state; } diff --git a/itsalive/src/test/java/fr/koka99cab/sanctuary26/itsalive/canaplia/CanapliaGameplaySmoke.java b/itsalive/src/test/java/fr/koka99cab/sanctuary26/itsalive/canaplia/CanapliaGameplaySmoke.java index d255adf..bab26d8 100644 --- a/itsalive/src/test/java/fr/koka99cab/sanctuary26/itsalive/canaplia/CanapliaGameplaySmoke.java +++ b/itsalive/src/test/java/fr/koka99cab/sanctuary26/itsalive/canaplia/CanapliaGameplaySmoke.java @@ -61,6 +61,22 @@ public final class CanapliaGameplaySmoke { Set.of(), Temperature.COLD, Humidity.BALANCED, 12, false, false, true, true, false)).isEmpty(), "lunar harvest requires a sky dimension"); + for (CanapliaVariantKey variant : CanapliaVariantKey.values()) { + CanapliaVariantKey placed = CanapliaVariantLifecycle.plantedFromSeed(variant); + assertEquals(variant, placed, + "historical seed placement variant " + variant.key()); + CanapliaVariantKey grown = CanapliaVariantLifecycle.afterGrowth(placed); + assertEquals(variant, grown, + "natural growth variant " + variant.key()); + CanapliaVariantKey persisted = CanapliaVariantLifecycle.fromPersistedKey( + CanapliaVariantLifecycle.persistedKey(grown)); + assertEquals(variant, persisted, "persisted variant " + variant.key()); + assertEquals(variant, CanapliaVariantLifecycle.upperFromLower(persisted), + "upper crop variant " + variant.key()); + assertEquals(variant, CanapliaVariantLifecycle.harvestedFromPlant(persisted), + "harvest variant " + variant.key()); + } + CanapliaEffectRules.Plan minimum = CanapliaEffectRules.plan(0, 1, 0, 0); assertEquals(CanapliaEffectRules.MIN_PRIMARY_TICKS, minimum.primaryTicks(), "minimum primary duration"); assertTrue(!minimum.badTrip(), "nonzero bad-trip roll"); -- 2.54.0 From a071a0b7463c9ffbd0701498c8bb1bcd38a0a022 Mon Sep 17 00:00:00 2001 From: koka Date: Mon, 31 Aug 2026 11:46:24 +0200 Subject: [PATCH 4/5] fix(magic-carpet): restore the Notch Totem texture --- .../iliketomoveit/models/item/magic_carpet.json | 2 +- .../iliketomoveit/textures/item/magic_carpet.png | Bin 0 -> 366 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 iliketomoveit/src/main/resources/assets/iliketomoveit/textures/item/magic_carpet.png diff --git a/iliketomoveit/src/main/resources/assets/iliketomoveit/models/item/magic_carpet.json b/iliketomoveit/src/main/resources/assets/iliketomoveit/models/item/magic_carpet.json index f5d7894..0aa5773 100644 --- a/iliketomoveit/src/main/resources/assets/iliketomoveit/models/item/magic_carpet.json +++ b/iliketomoveit/src/main/resources/assets/iliketomoveit/models/item/magic_carpet.json @@ -1,6 +1,6 @@ { "parent": "minecraft:item/generated", "textures": { - "layer0": "minecraft:block/purple_wool" + "layer0": "iliketomoveit:item/magic_carpet" } } diff --git a/iliketomoveit/src/main/resources/assets/iliketomoveit/textures/item/magic_carpet.png b/iliketomoveit/src/main/resources/assets/iliketomoveit/textures/item/magic_carpet.png new file mode 100644 index 0000000000000000000000000000000000000000..f11761d1c0ff3bed800837859037d21ea0908808 GIT binary patch literal 366 zcmV-!0g?WRP)Y= zLZUP4Swn|JXWuzrM=Mt Date: Mon, 31 Aug 2026 11:46:39 +0200 Subject: [PATCH 5/5] release: prepare Sanctuary 26.2.0-alpha.225 --- CHANGELOG.md | 10 + README.md | 4 +- anotherworld/build.gradle | 7 +- build.gradle | 612 +++++++++++------- gradle.properties | 12 +- iliketomoveit/build.gradle | 10 +- itsalive/build.gradle | 12 +- onlyfun/src/main/resources/fabric.mod.json | 2 +- ...alpha.224-four-bug-fixes-to-alpha.225.json | 87 +++ pack/packwiz/index.toml | 30 +- pack/packwiz/pack.toml | 4 +- pack/prism/modrinth.index.json | 2 +- pack/release.json | 4 +- sanctuary/build.gradle | 31 +- 14 files changed, 553 insertions(+), 274 deletions(-) create mode 100644 pack/migrations/26.2.0-alpha.224-four-bug-fixes-to-alpha.225.json diff --git a/CHANGELOG.md b/CHANGELOG.md index 11360bb..c735f88 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,16 @@ Ce journal suit les **versions du modpack**. Lorsqu'un seul module change, sa ve - Depuis `26.2.0-alpha.6`, le pack et les modules ont des versions indépendantes. I Like To Move It et Only Fun deviennent les cinquième et sixième modules actifs dans l'alpha 46. - Les versions ci-dessous ont été reconstituées à partir des JAR archivés, des packs locaux et du code source actuel. Les dates n'étant pas enregistrées de manière fiable, elles ne sont pas inventées. +## `26.2.0-alpha.225` + +Modules modifiés : **Another World `0.0.0-alpha.56`**, **It's Alive `0.0.0-alpha.38`**, **I Like To Move It `0.0.0-alpha.18`**, **Only Fun `0.0.0-alpha.27`** et **Sanctuary `0.0.0-alpha.129`**. Les cinq autres modules conservent leur version issue de l'alpha.224. + +- exige que l’attaquant possède son propre coffre-fort actif avant de commencer un braquage, revalide cette condition pendant le forage et refuse défensivement tout transfert si le coffre disparaît entre-temps ; +- empêche les familiers temporaires Sanctuary de produire du butin vanilla, de l’expérience ou une lootbox Only Fun, et les exclut des contrats de panneau comme des demandes communautaires ; +- conserve la variante Canaplia des seize graines historiques pendant le placement, la croissance naturelle, la poudre d’os, la création de la partie haute, le rechargement et la récolte, ce qui réactive notamment l’hybridation Tendre + Olive vers Dorée ; +- remplace la laine violette du Magic Carpet par la texture historique 16 × 16 du Totem de Notch, utilisée par l’objet canonique et son alias hérité sans modifier la plateforme 3 × 3 ; +- conserve tous les IDs, sauvegardes et formats de données ; les protocoles réseau restent Another World 2, It's Alive 4, I Like To Move It 5, Only Fun 3 et Sanctuary 23, sans nouveau monde ni réinitialisation. + ## `26.2.0-alpha.224` Modules modifiés : **It's Alive `0.0.0-alpha.37`**, **Ouch `0.0.0-alpha.11`**, **I Like To Move It `0.0.0-alpha.17`**, **Only Fun `0.0.0-alpha.26`**, **Sanctuary `0.0.0-alpha.128`** et **MasterKey `0.0.0-alpha.9`**. diff --git a/README.md b/README.md index 7873cf9..e228b61 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,9 @@ Licence : **GNU GPL 3.0 or Later** (`GPL-3.0-or-later`) Les descriptions FR/EN/RU sont déclarées dans chaque `fabric.mod.json` et dans les fichiers de langue. Les images fournies servent d'icônes Fabric de leur module. -Version courante du pack distribué : **`26.2.0-alpha.224`**. Cette release distribue It's Alive **`0.0.0-alpha.37`**, Ouch **`0.0.0-alpha.11`**, I Like To Move It **`0.0.0-alpha.17`**, Only Fun **`0.0.0-alpha.26`**, Sanctuary **`0.0.0-alpha.128`** et MasterKey **`0.0.0-alpha.9`** ; les quatre autres modules conservent leur version issue de l'alpha.223. +Version courante du pack distribué : **`26.2.0-alpha.225`**. Cette release distribue Another World **`0.0.0-alpha.56`**, It's Alive **`0.0.0-alpha.38`**, I Like To Move It **`0.0.0-alpha.18`**, Only Fun **`0.0.0-alpha.27`** et Sanctuary **`0.0.0-alpha.129`** ; les cinq autres modules conservent leur version issue de l'alpha.224. + +L’alpha.225 corrige quatre tickets : posséder un coffre-fort devient obligatoire pour en braquer un autre, les familiers temporaires ne donnent plus de butin, d’expérience, de lootbox ni de progression de quête, les seize variantes Canaplia survivent à tout leur cycle de culture, et le Magic Carpet retrouve la texture historique du Totem de Notch à la place de la laine violette. Les IDs, sauvegardes, formats de données et protocoles restent compatibles. La migration [CANA-01 à CANA-09](CANAPLIA.md) porte Canaplia vers Minecraft 26.2. It's Alive **`0.0.0-alpha.35`** enregistre les seize familles, les découvertes, hybridations, résines, effets serveur et le Livre interdit personnel, partageable temporairement sur un pupitre. Ambiance **`0.0.0-alpha.14`** compose les profils visuels bornés avec ses réglages d'accessibilité, et Only Fun **`0.0.0-alpha.21`** exclut explicitement Canaplia et les raccourcis de progression du Shop. diff --git a/anotherworld/build.gradle b/anotherworld/build.gradle index 2b9d65b..031d722 100644 --- a/anotherworld/build.gradle +++ b/anotherworld/build.gradle @@ -1647,6 +1647,7 @@ tasks.register("generateAnotherWorldResources") { "message.anotherworld.safe_vault.empty_before_break": "Videz le coffre-fort et attendez la fin du forage avant de le démonter.", "message.anotherworld.safe_vault.drill_own": "Vous ne pouvez pas forer votre propre coffre-fort.", "message.anotherworld.safe_vault.inactive": "Ce coffre-fort n’est pas actif.", + "message.anotherworld.safe_vault.raid_requires_vault": "Vous devez posséder un coffre-fort actif avant d’en braquer un autre.", "message.anotherworld.safe_vault.empty": "Ce coffre-fort est vide.", "message.anotherworld.safe_vault.owner_offline": "Le propriétaire doit être connecté pour que le coffre-fort soit attaquable.", "message.anotherworld.safe_vault.protected": "Ce coffre-fort reste protégé pendant environ %s minute(s).", @@ -1671,6 +1672,7 @@ tasks.register("generateAnotherWorldResources") { "message.anotherworld.safe_vault.empty_before_break": "Опустошите сейф и дождитесь окончания сверления перед разборкой.", "message.anotherworld.safe_vault.drill_own": "Нельзя сверлить собственный сейф.", "message.anotherworld.safe_vault.inactive": "Этот сейф не активен.", + "message.anotherworld.safe_vault.raid_requires_vault": "Для ограбления чужого сейфа нужен собственный активный сейф.", "message.anotherworld.safe_vault.empty": "Этот сейф пуст.", "message.anotherworld.safe_vault.owner_offline": "Владелец должен быть в сети, чтобы атаковать сейф.", "message.anotherworld.safe_vault.protected": "Сейф защищён ещё примерно %s минут(ы).", @@ -1695,6 +1697,7 @@ tasks.register("generateAnotherWorldResources") { "message.anotherworld.safe_vault.empty_before_break": "Empty the safe and wait for drilling to end before dismantling it.", "message.anotherworld.safe_vault.drill_own": "You cannot drill your own safe.", "message.anotherworld.safe_vault.inactive": "This safe is not active.", + "message.anotherworld.safe_vault.raid_requires_vault": "You need an active safe of your own before raiding another one.", "message.anotherworld.safe_vault.empty": "This safe is empty.", "message.anotherworld.safe_vault.owner_offline": "The owner must be online before the safe can be raided.", "message.anotherworld.safe_vault.protected": "This safe remains protected for about %s minute(s).", @@ -1953,7 +1956,7 @@ tasks.register("verifyAnotherWorldCatalog") { "src/main/resources/assets/redstoner/textures/item/weather_gauge.png", "src/main/resources/data/redstoner/recipe/weather_gauge.json" ] - if (project.version.toString() != "0.0.0-alpha.55" + if (project.version.toString() != "0.0.0-alpha.56" || sulfurMigration.target?.modules?.anotherworld != "0.0.0-alpha.44" || sulfurMigration.sulfur_caves?.sanctuary?.dripstone_cell_period != 2 || !javaText.contains('Identifier.parse("sanctuary:sulfur_caves")') @@ -3270,7 +3273,7 @@ tasks.register("verifyClimateBiomeMixer") { "pack/migrations/26.2.0-alpha.188-beta-climate-provinces-to-alpha.189.json")) def mixer = file( "src/main/java/fr/koka99cab/sanctuary26/anotherworld/mixin/MultiNoiseBiomeSourceParameterListPresetMixin.java").text - if (project.version.toString() != "0.0.0-alpha.55" + if (project.version.toString() != "0.0.0-alpha.56" || migration.source?.pack_version != "26.2.0-alpha.188" || migration.target?.pack_version != "26.2.0-alpha.189" || migration.target?.modules?.anotherworld != "0.0.0-alpha.48" diff --git a/build.gradle b/build.gradle index d82454a..3c106f7 100644 --- a/build.gradle +++ b/build.gradle @@ -117,6 +117,7 @@ tasks.register("verifyWorkspace") { inputs.files(moduleIds.collect { file("${it}/src/main/resources/assets/${it}/icon.png") }) inputs.file(file("pack/release.json")) inputs.file(file("pack/prism/modrinth.index.json")) + inputs.file(file("pack/migrations/26.2.0-alpha.224-four-bug-fixes-to-alpha.225.json")) inputs.file(file("pack/migrations/26.2.0-alpha.35-to-alpha.36.json")) inputs.file(file("pack/migrations/26.1.2-transport-to-26.2.0-alpha.46.json")) inputs.file(file("pack/migrations/26.1.2-waystone-to-26.2.0-alpha.62.json")) @@ -2913,11 +2914,11 @@ tasks.register("verifyNotchEncounter") { def commands = file("masterkey/src/main/java/fr/koka99cab/sanctuary26/masterkey/command/MasterKeyCommands.java").text def texture = file("itsalive/src/main/resources/assets/itsalive/textures/entity/notch.png") def textureHash = MessageDigest.getInstance("SHA-256").digest(texture.bytes).encodeHex().toString() - if (rootProject.itsalive_version != "0.0.0-alpha.37" + if (rootProject.itsalive_version != "0.0.0-alpha.38" || rootProject.ouch_version != "0.0.0-alpha.11" - || rootProject.sanctuary_version != "0.0.0-alpha.128" + || rootProject.sanctuary_version != "0.0.0-alpha.129" || rootProject.masterkey_version != "0.0.0-alpha.9" - || rootProject.pack_version != "26.2.0-alpha.224" + || rootProject.pack_version != "26.2.0-alpha.225" || manifests.itsalive.custom?.sanctuary26?.data_version != 4 || manifests.sanctuary.custom?.sanctuary26?.data_version != 13 || manifests.ouch.depends?.itsalive != ">=0.0.0-alpha.37" @@ -2982,6 +2983,8 @@ tasks.register("verifyMagicCarpet") { file("iliketomoveit/src/main/resources/assets/iliketomoveit/lang/${it}.json") }) inputs.file(file("iliketomoveit/src/main/resources/assets/portals/items/notch_totem.json")) + inputs.file(file("iliketomoveit/src/main/resources/assets/iliketomoveit/models/item/magic_carpet.json")) + inputs.file(file("iliketomoveit/src/main/resources/assets/iliketomoveit/textures/item/magic_carpet.png")) doLast { def migration = new JsonSlurper().parse(file( @@ -3000,17 +3003,21 @@ tasks.register("verifyMagicCarpet") { def provenance = file("sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/api/item/SanctuaryItemProvenance.java").text def gate = file("onlyfun/src/main/java/fr/koka99cab/sanctuary26/onlyfun/shop/OnlyFunBossShopGate.java").text def shop = file("sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/shop/ShopService.java").text - if (rootProject.pack_version != "26.2.0-alpha.224" - || rootProject.iliketomoveit_version != "0.0.0-alpha.17" - || rootProject.onlyfun_version != "0.0.0-alpha.26" - || rootProject.sanctuary_version != "0.0.0-alpha.128" + def carpetModel = new JsonSlurper().parse(file( + "iliketomoveit/src/main/resources/assets/iliketomoveit/models/item/magic_carpet.json")) + def carpetTexture = file( + "iliketomoveit/src/main/resources/assets/iliketomoveit/textures/item/magic_carpet.png") + if (rootProject.pack_version != "26.2.0-alpha.225" + || rootProject.iliketomoveit_version != "0.0.0-alpha.18" + || rootProject.onlyfun_version != "0.0.0-alpha.27" + || rootProject.sanctuary_version != "0.0.0-alpha.129" || manifests.iliketomoveit.custom?.sanctuary26?.data_version != 4 || manifests.iliketomoveit.custom?.sanctuary26?.network_protocol != 5 || manifests.iliketomoveit.depends?.sanctuary != ">=0.0.0-alpha.127" || manifests.onlyfun.custom?.sanctuary26?.data_version != 2 || manifests.onlyfun.custom?.sanctuary26?.network_protocol != 3 || manifests.onlyfun.depends?.iliketomoveit != ">=0.0.0-alpha.17" - || manifests.onlyfun.depends?.sanctuary != ">=0.0.0-alpha.127" + || manifests.onlyfun.depends?.sanctuary != ">=0.0.0-alpha.129" || manifests.sanctuary.custom?.sanctuary26?.data_version != 13 || manifests.sanctuary.custom?.sanctuary26?.network_protocol != 23 || migration.status != "released" @@ -3051,7 +3058,9 @@ tasks.register("verifyMagicCarpet") { || !gate.contains("IMPLEMENTED_MILESTONES") || !shop.contains("SanctuaryItemProvenance.SHOP_PURCHASE") || !shop.contains("reward_recreated=false") - || !provenance.contains('ORIGIN_KEY = "sanctuary_origin"')) { + || !provenance.contains('ORIGIN_KEY = "sanctuary_origin"') + || carpetModel.textures?.layer0 != "iliketomoveit:item/magic_carpet" + || !carpetTexture.isFile()) { throw new GradleException("The CARPET-01 through CARPET-03 contract is incomplete") } ["fr_fr", "en_us", "ru_ru"].each { locale -> @@ -3631,9 +3640,9 @@ tasks.register("verifyProgressivePauseMenuRelease") { [(locale): new JsonSlurper().parse(file( "sanctuary/src/main/resources/assets/sanctuary/lang/${locale}.json"))] } - if (rootProject.pack_version != "26.2.0-alpha.224" - || rootProject.sanctuary_version != "0.0.0-alpha.128" - || rootProject.onlyfun_version != "0.0.0-alpha.26" + if (rootProject.pack_version != "26.2.0-alpha.225" + || rootProject.sanctuary_version != "0.0.0-alpha.129" + || rootProject.onlyfun_version != "0.0.0-alpha.27" || release.pack_version != rootProject.pack_version || index.versionId != rootProject.pack_version || migration.source?.modules != [sanctuary: "0.0.0-alpha.108", onlyfun: "0.0.0-alpha.17"] || migration.target?.modules != [sanctuary: "0.0.0-alpha.109", onlyfun: "0.0.0-alpha.17"] @@ -3681,8 +3690,8 @@ tasks.register("verifyMirrorLavenderDrawerRelease") { def redStonerRegistry = file( "redstoner/src/main/java/fr/koka99cab/sanctuary26/redstoner/registry/RedStonerRegistries.java").text def drawerRecipe = file("redstoner/src/main/resources/data/redstoner/recipe/drawer.json") - if (rootProject.pack_version != "26.2.0-alpha.224" - || rootProject.anotherworld_version != "0.0.0-alpha.55" + if (rootProject.pack_version != "26.2.0-alpha.225" + || rootProject.anotherworld_version != "0.0.0-alpha.56" || rootProject.redstoner_version != "0.0.0-alpha.13" || release.pack_version != rootProject.pack_version || index.versionId != rootProject.pack_version || migration.source?.pack_version != "26.2.0-alpha.191" @@ -3944,8 +3953,8 @@ project(":onlyfun") { def shitCubeRecipe = new JsonSlurper().parse(file( "src/main/resources/data/abjection/recipe/shit_cube.json")) if (manifest.custom.sanctuary26.data_version != 2 - || project.version.toString() != "0.0.0-alpha.26" - || manifest.depends?.sanctuary != ">=0.0.0-alpha.127" + || project.version.toString() != "0.0.0-alpha.27" + || manifest.depends?.sanctuary != ">=0.0.0-alpha.129" || manifest.depends?.iliketomoveit != ">=0.0.0-alpha.17" || manifest.provides != ["abjection"] || manifest.custom.sanctuary26.network_protocol != 3 @@ -4473,9 +4482,9 @@ tasks.register("verifyShopPricingLayoutRelease") { "pack/migrations/26.2.0-alpha.192-shop-pricing-layout-to-alpha.193.json")) def release = new JsonSlurper().parse(file("pack/release.json")) def index = new JsonSlurper().parse(file("pack/prism/modrinth.index.json")) - if (rootProject.pack_version != "26.2.0-alpha.224" - || rootProject.onlyfun_version != "0.0.0-alpha.26" - || rootProject.sanctuary_version != "0.0.0-alpha.128" + if (rootProject.pack_version != "26.2.0-alpha.225" + || rootProject.onlyfun_version != "0.0.0-alpha.27" + || rootProject.sanctuary_version != "0.0.0-alpha.129" || release.pack_version != rootProject.pack_version || index.versionId != rootProject.pack_version || migration.source?.pack_version != "26.2.0-alpha.192" || migration.target?.pack_version != "26.2.0-alpha.193" @@ -4518,8 +4527,8 @@ tasks.register("verifyCuisineCropsRelease") { def climate = file("itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/agriculture/ClimateCropForaging.java").text def rice = file("itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/agriculture/RiceCropBlock.java").text def bean = file("itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/agriculture/BeanCropBlock.java").text - if (rootProject.pack_version != "26.2.0-alpha.224" - || rootProject.itsalive_version != "0.0.0-alpha.37" + if (rootProject.pack_version != "26.2.0-alpha.225" + || rootProject.itsalive_version != "0.0.0-alpha.38" || release.pack_version != rootProject.pack_version || index.versionId != rootProject.pack_version || migration.source?.pack_version != "26.2.0-alpha.193" || migration.source?.modules != [itsalive: "0.0.0-alpha.26"] @@ -4567,9 +4576,9 @@ tasks.register("verifyShopCsvBossGatesRelease") { def bossGate = file("onlyfun/src/main/java/fr/koka99cab/sanctuary26/onlyfun/shop/OnlyFunBossShopGate.java").text def catalog = file("onlyfun/src/main/java/fr/koka99cab/sanctuary26/onlyfun/shop/OnlyFunShopCatalog.java").text def offerCatalog = file("sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/shop/ShopOfferCatalog.java").text - if (rootProject.pack_version != "26.2.0-alpha.224" - || rootProject.onlyfun_version != "0.0.0-alpha.26" - || rootProject.sanctuary_version != "0.0.0-alpha.128" + if (rootProject.pack_version != "26.2.0-alpha.225" + || rootProject.onlyfun_version != "0.0.0-alpha.27" + || rootProject.sanctuary_version != "0.0.0-alpha.129" || release.pack_version != rootProject.pack_version || index.versionId != rootProject.pack_version || migration.source?.pack_version != "26.2.0-alpha.194" || migration.source?.modules != [onlyfun: "0.0.0-alpha.18", sanctuary: "0.0.0-alpha.110"] @@ -4614,7 +4623,7 @@ tasks.register("verifyCulinaryMailboxGrappleFixesRelease") { def release = new JsonSlurper().parse(file("pack/release.json")) def prism = new JsonSlurper().parse(file("pack/prism/modrinth.index.json")) def packwiz = file("pack/packwiz/pack.toml").text - if (rootProject.pack_version != "26.2.0-alpha.224" + if (rootProject.pack_version != "26.2.0-alpha.225" || migration.source?.pack_version != "26.2.0-alpha.195" || migration.target?.pack_version != "26.2.0-alpha.196" || migration.target?.modules != [ @@ -4632,10 +4641,10 @@ tasks.register("verifyCulinaryMailboxGrappleFixesRelease") { || migration.distribution?.jei?.target != "30.26.0.182" || migration.compatibility?.save_migration_required != false || migration.compatibility?.registry_ids_changed != false - || release.pack_version != "26.2.0-alpha.224" - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.224.mrpack" - || prism.versionId != "26.2.0-alpha.224" - || !packwiz.contains('version = "26.2.0-alpha.224"')) { + || release.pack_version != "26.2.0-alpha.225" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.225.mrpack" + || prism.versionId != "26.2.0-alpha.225" + || !packwiz.contains('version = "26.2.0-alpha.225"')) { throw new GradleException("The alpha.196 culinary, mailbox and grapple release contract is incomplete") } } @@ -4660,9 +4669,9 @@ tasks.register("verifyQuestRequestsCauldronBatchesRelease") { def prism = new JsonSlurper().parse(file("pack/prism/modrinth.index.json")) def packwiz = file("pack/packwiz/pack.toml").text def sanctuaryManifest = new JsonSlurper().parse(file("sanctuary/src/main/resources/fabric.mod.json")) - if (rootProject.pack_version != "26.2.0-alpha.224" - || rootProject.itsalive_version != "0.0.0-alpha.37" - || rootProject.sanctuary_version != "0.0.0-alpha.128" + if (rootProject.pack_version != "26.2.0-alpha.225" + || rootProject.itsalive_version != "0.0.0-alpha.38" + || rootProject.sanctuary_version != "0.0.0-alpha.129" || migration.source?.pack_version != "26.2.0-alpha.196" || migration.target?.pack_version != "26.2.0-alpha.197" || migration.target?.modules != [itsalive: "0.0.0-alpha.29", sanctuary: "0.0.0-alpha.113"] @@ -4680,10 +4689,10 @@ tasks.register("verifyQuestRequestsCauldronBatchesRelease") { || migration.distribution?.jei?.target != "30.26.0.186" || migration.compatibility?.sanctuary_target_network_protocol != 19 || sanctuaryManifest.custom?.sanctuary26?.network_protocol != 23 - || release.pack_version != "26.2.0-alpha.224" - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.224.mrpack" - || prism.versionId != "26.2.0-alpha.224" - || !packwiz.contains('version = "26.2.0-alpha.224"')) { + || release.pack_version != "26.2.0-alpha.225" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.225.mrpack" + || prism.versionId != "26.2.0-alpha.225" + || !packwiz.contains('version = "26.2.0-alpha.225"')) { throw new GradleException("The alpha.197 quest-request and cauldron-batch release contract is incomplete") } } @@ -4710,8 +4719,8 @@ tasks.register("verifyFermentationBarrelAutomationRelease") { def packwiz = file("pack/packwiz/pack.toml").text def packwizIndex = file("pack/packwiz/index.toml").text def itsAliveManifest = new JsonSlurper().parse(file("itsalive/src/main/resources/fabric.mod.json")) - if (rootProject.pack_version != "26.2.0-alpha.224" - || rootProject.itsalive_version != "0.0.0-alpha.37" + if (rootProject.pack_version != "26.2.0-alpha.225" + || rootProject.itsalive_version != "0.0.0-alpha.38" || migration.source?.pack_version != "26.2.0-alpha.197" || migration.target?.pack_version != "26.2.0-alpha.198" || migration.target?.modules != [itsalive: "0.0.0-alpha.30", sanctuary: "0.0.0-alpha.114"] @@ -4729,11 +4738,11 @@ tasks.register("verifyFermentationBarrelAutomationRelease") { || migration.distribution?.packwiz_index_refreshed != true || itsAliveManifest.custom?.sanctuary26?.data_version != 4 || itsAliveManifest.custom?.sanctuary26?.network_protocol != 4 - || release.pack_version != "26.2.0-alpha.224" - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.224.mrpack" - || prism.versionId != "26.2.0-alpha.224" - || !packwiz.contains('version = "26.2.0-alpha.224"') - || !packwizIndex.contains('file = "mods/itsalive-0.0.0-alpha.37.jar"')) { + || release.pack_version != "26.2.0-alpha.225" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.225.mrpack" + || prism.versionId != "26.2.0-alpha.225" + || !packwiz.contains('version = "26.2.0-alpha.225"') + || !packwizIndex.contains('file = "mods/itsalive-0.0.0-alpha.38.jar"')) { throw new GradleException("The alpha.198 fermentation barrel release contract is incomplete") } } @@ -4760,9 +4769,9 @@ tasks.register("verifyQuestRequestContractsRelease") { def packwiz = file("pack/packwiz/pack.toml").text def packwizIndex = file("pack/packwiz/index.toml").text def sanctuaryManifest = new JsonSlurper().parse(file("sanctuary/src/main/resources/fabric.mod.json")) - if (rootProject.pack_version != "26.2.0-alpha.224" - || rootProject.itsalive_version != "0.0.0-alpha.37" - || rootProject.sanctuary_version != "0.0.0-alpha.128" + if (rootProject.pack_version != "26.2.0-alpha.225" + || rootProject.itsalive_version != "0.0.0-alpha.38" + || rootProject.sanctuary_version != "0.0.0-alpha.129" || migration.source?.pack_version != "26.2.0-alpha.198" || migration.source?.modules?.sanctuary != "0.0.0-alpha.114" || migration.target?.pack_version != "26.2.0-alpha.199" @@ -4774,12 +4783,12 @@ tasks.register("verifyQuestRequestContractsRelease") { || migration.quest_request_contracts?.chat_accept_revalidates_distance_owner_sign_and_claim != true || migration.compatibility?.sanctuary_target_network_protocol != 20 || sanctuaryManifest.custom?.sanctuary26?.network_protocol != 23 - || release.pack_version != "26.2.0-alpha.224" - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.224.mrpack" - || prism.versionId != "26.2.0-alpha.224" - || !packwiz.contains('version = "26.2.0-alpha.224"') - || !packwizIndex.contains('file = "mods/itsalive-0.0.0-alpha.37.jar"') - || !packwizIndex.contains('file = "mods/sanctuary-0.0.0-alpha.128.jar"')) { + || release.pack_version != "26.2.0-alpha.225" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.225.mrpack" + || prism.versionId != "26.2.0-alpha.225" + || !packwiz.contains('version = "26.2.0-alpha.225"') + || !packwizIndex.contains('file = "mods/itsalive-0.0.0-alpha.38.jar"') + || !packwizIndex.contains('file = "mods/sanctuary-0.0.0-alpha.129.jar"')) { throw new GradleException("The alpha.199 quest-request contract release is incomplete") } } @@ -4815,7 +4824,7 @@ tasks.register("verifyWeatherTntAmbianceRelease") { def ambianceManifest = new JsonSlurper().parse(file("ambiance/src/main/resources/fabric.mod.json")) def ouchManifest = new JsonSlurper().parse(file("ouch/src/main/resources/fabric.mod.json")) def rootBuild = file("build.gradle").text - if (rootProject.pack_version != "26.2.0-alpha.224" + if (rootProject.pack_version != "26.2.0-alpha.225" || rootProject.ambiance_version != "0.0.0-alpha.22" || rootProject.ouch_version != "0.0.0-alpha.11" || migration.source?.pack_version != "26.2.0-alpha.199" @@ -4849,10 +4858,10 @@ tasks.register("verifyWeatherTntAmbianceRelease") { || !weatherTnt.contains("AmbianceDailyWeather.CLEAR") || !weatherTnt.contains("CLEAR_WEATHER_TICKS = 864_000") || weatherTnt.contains("setWeatherParameters") - || release.pack_version != "26.2.0-alpha.224" - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.224.mrpack" - || prism.versionId != "26.2.0-alpha.224" - || !packwiz.contains('version = "26.2.0-alpha.224"') + || release.pack_version != "26.2.0-alpha.225" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.225.mrpack" + || prism.versionId != "26.2.0-alpha.225" + || !packwiz.contains('version = "26.2.0-alpha.225"') || !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.22.jar"') || !packwizIndex.contains('file = "mods/ouch-0.0.0-alpha.11.jar"')) { throw new GradleException("The alpha.200 Weather TNT and Ambiance release is incomplete") @@ -4881,8 +4890,8 @@ tasks.register("verifyQuestRequestEscrowRelease") { def packwiz = file("pack/packwiz/pack.toml").text def packwizIndex = file("pack/packwiz/index.toml").text def sanctuaryManifest = new JsonSlurper().parse(file("sanctuary/src/main/resources/fabric.mod.json")) - if (rootProject.pack_version != "26.2.0-alpha.224" - || rootProject.sanctuary_version != "0.0.0-alpha.128" + if (rootProject.pack_version != "26.2.0-alpha.225" + || rootProject.sanctuary_version != "0.0.0-alpha.129" || migration.source?.pack_version != "26.2.0-alpha.200" || migration.source?.modules?.sanctuary != "0.0.0-alpha.115" || migration.target?.pack_version != "26.2.0-alpha.201" @@ -4896,11 +4905,11 @@ tasks.register("verifyQuestRequestEscrowRelease") { || migration.compatibility?.sanctuary_target_network_protocol != 21 || sanctuaryManifest.custom?.sanctuary26?.data_version != 13 || sanctuaryManifest.custom?.sanctuary26?.network_protocol != 23 - || release.pack_version != "26.2.0-alpha.224" - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.224.mrpack" - || prism.versionId != "26.2.0-alpha.224" - || !packwiz.contains('version = "26.2.0-alpha.224"') - || !packwizIndex.contains('file = "mods/sanctuary-0.0.0-alpha.128.jar"')) { + || release.pack_version != "26.2.0-alpha.225" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.225.mrpack" + || prism.versionId != "26.2.0-alpha.225" + || !packwiz.contains('version = "26.2.0-alpha.225"') + || !packwizIndex.contains('file = "mods/sanctuary-0.0.0-alpha.129.jar"')) { throw new GradleException("The alpha.201 quest-request escrow release is incomplete") } } @@ -4935,11 +4944,11 @@ tasks.register("verifyWaystoneShopCulinaryAlpha202Release") { "iliketomoveit/src/main/resources/fabric.mod.json")) def sanctuaryManifest = new JsonSlurper().parse(file( "sanctuary/src/main/resources/fabric.mod.json")) - if (rootProject.pack_version != "26.2.0-alpha.224" - || rootProject.anotherworld_version != "0.0.0-alpha.55" - || rootProject.itsalive_version != "0.0.0-alpha.37" - || rootProject.iliketomoveit_version != "0.0.0-alpha.17" - || rootProject.sanctuary_version != "0.0.0-alpha.128" + if (rootProject.pack_version != "26.2.0-alpha.225" + || rootProject.anotherworld_version != "0.0.0-alpha.56" + || rootProject.itsalive_version != "0.0.0-alpha.38" + || rootProject.iliketomoveit_version != "0.0.0-alpha.18" + || rootProject.sanctuary_version != "0.0.0-alpha.129" || migration.source?.pack_version != "26.2.0-alpha.201" || migration.source?.modules != [ itsalive: "0.0.0-alpha.30", @@ -4975,14 +4984,14 @@ tasks.register("verifyWaystoneShopCulinaryAlpha202Release") { || moveItManifest.custom?.sanctuary26?.network_protocol != 5 || sanctuaryManifest.custom?.sanctuary26?.data_version != 13 || sanctuaryManifest.custom?.sanctuary26?.network_protocol != 23 - || release.pack_version != "26.2.0-alpha.224" - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.224.mrpack" - || prism.versionId != "26.2.0-alpha.224" - || !packwiz.contains('version = "26.2.0-alpha.224"') - || !packwizIndex.contains('file = "mods/anotherworld-0.0.0-alpha.55.jar"') - || !packwizIndex.contains('file = "mods/itsalive-0.0.0-alpha.37.jar"') - || !packwizIndex.contains('file = "mods/iliketomoveit-0.0.0-alpha.17.jar"') - || !packwizIndex.contains('file = "mods/sanctuary-0.0.0-alpha.128.jar"')) { + || release.pack_version != "26.2.0-alpha.225" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.225.mrpack" + || prism.versionId != "26.2.0-alpha.225" + || !packwiz.contains('version = "26.2.0-alpha.225"') + || !packwizIndex.contains('file = "mods/anotherworld-0.0.0-alpha.56.jar"') + || !packwizIndex.contains('file = "mods/itsalive-0.0.0-alpha.38.jar"') + || !packwizIndex.contains('file = "mods/iliketomoveit-0.0.0-alpha.18.jar"') + || !packwizIndex.contains('file = "mods/sanctuary-0.0.0-alpha.129.jar"')) { throw new GradleException("The alpha.202 Waystone, Shop and culinary lectern release is incomplete") } } @@ -5095,9 +5104,9 @@ tasks.register("verifySafeVaultFeature") { def image = javax.imageio.ImageIO.read(file("anotherworld/src/main/resources/assets/anotherworld/textures/${path}")) image == null || image.width != size[0] || image.height != size[1] }.keySet() - if (rootProject.pack_version != "26.2.0-alpha.224" - || rootProject.anotherworld_version != "0.0.0-alpha.55" - || rootProject.sanctuary_version != "0.0.0-alpha.128" + if (rootProject.pack_version != "26.2.0-alpha.225" + || rootProject.anotherworld_version != "0.0.0-alpha.56" + || rootProject.sanctuary_version != "0.0.0-alpha.129" || migration.schema_version != 1 || migration.source?.pack_version != "26.2.0-alpha.201" || migration.target?.pack_version != "26.2.0-alpha.202" @@ -5287,8 +5296,8 @@ tasks.register("verifySafeVaultInterfaceAlpha203Release") { def packwiz = file("pack/packwiz/pack.toml").text def packwizIndex = file("pack/packwiz/index.toml").text def jeiFiles = prism.files.findAll { it.path == "mods/jei-26.2-fabric-30.29.0.198.jar" } - if (rootProject.pack_version != "26.2.0-alpha.224" - || rootProject.anotherworld_version != "0.0.0-alpha.55" + if (rootProject.pack_version != "26.2.0-alpha.225" + || rootProject.anotherworld_version != "0.0.0-alpha.56" || migration.source?.pack_version != "26.2.0-alpha.202" || migration.source?.modules != [anotherworld: "0.0.0-alpha.50"] || migration.target?.pack_version != "26.2.0-alpha.203" @@ -5305,10 +5314,10 @@ tasks.register("verifySafeVaultInterfaceAlpha203Release") { || migration.distribution?.jei?.modrinth_version_id != "XXTFqqwG" || migration.distribution?.jei?.prism_manifest_updated != true || release.pack_version != rootProject.pack_version - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.224.mrpack" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.225.mrpack" || prism.versionId != rootProject.pack_version - || !packwiz.contains('version = "26.2.0-alpha.224"') - || !packwizIndex.contains('file = "mods/anotherworld-0.0.0-alpha.55.jar"') + || !packwiz.contains('version = "26.2.0-alpha.225"') + || !packwizIndex.contains('file = "mods/anotherworld-0.0.0-alpha.56.jar"') || packwizIndex.contains('file = "mods/anotherworld-0.0.0-alpha.50.jar"') || jeiFiles.size() != 1 || jeiFiles[0].hashes?.sha1 != "652e964c71a699fdfdd96cda265ea703b13c6ef4" @@ -5333,8 +5342,8 @@ tasks.register("verifySafeVaultFixAlpha204Release") { def packwiz = file("pack/packwiz/pack.toml").text def packwizIndex = file("pack/packwiz/index.toml").text def jeiFiles = prism.files.findAll { it.path == "mods/jei-26.2-fabric-30.29.0.198.jar" } - if (rootProject.pack_version != "26.2.0-alpha.224" - || rootProject.anotherworld_version != "0.0.0-alpha.55" + if (rootProject.pack_version != "26.2.0-alpha.225" + || rootProject.anotherworld_version != "0.0.0-alpha.56" || migration.source?.pack_version != "26.2.0-alpha.203" || migration.source?.modules != [anotherworld: "0.0.0-alpha.51"] || migration.target?.pack_version != "26.2.0-alpha.204" @@ -5359,10 +5368,10 @@ tasks.register("verifySafeVaultFixAlpha204Release") { || migration.distribution?.jei?.modrinth_version_id != "OcMayhUH" || migration.distribution?.jei?.prism_manifest_updated != true || release.pack_version != rootProject.pack_version - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.224.mrpack" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.225.mrpack" || prism.versionId != rootProject.pack_version - || !packwiz.contains('version = "26.2.0-alpha.224"') - || !packwizIndex.contains('file = "mods/anotherworld-0.0.0-alpha.55.jar"') + || !packwiz.contains('version = "26.2.0-alpha.225"') + || !packwizIndex.contains('file = "mods/anotherworld-0.0.0-alpha.56.jar"') || packwizIndex.contains('file = "mods/anotherworld-0.0.0-alpha.51.jar"') || jeiFiles.size() != 1 || jeiFiles[0].hashes?.sha1 != "652e964c71a699fdfdd96cda265ea703b13c6ef4" @@ -5387,8 +5396,8 @@ tasks.register("verifySafeVaultCubeAlpha205Release") { def packwiz = file("pack/packwiz/pack.toml").text def packwizIndex = file("pack/packwiz/index.toml").text def jeiFiles = prism.files.findAll { it.path == "mods/jei-26.2-fabric-30.29.0.198.jar" } - if (rootProject.pack_version != "26.2.0-alpha.224" - || rootProject.anotherworld_version != "0.0.0-alpha.55" + if (rootProject.pack_version != "26.2.0-alpha.225" + || rootProject.anotherworld_version != "0.0.0-alpha.56" || migration.source?.pack_version != "26.2.0-alpha.204" || migration.source?.modules != [anotherworld: "0.0.0-alpha.52"] || migration.target?.pack_version != "26.2.0-alpha.205" @@ -5416,10 +5425,10 @@ tasks.register("verifySafeVaultCubeAlpha205Release") { || migration.distribution?.jei?.modrinth_version_id != "NtfJDMhk" || migration.distribution?.jei?.prism_manifest_updated != true || release.pack_version != rootProject.pack_version - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.224.mrpack" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.225.mrpack" || prism.versionId != rootProject.pack_version - || !packwiz.contains('version = "26.2.0-alpha.224"') - || !packwizIndex.contains('file = "mods/anotherworld-0.0.0-alpha.55.jar"') + || !packwiz.contains('version = "26.2.0-alpha.225"') + || !packwizIndex.contains('file = "mods/anotherworld-0.0.0-alpha.56.jar"') || packwizIndex.contains('file = "mods/anotherworld-0.0.0-alpha.52.jar"') || jeiFiles.size() != 1 || jeiFiles[0].hashes?.sha1 != "652e964c71a699fdfdd96cda265ea703b13c6ef4" @@ -5445,8 +5454,8 @@ tasks.register("verifySafeVaultCtmAlpha206Release") { def packwiz = file("pack/packwiz/pack.toml").text def packwizIndex = file("pack/packwiz/index.toml").text def jeiFiles = prism.files.findAll { it.path == "mods/jei-26.2-fabric-30.29.0.198.jar" } - if (rootProject.pack_version != "26.2.0-alpha.224" - || rootProject.anotherworld_version != "0.0.0-alpha.55" + if (rootProject.pack_version != "26.2.0-alpha.225" + || rootProject.anotherworld_version != "0.0.0-alpha.56" || migration.source?.pack_version != "26.2.0-alpha.205" || migration.source?.modules != [anotherworld: "0.0.0-alpha.53"] || migration.target?.pack_version != "26.2.0-alpha.206" @@ -5468,10 +5477,10 @@ tasks.register("verifySafeVaultCtmAlpha206Release") { || migration.compatibility?.pack_release_updated != true || migration.distribution?.packwiz_index_refreshed != true || release.pack_version != rootProject.pack_version - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.224.mrpack" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.225.mrpack" || prism.versionId != rootProject.pack_version - || !packwiz.contains('version = "26.2.0-alpha.224"') - || !packwizIndex.contains('file = "mods/anotherworld-0.0.0-alpha.55.jar"') + || !packwiz.contains('version = "26.2.0-alpha.225"') + || !packwizIndex.contains('file = "mods/anotherworld-0.0.0-alpha.56.jar"') || packwizIndex.contains('file = "mods/anotherworld-0.0.0-alpha.53.jar"') || jeiFiles.size() != 1 || jeiFiles[0].hashes?.sha1 != "652e964c71a699fdfdd96cda265ea703b13c6ef4" @@ -5497,8 +5506,8 @@ tasks.register("verifySafeVaultUnlimitedAlpha207Release") { def packwiz = file("pack/packwiz/pack.toml").text def packwizIndex = file("pack/packwiz/index.toml").text def jeiFiles = prism.files.findAll { it.path == "mods/jei-26.2-fabric-30.29.0.198.jar" } - if (rootProject.pack_version != "26.2.0-alpha.224" - || rootProject.anotherworld_version != "0.0.0-alpha.55" + if (rootProject.pack_version != "26.2.0-alpha.225" + || rootProject.anotherworld_version != "0.0.0-alpha.56" || migration.source?.pack_version != "26.2.0-alpha.206" || migration.source?.modules != [anotherworld: "0.0.0-alpha.54"] || migration.target?.pack_version != "26.2.0-alpha.207" @@ -5527,10 +5536,10 @@ tasks.register("verifySafeVaultUnlimitedAlpha207Release") { || migration.compatibility?.pack_release_updated != true || migration.distribution?.packwiz_index_refreshed != true || release.pack_version != rootProject.pack_version - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.224.mrpack" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.225.mrpack" || prism.versionId != rootProject.pack_version - || !packwiz.contains('version = "26.2.0-alpha.224"') - || !packwizIndex.contains('file = "mods/anotherworld-0.0.0-alpha.55.jar"') + || !packwiz.contains('version = "26.2.0-alpha.225"') + || !packwizIndex.contains('file = "mods/anotherworld-0.0.0-alpha.56.jar"') || packwizIndex.contains('file = "mods/anotherworld-0.0.0-alpha.54.jar"') || jeiFiles.size() != 1 || jeiFiles[0].hashes?.sha1 != "652e964c71a699fdfdd96cda265ea703b13c6ef4" @@ -5585,8 +5594,8 @@ tasks.register("verifyCanapliaFoundation") { "itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/ItsAliveMod.java").text def visualApiSource = file( "ambiance/src/main/java/fr/koka99cab/sanctuary26/ambiance/api/visual/AmbianceVisualEffectApi.java").text - if (rootProject.pack_version != "26.2.0-alpha.224" - || rootProject.itsalive_version != "0.0.0-alpha.37" + if (rootProject.pack_version != "26.2.0-alpha.225" + || rootProject.itsalive_version != "0.0.0-alpha.38" || rootProject.ambiance_version != "0.0.0-alpha.22" || migration.issue != 35 || migration.source?.fabric_id != "canaplia" @@ -5837,10 +5846,10 @@ tasks.register("verifyCanapliaAlpha209Release") { ambiance: "0.0.0-alpha.14", itsalive: "0.0.0-alpha.33", onlyfun: "0.0.0-alpha.20"] - if (rootProject.pack_version != "26.2.0-alpha.224" + if (rootProject.pack_version != "26.2.0-alpha.225" || rootProject.ambiance_version != "0.0.0-alpha.22" - || rootProject.itsalive_version != "0.0.0-alpha.37" - || rootProject.onlyfun_version != "0.0.0-alpha.26" + || rootProject.itsalive_version != "0.0.0-alpha.38" + || rootProject.onlyfun_version != "0.0.0-alpha.27" || migration.source?.pack_version != "26.2.0-alpha.207" || migration.source?.modules != expectedSource || migration.target?.pack_version != "26.2.0-alpha.208" @@ -5885,12 +5894,12 @@ tasks.register("verifyCanapliaAlpha209Release") { || fixMigration.compatibility?.network_protocol_changed != false || fixMigration.distribution?.pack_release_updated != true || release.pack_version != rootProject.pack_version - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.224.mrpack" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.225.mrpack" || prism.versionId != rootProject.pack_version - || !packwiz.contains('version = "26.2.0-alpha.224"') + || !packwiz.contains('version = "26.2.0-alpha.225"') || !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.22.jar"') - || !packwizIndex.contains('file = "mods/itsalive-0.0.0-alpha.37.jar"') - || !packwizIndex.contains('file = "mods/onlyfun-0.0.0-alpha.26.jar"') + || !packwizIndex.contains('file = "mods/itsalive-0.0.0-alpha.38.jar"') + || !packwizIndex.contains('file = "mods/onlyfun-0.0.0-alpha.27.jar"') || packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.12.jar"') || packwizIndex.contains('file = "mods/itsalive-0.0.0-alpha.33.jar"') || packwizIndex.contains('file = "mods/onlyfun-0.0.0-alpha.19.jar"') @@ -5939,12 +5948,12 @@ tasks.register("verifyAlpha210Release") { itsalive: "0.0.0-alpha.35"] def currentModules = [ ambiance: "0.0.0-alpha.22", - sanctuary: "0.0.0-alpha.128", - onlyfun: "0.0.0-alpha.26", + sanctuary: "0.0.0-alpha.129", + onlyfun: "0.0.0-alpha.27", ouch: "0.0.0-alpha.11", masterkey: "0.0.0-alpha.9", - iliketomoveit: "0.0.0-alpha.17", - itsalive: "0.0.0-alpha.37"] + iliketomoveit: "0.0.0-alpha.18", + itsalive: "0.0.0-alpha.38"] def requiredJars = currentModules.collect { id, version -> "file = \"mods/${id}-${version}.jar\"" } @@ -5956,11 +5965,11 @@ tasks.register("verifyAlpha210Release") { def jeiFiles = prism.files.findAll { it.path == "mods/jei-26.2-fabric-30.29.0.198.jar" } - if (rootProject.pack_version != "26.2.0-alpha.224" - || rootProject.sanctuary_version != "0.0.0-alpha.128" - || rootProject.onlyfun_version != "0.0.0-alpha.26" - || rootProject.iliketomoveit_version != "0.0.0-alpha.17" - || rootProject.itsalive_version != "0.0.0-alpha.37" + if (rootProject.pack_version != "26.2.0-alpha.225" + || rootProject.sanctuary_version != "0.0.0-alpha.129" + || rootProject.onlyfun_version != "0.0.0-alpha.27" + || rootProject.iliketomoveit_version != "0.0.0-alpha.18" + || rootProject.itsalive_version != "0.0.0-alpha.38" || migration.source?.pack_version != "26.2.0-alpha.209" || migration.source?.modules != expectedSource || migration.target?.pack_version != "26.2.0-alpha.210" @@ -6002,10 +6011,10 @@ tasks.register("verifyAlpha210Release") { || manifests.iliketomoveit.custom?.sanctuary26?.network_protocol != 5 || manifests.itsalive.custom?.sanctuary26?.data_version != 4 || manifests.itsalive.custom?.sanctuary26?.network_protocol != 4 - || release.pack_version != "26.2.0-alpha.224" - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.224.mrpack" - || prism.versionId != "26.2.0-alpha.224" - || !packwiz.contains('version = "26.2.0-alpha.224"') + || release.pack_version != "26.2.0-alpha.225" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.225.mrpack" + || prism.versionId != "26.2.0-alpha.225" + || !packwiz.contains('version = "26.2.0-alpha.225"') || requiredJars.any { !packwizIndex.contains(it) } || obsoleteJars.any { packwizIndex.contains(it) } || jeiFiles.size() != 1 @@ -6052,11 +6061,11 @@ tasks.register("verifyAlpha211Release") { ouch: "0.0.0-alpha.10", sanctuary: "0.0.0-alpha.119"] def currentModules = expectedTarget + [ - sanctuary: "0.0.0-alpha.128", - onlyfun: "0.0.0-alpha.26", + sanctuary: "0.0.0-alpha.129", + onlyfun: "0.0.0-alpha.27", ambiance: "0.0.0-alpha.22", - iliketomoveit: "0.0.0-alpha.17", - itsalive: "0.0.0-alpha.37", + iliketomoveit: "0.0.0-alpha.18", + itsalive: "0.0.0-alpha.38", ouch: "0.0.0-alpha.11", masterkey: "0.0.0-alpha.9"] def workspaceModules = currentModules @@ -6086,7 +6095,7 @@ tasks.register("verifyAlpha211Release") { def jeiFiles = prism.files.findAll { it.path == "mods/jei-26.2-fabric-30.29.0.198.jar" } - if (rootProject.pack_version != "26.2.0-alpha.224" + if (rootProject.pack_version != "26.2.0-alpha.225" || workspaceModules.any { id, version -> rootProject.property("${id}_version") != version } || migration.source?.pack_version != "26.2.0-alpha.210" || migration.source?.modules != expectedSource @@ -6114,9 +6123,9 @@ tasks.register("verifyAlpha211Release") { || migration.distribution?.prism_modrinth_index_updated != true || migration.distribution?.shared_client_server_mrpack != true || release.pack_version != rootProject.pack_version - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.224.mrpack" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.225.mrpack" || prism.versionId != rootProject.pack_version - || !packwiz.contains('version = "26.2.0-alpha.224"') + || !packwiz.contains('version = "26.2.0-alpha.225"') || requiredJars.any { !packwizIndex.contains(it) } || obsoleteJars.any { packwizIndex.contains(it) } || prism.files?.size() != 5 @@ -6124,7 +6133,7 @@ tasks.register("verifyAlpha211Release") { || jeiFiles[0].hashes?.sha1 != "652e964c71a699fdfdd96cda265ea703b13c6ef4" || jeiFiles[0].hashes?.sha512 != "06131c9528549840e07ddc9634e23454cd454380d7749a23d818f0efe0dacc02874e967ceb74a24ee82efb13e0fe2df4026f988a68f54f890586967e91dcaa5b" || !changelog.contains("## `26.2.0-alpha.211`") - || !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.224`**")) { + || !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.225`**")) { throw new GradleException("The alpha.211 Abjection and gameplay-polish release is incomplete") } } @@ -6158,8 +6167,8 @@ tasks.register("verifyAlpha212Release") { def jeiFiles = prism.files.findAll { it.path == "mods/jei-26.2-fabric-30.29.0.198.jar" } - if (rootProject.pack_version != "26.2.0-alpha.224" - || rootProject.sanctuary_version != "0.0.0-alpha.128" + if (rootProject.pack_version != "26.2.0-alpha.225" + || rootProject.sanctuary_version != "0.0.0-alpha.129" || migration.source?.pack_version != "26.2.0-alpha.211" || migration.source?.modules != [sanctuary: "0.0.0-alpha.119"] || migration.target?.pack_version != "26.2.0-alpha.212" @@ -6180,16 +6189,16 @@ tasks.register("verifyAlpha212Release") { || manifest.custom?.sanctuary26?.data_version != 13 || manifest.custom?.sanctuary26?.network_protocol != 23 || !minecraftMixin.contains('method = "pickBlockOrEntity"') - || release.pack_version != "26.2.0-alpha.224" - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.224.mrpack" - || prism.versionId != "26.2.0-alpha.224" + || release.pack_version != "26.2.0-alpha.225" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.225.mrpack" + || prism.versionId != "26.2.0-alpha.225" || prism.files?.size() != 5 || jeiFiles.size() != 1 - || !packwiz.contains('version = "26.2.0-alpha.224"') - || !packwizIndex.contains('file = "mods/sanctuary-0.0.0-alpha.128.jar"') + || !packwiz.contains('version = "26.2.0-alpha.225"') + || !packwizIndex.contains('file = "mods/sanctuary-0.0.0-alpha.129.jar"') || packwizIndex.contains('file = "mods/sanctuary-0.0.0-alpha.119.jar"') || !changelog.contains("## `26.2.0-alpha.212`") - || !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.224`**")) { + || !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.225`**")) { throw new GradleException("The alpha.212 Black Market startup-fix release is incomplete") } } @@ -6223,7 +6232,7 @@ tasks.register("verifyAlpha213Release") { def jeiFiles = prism.files.findAll { it.path == "mods/jei-26.2-fabric-30.29.0.198.jar" } - if (rootProject.pack_version != "26.2.0-alpha.224" + if (rootProject.pack_version != "26.2.0-alpha.225" || rootProject.ambiance_version != "0.0.0-alpha.22" || migration.source?.pack_version != "26.2.0-alpha.212" || migration.source?.modules != [ambiance: "0.0.0-alpha.15"] @@ -6247,16 +6256,16 @@ tasks.register("verifyAlpha213Release") { || manifest.custom?.sanctuary26?.network_protocol != 6 || !levelEventMixin.contains('@Mixin(LevelEventHandler.class)') || !levelEventMixin.contains('@Inject(method = "levelEvent"') - || release.pack_version != "26.2.0-alpha.224" - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.224.mrpack" - || prism.versionId != "26.2.0-alpha.224" + || release.pack_version != "26.2.0-alpha.225" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.225.mrpack" + || prism.versionId != "26.2.0-alpha.225" || prism.files?.size() != 5 || jeiFiles.size() != 1 - || !packwiz.contains('version = "26.2.0-alpha.224"') + || !packwiz.contains('version = "26.2.0-alpha.225"') || !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.22.jar"') || packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.15.jar"') || !changelog.contains("## `26.2.0-alpha.213`") - || !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.224`**")) { + || !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.225`**")) { throw new GradleException("The alpha.213 Ambiance startup-fix release is incomplete") } } @@ -6291,7 +6300,7 @@ tasks.register("verifyAlpha214Release") { "ambiance/src/main/java/fr/koka99cab/sanctuary26/ambiance/client/audio/WhiteDiscAudioPlayer.java").text def urlSmoke = file( "ambiance/src/test/java/fr/koka99cab/sanctuary26/ambiance/white_disc/WhiteDiscUrlSmoke.java").text - if (rootProject.pack_version != "26.2.0-alpha.224" + if (rootProject.pack_version != "26.2.0-alpha.225" || rootProject.ambiance_version != "0.0.0-alpha.22" || migration.source?.pack_version != "26.2.0-alpha.213" || migration.source?.modules != [ambiance: "0.0.0-alpha.16"] @@ -6320,16 +6329,16 @@ tasks.register("verifyAlpha214Release") { || !audioPlayer.contains('message.ambiance.white_disc.loading') || !audioPlayer.contains('message.ambiance.white_disc.failed') || !urlSmoke.contains("https://youtu.be/Ue5ZBe-GzSM?si=78LSbtBQzUYzhA2Y") - || release.pack_version != "26.2.0-alpha.224" - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.224.mrpack" - || prism.versionId != "26.2.0-alpha.224" + || release.pack_version != "26.2.0-alpha.225" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.225.mrpack" + || prism.versionId != "26.2.0-alpha.225" || prism.files?.size() != 5 - || !packwiz.contains('version = "26.2.0-alpha.224"') + || !packwiz.contains('version = "26.2.0-alpha.225"') || !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.22.jar"') || packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.16.jar"') || !changelog.contains("## `26.2.0-alpha.214`") || changelog.contains("## Modifications non distribuées") - || !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.224`**")) { + || !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.225`**")) { throw new GradleException("The alpha.214 white-disc solo synchronization release is incomplete") } } @@ -6370,7 +6379,7 @@ tasks.register("verifyAlpha215Release") { "ambiance/src/main/java/fr/koka99cab/sanctuary26/ambiance/client/audio/LavaplayerAudioStream.java").text def playbackSmoke = file( "ambiance/src/test/java/fr/koka99cab/sanctuary26/ambiance/client/audio/WhiteDiscPlaybackSmoke.java").text - if (rootProject.pack_version != "26.2.0-alpha.224" + if (rootProject.pack_version != "26.2.0-alpha.225" || rootProject.ambiance_version != "0.0.0-alpha.22" || migration.source?.pack_version != "26.2.0-alpha.214" || migration.source?.modules != [ambiance: "0.0.0-alpha.17"] @@ -6410,16 +6419,16 @@ tasks.register("verifyAlpha215Release") { || !playbackSmoke.contains("https://www.youtube.com/watch?v=Ue5ZBe-GzSM") || !playbackSmoke.contains("stream.paddedSilenceBytes() != 0L") || !playbackSmoke.contains("stream.decodedTimelineMillis() != 4_000L") - || release.pack_version != "26.2.0-alpha.224" - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.224.mrpack" - || prism.versionId != "26.2.0-alpha.224" + || release.pack_version != "26.2.0-alpha.225" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.225.mrpack" + || prism.versionId != "26.2.0-alpha.225" || prism.files?.size() != 5 - || !packwiz.contains('version = "26.2.0-alpha.224"') + || !packwiz.contains('version = "26.2.0-alpha.225"') || !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.22.jar"') || packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.17.jar"') || !changelog.contains("## `26.2.0-alpha.215`") || changelog.contains("## Modifications non distribuées") - || !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.224`**")) { + || !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.225`**")) { throw new GradleException("The alpha.215 resilient white-disc playback release is incomplete") } } @@ -6464,7 +6473,7 @@ tasks.register("verifyAlpha216Release") { "ambiance/src/test/java/fr/koka99cab/sanctuary26/ambiance/client/audio/LavaplayerAudioStreamSmoke.java").text def playbackSmoke = file( "ambiance/src/test/java/fr/koka99cab/sanctuary26/ambiance/client/audio/WhiteDiscPlaybackSmoke.java").text - if (rootProject.pack_version != "26.2.0-alpha.224" + if (rootProject.pack_version != "26.2.0-alpha.225" || rootProject.ambiance_version != "0.0.0-alpha.22" || migration.source?.pack_version != "26.2.0-alpha.215" || migration.source?.modules != [ambiance: "0.0.0-alpha.18"] @@ -6508,16 +6517,16 @@ tasks.register("verifyAlpha216Release") { || !playbackSmoke.contains("stream.paddedSilenceBytes() != 0L") || !playbackSmoke.contains("stream.decodedTimelineMillis() != 4_000L") || !playbackSmoke.contains("LavaplayerAudioStream.SAMPLE_RATE * 2 * 4") - || release.pack_version != "26.2.0-alpha.224" - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.224.mrpack" - || prism.versionId != "26.2.0-alpha.224" + || release.pack_version != "26.2.0-alpha.225" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.225.mrpack" + || prism.versionId != "26.2.0-alpha.225" || prism.files?.size() != 5 - || !packwiz.contains('version = "26.2.0-alpha.224"') + || !packwiz.contains('version = "26.2.0-alpha.225"') || !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.22.jar"') || packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.18.jar"') || !changelog.contains("## `26.2.0-alpha.216`") || changelog.contains("## Modifications non distribuées") - || !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.224`**")) { + || !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.225`**")) { throw new GradleException("The alpha.216 white-disc audio-quality release is incomplete") } } @@ -6552,7 +6561,7 @@ tasks.register("verifyAlpha217Release") { "ambiance/src/main/java/fr/koka99cab/sanctuary26/ambiance/client/audio/WhiteDiscAudioPlayer.java").text def streamSmoke = file( "ambiance/src/test/java/fr/koka99cab/sanctuary26/ambiance/client/audio/LavaplayerAudioStreamSmoke.java").text - if (rootProject.pack_version != "26.2.0-alpha.224" + if (rootProject.pack_version != "26.2.0-alpha.225" || rootProject.ambiance_version != "0.0.0-alpha.22" || migration.source?.pack_version != "26.2.0-alpha.216" || migration.source?.modules != [ambiance: "0.0.0-alpha.19"] @@ -6583,16 +6592,16 @@ tasks.register("verifyAlpha217Release") { || !audioPlayer.contains("PLAYBACK_PITCH = 1.0F") || audioPlayer.count("channel.setPitch(PLAYBACK_PITCH)") != 2 || !streamSmoke.contains("WhiteDiscAudioPlayer.PLAYBACK_PITCH - 1.0F") - || release.pack_version != "26.2.0-alpha.224" - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.224.mrpack" - || prism.versionId != "26.2.0-alpha.224" + || release.pack_version != "26.2.0-alpha.225" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.225.mrpack" + || prism.versionId != "26.2.0-alpha.225" || prism.files?.size() != 5 - || !packwiz.contains('version = "26.2.0-alpha.224"') + || !packwiz.contains('version = "26.2.0-alpha.225"') || !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.22.jar"') || packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.19.jar"') || !changelog.contains("## `26.2.0-alpha.217`") || changelog.contains("## Modifications non distribuées") - || !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.224`**")) { + || !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.225`**")) { throw new GradleException("The alpha.217 white-disc pitch release is incomplete") } } @@ -6640,25 +6649,25 @@ tasks.register("verifyAlpha218Release") { def targetModules = [ redstoner: "0.0.0-alpha.11", onlyfun: "0.0.0-alpha.25", sanctuary: "0.0.0-alpha.121"] def currentModules = targetModules + [redstoner: "0.0.0-alpha.13", - sanctuary: "0.0.0-alpha.128", onlyfun: "0.0.0-alpha.26", - iliketomoveit: "0.0.0-alpha.17", ambiance: "0.0.0-alpha.22", - itsalive: "0.0.0-alpha.37", ouch: "0.0.0-alpha.11", masterkey: "0.0.0-alpha.9"] + sanctuary: "0.0.0-alpha.129", onlyfun: "0.0.0-alpha.27", + iliketomoveit: "0.0.0-alpha.18", ambiance: "0.0.0-alpha.22", + itsalive: "0.0.0-alpha.38", ouch: "0.0.0-alpha.11", masterkey: "0.0.0-alpha.9"] def requiredJars = currentModules.collect { id, version -> "file = \"mods/${id}-${version}.jar\"" } def obsoleteJars = sourceModules.collect { id, version -> "file = \"mods/${id}-${version}.jar\"" } - if (rootProject.pack_version != "26.2.0-alpha.224" + if (rootProject.pack_version != "26.2.0-alpha.225" || rootProject.redstoner_version != "0.0.0-alpha.13" || currentModules.findAll { id, version -> id != "redstoner" && id != "sanctuary" && id != "onlyfun" && id != "iliketomoveit" }.any { id, version -> rootProject.property("${id}_version") != version } - || rootProject.onlyfun_version != "0.0.0-alpha.26" - || rootProject.iliketomoveit_version != "0.0.0-alpha.17" - || rootProject.sanctuary_version != "0.0.0-alpha.128" + || rootProject.onlyfun_version != "0.0.0-alpha.27" + || rootProject.iliketomoveit_version != "0.0.0-alpha.18" + || rootProject.sanctuary_version != "0.0.0-alpha.129" || migration.source?.pack_version != "26.2.0-alpha.217" || migration.source?.modules != sourceModules || migration.target?.pack_version != "26.2.0-alpha.218" @@ -6690,13 +6699,13 @@ tasks.register("verifyAlpha218Release") { || !onlyFunPolicy.contains('namespace.equals("redstoner") && path.equals("storage_terminal")') || !blackMarketPolicy.contains('namespace.equals("redstoner") && path.equals("storage_terminal")') || release.pack_version != rootProject.pack_version - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.224.mrpack" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.225.mrpack" || prism.versionId != rootProject.pack_version - || !packwiz.contains('version = "26.2.0-alpha.224"') + || !packwiz.contains('version = "26.2.0-alpha.225"') || requiredJars.any { !packwizIndex.contains(it) } || obsoleteJars.any { packwizIndex.contains(it) } || !changelog.contains("## `26.2.0-alpha.218`") - || !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.224`**")) { + || !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.225`**")) { throw new GradleException("The alpha.218 Storage Terminal release is incomplete") } } @@ -6741,9 +6750,9 @@ tasks.register("verifyAlpha219Release") { def targetModules = [ sanctuary: "0.0.0-alpha.122", iliketomoveit: "0.0.0-alpha.16", ambiance: "0.0.0-alpha.21"] def currentModules = targetModules + [ - ambiance: "0.0.0-alpha.22", sanctuary: "0.0.0-alpha.128", - iliketomoveit: "0.0.0-alpha.17", onlyfun: "0.0.0-alpha.26", - itsalive: "0.0.0-alpha.37", ouch: "0.0.0-alpha.11", masterkey: "0.0.0-alpha.9"] + ambiance: "0.0.0-alpha.22", sanctuary: "0.0.0-alpha.129", + iliketomoveit: "0.0.0-alpha.18", onlyfun: "0.0.0-alpha.27", + itsalive: "0.0.0-alpha.38", ouch: "0.0.0-alpha.11", masterkey: "0.0.0-alpha.9"] def workspaceModules = currentModules def requiredJars = currentModules.collect { id, version -> "file = \"mods/${id}-${version}.jar\"" @@ -6759,7 +6768,7 @@ tasks.register("verifyAlpha219Release") { include "**/*golden*days*.zip", "**/*golden*days*.jar" exclude "**/build/**", "**/.gradle/**", "**/.git/**" }.files - if (rootProject.pack_version != "26.2.0-alpha.224" + if (rootProject.pack_version != "26.2.0-alpha.225" || workspaceModules.any { id, version -> rootProject.property("${id}_version") != version } || migration.source?.pack_version != "26.2.0-alpha.218" || migration.source?.modules != sourceModules @@ -6791,15 +6800,15 @@ tasks.register("verifyAlpha219Release") { || manifests.ambiance.custom?.sanctuary26?.data_version != 2 || manifests.ambiance.custom?.sanctuary26?.network_protocol != 6 || release.pack_version != rootProject.pack_version - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.224.mrpack" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.225.mrpack" || prism.versionId != rootProject.pack_version || prism.files.any { it.path.toLowerCase().contains("golden-days") } - || !packwiz.contains('version = "26.2.0-alpha.224"') + || !packwiz.contains('version = "26.2.0-alpha.225"') || requiredJars.any { !packwizIndex.contains(it) } || obsoleteJars.any { packwizIndex.contains(it) } || !forbiddenGoldenArchives.isEmpty() || !changelog.contains("## `26.2.0-alpha.219`") - || !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.224`**")) { + || !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.225`**")) { throw new GradleException("The alpha.219 finite Alpha/Indev release is incomplete") } } @@ -6838,7 +6847,7 @@ tasks.register("verifyAlpha220Release") { "redstoner/src/main/java/fr/koka99cab/sanctuary26/redstoner/client/gui/StorageTerminalScreen.java").text def networking = file( "redstoner/src/main/java/fr/koka99cab/sanctuary26/redstoner/network/RedStonerNetworking.java").text - if (rootProject.pack_version != "26.2.0-alpha.224" + if (rootProject.pack_version != "26.2.0-alpha.225" || rootProject.redstoner_version != "0.0.0-alpha.13" || migration.source?.pack_version != "26.2.0-alpha.219" || migration.source?.modules != [redstoner: "0.0.0-alpha.11"] @@ -6879,13 +6888,13 @@ tasks.register("verifyAlpha220Release") { || networking.contains("storage_terminal_snapshot") || networking.contains("storage_terminal_action") || release.pack_version != rootProject.pack_version - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.224.mrpack" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.225.mrpack" || prism.versionId != rootProject.pack_version - || !packwiz.contains('version = "26.2.0-alpha.224"') + || !packwiz.contains('version = "26.2.0-alpha.225"') || !packwizIndex.contains('file = "mods/redstoner-0.0.0-alpha.13.jar"') || packwizIndex.contains('file = "mods/redstoner-0.0.0-alpha.11.jar"') || !changelog.contains("## `26.2.0-alpha.220`") - || !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.224`**")) { + || !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.225`**")) { throw new GradleException("The alpha.220 Storage Terminal menu release is incomplete") } } @@ -6933,7 +6942,7 @@ tasks.register("verifyAlpha221Release") { def playbackSmoke = file( "ambiance/src/test/java/fr/koka99cab/sanctuary26/ambiance/client/audio/WhiteDiscPlaybackSmoke.java").text def contract = migration.white_disc_native_rate - if (rootProject.pack_version != "26.2.0-alpha.224" + if (rootProject.pack_version != "26.2.0-alpha.225" || rootProject.ambiance_version != "0.0.0-alpha.22" || migration.source?.pack_version != "26.2.0-alpha.220" || migration.source?.modules != [ambiance: "0.0.0-alpha.21"] @@ -6982,13 +6991,13 @@ tasks.register("verifyAlpha221Release") { || !playbackSmoke.contains("PCM cadence: 100%% speed") || !whiteDiscDocumentation.contains("48 000 Hz") || release.pack_version != rootProject.pack_version - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.224.mrpack" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.225.mrpack" || prism.versionId != rootProject.pack_version - || !packwiz.contains('version = "26.2.0-alpha.224"') + || !packwiz.contains('version = "26.2.0-alpha.225"') || !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.22.jar"') || packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.21.jar"') || !changelog.contains("## `26.2.0-alpha.221`") - || !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.224`**")) { + || !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.225`**")) { throw new GradleException("The alpha.221 native-rate white-disc release is incomplete") } } @@ -7067,9 +7076,9 @@ tasks.register("verifyAlpha222Release") { def jeiFiles = prism.files.findAll { it.path == "mods/jei-26.2-fabric-30.29.0.198.jar" } - if (rootProject.pack_version != "26.2.0-alpha.224" + if (rootProject.pack_version != "26.2.0-alpha.225" || rootProject.redstoner_version != "0.0.0-alpha.13" - || rootProject.sanctuary_version != "0.0.0-alpha.128" + || rootProject.sanctuary_version != "0.0.0-alpha.129" || migration.source?.pack_version != "26.2.0-alpha.221" || migration.source?.modules != [ redstoner: "0.0.0-alpha.12", sanctuary: "0.0.0-alpha.122"] @@ -7142,12 +7151,12 @@ tasks.register("verifyAlpha222Release") { || !questEditor.contains("QuestIdSuggestions.suggest") || !suggestions.contains("Normalizer.Form.NFD") || !suggestions.contains("public static final int LIMIT = 5") - || release.pack_version != "26.2.0-alpha.224" - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.224.mrpack" - || prism.versionId != "26.2.0-alpha.224" - || !packwiz.contains('version = "26.2.0-alpha.224"') + || release.pack_version != "26.2.0-alpha.225" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.225.mrpack" + || prism.versionId != "26.2.0-alpha.225" + || !packwiz.contains('version = "26.2.0-alpha.225"') || !packwizIndex.contains('file = "mods/redstoner-0.0.0-alpha.13.jar"') - || !packwizIndex.contains('file = "mods/sanctuary-0.0.0-alpha.128.jar"') + || !packwizIndex.contains('file = "mods/sanctuary-0.0.0-alpha.129.jar"') || packwizIndex.contains('file = "mods/redstoner-0.0.0-alpha.12.jar"') || packwizIndex.contains('file = "mods/sanctuary-0.0.0-alpha.122.jar"') || !packwizJei.contains('filename = "jei-26.2-fabric-30.29.0.198.jar"') @@ -7156,7 +7165,7 @@ tasks.register("verifyAlpha222Release") { || jeiFiles[0].hashes?.sha1 != "652e964c71a699fdfdd96cda265ea703b13c6ef4" || jeiFiles[0].hashes?.sha512 != "06131c9528549840e07ddc9634e23454cd454380d7749a23d818f0efe0dacc02874e967ceb74a24ee82efb13e0fe2df4026f988a68f54f890586967e91dcaa5b" || !changelog.contains("## `26.2.0-alpha.222`") - || !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.224`**")) { + || !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.225`**")) { throw new GradleException("The alpha.222 terminal-search and quest-tracker release is incomplete") } } @@ -7226,8 +7235,8 @@ tasks.register("verifyAlpha223Release") { def jeiFiles = prism.files.findAll { it.path == "mods/jei-26.2-fabric-30.29.0.198.jar" } - if (rootProject.pack_version != "26.2.0-alpha.224" - || rootProject.sanctuary_version != "0.0.0-alpha.128" + if (rootProject.pack_version != "26.2.0-alpha.225" + || rootProject.sanctuary_version != "0.0.0-alpha.129" || migration.source?.pack_version != "26.2.0-alpha.222" || migration.source?.modules != [sanctuary: "0.0.0-alpha.124"] || migration.target?.pack_version != "26.2.0-alpha.223" @@ -7291,11 +7300,11 @@ tasks.register("verifyAlpha223Release") { || !questSync.contains("case EMERALD -> 2") || !inventorySmoke.contains("Hotbar snapshot must remain untouched") || !displaySmoke.contains("QuestTrackerDisplayMode.PANEL.next()") - || release.pack_version != "26.2.0-alpha.224" - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.224.mrpack" - || prism.versionId != "26.2.0-alpha.224" - || !packwiz.contains('version = "26.2.0-alpha.224"') - || !packwizIndex.contains('file = "mods/sanctuary-0.0.0-alpha.128.jar"') + || release.pack_version != "26.2.0-alpha.225" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.225.mrpack" + || prism.versionId != "26.2.0-alpha.225" + || !packwiz.contains('version = "26.2.0-alpha.225"') + || !packwizIndex.contains('file = "mods/sanctuary-0.0.0-alpha.129.jar"') || packwizIndex.contains('file = "mods/sanctuary-0.0.0-alpha.124.jar"') || !packwizJei.contains('filename = "jei-26.2-fabric-30.29.0.198.jar"') || !packwizJei.contains('version = "67Dvn8sL"') @@ -7303,7 +7312,7 @@ tasks.register("verifyAlpha223Release") { || jeiFiles[0].hashes?.sha1 != "652e964c71a699fdfdd96cda265ea703b13c6ef4" || jeiFiles[0].hashes?.sha512 != "06131c9528549840e07ddc9634e23454cd454380d7749a23d818f0efe0dacc02874e967ceb74a24ee82efb13e0fe2df4026f988a68f54f890586967e91dcaa5b" || !changelog.contains("## `26.2.0-alpha.223`") - || !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.224`**")) { + || !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.225`**")) { throw new GradleException("The alpha.223 inventory-sort and quest-tracker display release is incomplete") } } @@ -7345,6 +7354,9 @@ tasks.register("verifyAlpha224Release") { def targetModules = [ itsalive: "0.0.0-alpha.37", ouch: "0.0.0-alpha.11", masterkey: "0.0.0-alpha.9", iliketomoveit: "0.0.0-alpha.17", onlyfun: "0.0.0-alpha.26", sanctuary: "0.0.0-alpha.128"] + def currentModules = targetModules + [ + itsalive: "0.0.0-alpha.38", iliketomoveit: "0.0.0-alpha.18", + onlyfun: "0.0.0-alpha.27", sanctuary: "0.0.0-alpha.129"] def inventorySort = file( "sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/gameplay/SanctuaryInventorySort.java").text def clientProgress = file( @@ -7353,14 +7365,18 @@ tasks.register("verifyAlpha224Release") { "sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/network/SortInventoryPayload.java").text def networking = file( "sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/network/SanctuaryNetworking.java").text - def requiredJars = targetModules.collect { id, version -> + def requiredJars = currentModules.collect { id, version -> "file = \"mods/${id}-${version}.jar\"" } def obsoleteJars = sourceModules.collect { id, version -> "file = \"mods/${id}-${version}.jar\"" + } + targetModules.findAll { id, version -> + currentModules[id] != version + }.collect { id, version -> + "file = \"mods/${id}-${version}.jar\"" } - if (rootProject.pack_version != "26.2.0-alpha.224" - || targetModules.any { id, version -> rootProject.property("${id}_version") != version } + if (rootProject.pack_version != "26.2.0-alpha.225" + || currentModules.any { id, version -> rootProject.property("${id}_version") != version } || migration.status != "released" || migration.source?.pack_version != "26.2.0-alpha.223" || migration.source?.modules != sourceModules @@ -7402,19 +7418,170 @@ tasks.register("verifyAlpha224Release") { || !sortPayload.contains("buffer.writeBoolean(container)") || !sortPayload.contains("buffer.readBoolean()") || !networking.contains("PROTOCOL_VERSION = 23") - || release.pack_version != "26.2.0-alpha.224" - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.224.mrpack" - || prism.versionId != "26.2.0-alpha.224" - || !packwiz.contains('version = "26.2.0-alpha.224"') + || release.pack_version != "26.2.0-alpha.225" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.225.mrpack" + || prism.versionId != "26.2.0-alpha.225" + || !packwiz.contains('version = "26.2.0-alpha.225"') || requiredJars.any { !packwizIndex.contains(it) } || obsoleteJars.any { packwizIndex.contains(it) } || !changelog.contains("## `26.2.0-alpha.224`") - || !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.224`**")) { + || !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.225`**")) { throw new GradleException("The alpha.224 Notch, Magic Carpet and container-sort release is incomplete") } } } +tasks.register("verifyAlpha225Release") { + group = "verification" + description = "Checks the Sanctuary 26.2.0-alpha.225 four-ticket bug-fix release." + inputs.file(file("pack/migrations/26.2.0-alpha.224-four-bug-fixes-to-alpha.225.json")) + inputs.file(file("pack/release.json")) + inputs.file(file("pack/prism/modrinth.index.json")) + inputs.file(file("pack/packwiz/pack.toml")) + inputs.file(file("pack/packwiz/index.toml")) + inputs.file(file("CHANGELOG.md")) + inputs.file(file("README.md")) + inputs.files(["anotherworld", "itsalive", "iliketomoveit", "onlyfun", "sanctuary"].collect { + file("${it}/src/main/resources/fabric.mod.json") + }) + inputs.files( + file("anotherworld/src/main/java/fr/koka99cab/sanctuary26/anotherworld/vault/VaultData.java"), + file("anotherworld/src/main/java/fr/koka99cab/sanctuary26/anotherworld/vault/VaultDrillingService.java"), + file("anotherworld/src/test/java/fr/koka99cab/sanctuary26/anotherworld/vault/VaultRulesSmoke.java"), + file("itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/CanapliaVariantLifecycle.java"), + file("itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/block/CanapliaHempCropBlock.java"), + file("itsalive/src/test/java/fr/koka99cab/sanctuary26/itsalive/canaplia/CanapliaGameplaySmoke.java"), + file("sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/api/entity/SanctuaryEntityPolicy.java"), + file("sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/mixin/LivingEntityCompanionMixin.java"), + file("sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/shop/QuestBoardService.java"), + file("sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/shop/QuestRequestService.java"), + file("onlyfun/src/main/java/fr/koka99cab/sanctuary26/onlyfun/loot/OnlyFunLootboxDrops.java"), + file("iliketomoveit/src/main/resources/assets/iliketomoveit/models/item/magic_carpet.json"), + file("iliketomoveit/src/main/resources/assets/iliketomoveit/textures/item/magic_carpet.png")) + + doLast { + def migration = new JsonSlurper().parse(file( + "pack/migrations/26.2.0-alpha.224-four-bug-fixes-to-alpha.225.json")) + def release = new JsonSlurper().parse(file("pack/release.json")) + def prism = new JsonSlurper().parse(file("pack/prism/modrinth.index.json")) + def packwiz = file("pack/packwiz/pack.toml").text + def packwizIndex = file("pack/packwiz/index.toml").text + def changelog = file("CHANGELOG.md").text + def readme = file("README.md").text + def sourceModules = [ + anotherworld: "0.0.0-alpha.55", itsalive: "0.0.0-alpha.37", + iliketomoveit: "0.0.0-alpha.17", onlyfun: "0.0.0-alpha.26", + sanctuary: "0.0.0-alpha.128"] + def targetModules = [ + anotherworld: "0.0.0-alpha.56", itsalive: "0.0.0-alpha.38", + iliketomoveit: "0.0.0-alpha.18", onlyfun: "0.0.0-alpha.27", + sanctuary: "0.0.0-alpha.129"] + def workspaceModules = moduleIds.collectEntries { id -> + [(id): project(":${id}").version.toString()] + } + def requiredJars = workspaceModules.collect { id, version -> + "file = \"mods/${id}-${version}.jar\"" + } + def obsoleteJars = sourceModules.collect { id, version -> + "file = \"mods/${id}-${version}.jar\"" + } + def manifests = targetModules.collectEntries { id, version -> + [(id): new JsonSlurper().parse(file("${id}/src/main/resources/fabric.mod.json"))] + } + def vaultData = file( + "anotherworld/src/main/java/fr/koka99cab/sanctuary26/anotherworld/vault/VaultData.java").text + def drilling = file( + "anotherworld/src/main/java/fr/koka99cab/sanctuary26/anotherworld/vault/VaultDrillingService.java").text + def vaultSmoke = file( + "anotherworld/src/test/java/fr/koka99cab/sanctuary26/anotherworld/vault/VaultRulesSmoke.java").text + def variantLifecycle = file( + "itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/CanapliaVariantLifecycle.java").text + def crop = file( + "itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/block/CanapliaHempCropBlock.java").text + def canapliaSmoke = file( + "itsalive/src/test/java/fr/koka99cab/sanctuary26/itsalive/canaplia/CanapliaGameplaySmoke.java").text + def entityPolicy = file( + "sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/api/entity/SanctuaryEntityPolicy.java").text + def companionMixin = file( + "sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/mixin/LivingEntityCompanionMixin.java").text + def questBoard = file( + "sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/shop/QuestBoardService.java").text + def questRequests = file( + "sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/shop/QuestRequestService.java").text + def lootboxes = file( + "onlyfun/src/main/java/fr/koka99cab/sanctuary26/onlyfun/loot/OnlyFunLootboxDrops.java").text + def carpetModel = new JsonSlurper().parse(file( + "iliketomoveit/src/main/resources/assets/iliketomoveit/models/item/magic_carpet.json")) + def carpetTexture = file( + "iliketomoveit/src/main/resources/assets/iliketomoveit/textures/item/magic_carpet.png") + def carpetTextureHash = MessageDigest.getInstance("SHA-256") + .digest(carpetTexture.bytes).encodeHex().toString() + if (rootProject.pack_version != "26.2.0-alpha.225" + || targetModules.any { id, version -> rootProject.property("${id}_version") != version } + || migration.status != "released" + || migration.source?.pack_version != "26.2.0-alpha.224" + || migration.source?.modules != sourceModules + || migration.target?.pack_version != "26.2.0-alpha.225" + || migration.target?.modules != targetModules + || migration.fixed_issues != [105, 116, 123, 124] + || migration.safe_vault_raid?.attacker_requires_registered_vault != true + || migration.safe_vault_raid?.validated_when_drilling_starts != true + || migration.safe_vault_raid?.revalidated_during_drilling != true + || migration.safe_vault_raid?.revalidated_before_balance_transfer != true + || migration.temporary_companions?.public_policy_api != "SanctuaryEntityPolicy" + || migration.temporary_companions?.vanilla_loot_suppressed != true + || migration.temporary_companions?.experience_suppressed != true + || migration.temporary_companions?.quest_board_progress_suppressed != true + || migration.temporary_companions?.community_request_progress_suppressed != true + || migration.temporary_companions?.onlyfun_lootboxes_suppressed != true + || migration.canaplia_variants?.historical_seed_ids_preserved != 16 + || migration.canaplia_variants?.natural_growth_preserves_variant != true + || migration.canaplia_variants?.block_state_persistence_preserves_variant != true + || migration.canaplia_variants?.tender_plus_olive_can_produce_gold != true + || migration.magic_carpet_texture?.texture != "iliketomoveit:item/magic_carpet" + || migration.magic_carpet_texture?.historical_totem_art_restored != true + || migration.magic_carpet_texture?.purple_wool_reference_removed != true + || migration.compatibility?.existing_saves_supported != true + || migration.compatibility?.new_world_required != false + || migration.compatibility?.save_reset_required != false + || migration.compatibility?.persistent_data_formats_changed != false + || migration.compatibility?.network_protocols_changed != false + || migration.compatibility?.client_server_update_required != true + || migration.distribution?.pack_release_updated != true + || migration.distribution?.packwiz_index_refreshed != true + || migration.distribution?.prism_modrinth_index_updated != true + || manifests.onlyfun.depends?.sanctuary != ">=0.0.0-alpha.129" + || !vaultData.contains("hasRegisteredVault") + || !vaultData.contains("canReceiveRaidLoot") + || drilling.count("hasRegisteredVault(attacker.getUUID())") < 2 + || !drilling.contains("data.transferRaid(session.owner(), attacker.getUUID())") + || !vaultSmoke.contains("an attacker without a registered vault cannot receive raid loot") + || !variantLifecycle.contains("fromPersistedKey") + || crop.contains("super.randomTick") + || !crop.contains("CanapliaVariantLifecycle.afterGrowth") + || !canapliaSmoke.contains("CanapliaVariantKey.values()") + || !canapliaSmoke.contains("CanapliaVariantKey.GOLD") + || !entityPolicy.contains('TEMPORARY_COMPANION_TAG = "sanctuary_companion"') + || !companionMixin.contains('method = "dropAllDeathLoot"') + || !companionMixin.contains("ci.cancel()") + || !questBoard.contains("SanctuaryEntityPolicy.isTemporaryCompanion") + || !questRequests.contains("SanctuaryEntityPolicy.isTemporaryCompanion") + || !lootboxes.contains("SanctuaryEntityPolicy.isTemporaryCompanion") + || carpetModel.textures?.layer0 != "iliketomoveit:item/magic_carpet" + || carpetTextureHash != "3e4527d24a37f0632b27d2c857b047c581db07eaa41befaffbf28043a8ed86cc" + || release.pack_version != "26.2.0-alpha.225" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.225.mrpack" + || prism.versionId != "26.2.0-alpha.225" + || !packwiz.contains('version = "26.2.0-alpha.225"') + || requiredJars.any { !packwizIndex.contains(it) } + || obsoleteJars.any { packwizIndex.contains(it) } + || !changelog.contains("## `26.2.0-alpha.225`") + || !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.225`**")) { + throw new GradleException("The alpha.225 four-ticket bug-fix release is incomplete") + } + } +} + tasks.named("verifyWorkspace") { dependsOn tasks.named("verifyAlpha213Release") dependsOn tasks.named("verifyAlpha214Release") @@ -7428,6 +7595,7 @@ tasks.named("verifyWorkspace") { dependsOn tasks.named("verifyAlpha222Release") dependsOn tasks.named("verifyAlpha223Release") dependsOn tasks.named("verifyAlpha224Release") + dependsOn tasks.named("verifyAlpha225Release") } tasks.named("check") { diff --git a/gradle.properties b/gradle.properties index d28358b..5e09187 100644 --- a/gradle.properties +++ b/gradle.properties @@ -16,19 +16,19 @@ ambiance_version=0.0.0-alpha.22 ambiance_lifecycle=active redstoner_version=0.0.0-alpha.13 redstoner_lifecycle=active -anotherworld_version=0.0.0-alpha.55 +anotherworld_version=0.0.0-alpha.56 anotherworld_lifecycle=active -itsalive_version=0.0.0-alpha.37 +itsalive_version=0.0.0-alpha.38 itsalive_lifecycle=active ouch_version=0.0.0-alpha.11 ouch_lifecycle=active masterkey_version=0.0.0-alpha.9 masterkey_lifecycle=active -iliketomoveit_version=0.0.0-alpha.17 +iliketomoveit_version=0.0.0-alpha.18 iliketomoveit_lifecycle=active -onlyfun_version=0.0.0-alpha.26 +onlyfun_version=0.0.0-alpha.27 onlyfun_lifecycle=active -sanctuary_version=0.0.0-alpha.128 +sanctuary_version=0.0.0-alpha.129 sanctuary_lifecycle=active -pack_version=26.2.0-alpha.224 +pack_version=26.2.0-alpha.225 maven_group=fr.koka99cab.sanctuary26 diff --git a/iliketomoveit/build.gradle b/iliketomoveit/build.gradle index f9edd7d..21701da 100644 --- a/iliketomoveit/build.gradle +++ b/iliketomoveit/build.gradle @@ -321,7 +321,7 @@ tasks.register("verifyPortals") { } def atlasCavernsMigration = new JsonSlurper().parse(rootProject.file( "pack/migrations/26.2.0-alpha.149-atlas-caverns-to-alpha.150.json")) - if (project.version.toString() != "0.0.0-alpha.17" + if (project.version.toString() != "0.0.0-alpha.18" || atlasCavernsMigration.target?.pack_version != "26.2.0-alpha.150" || atlasCavernsMigration.target?.modules?.iliketomoveit != "0.0.0-alpha.9" || atlasCavernsMigration.portals?.active_routes != [ @@ -357,7 +357,7 @@ tasks.register("verifySilverAircraft") { def manifest = new JsonSlurper().parse(file("src/main/resources/fabric.mod.json")) def migration = new JsonSlurper().parse(rootProject.file( "pack/migrations/26.2.0-alpha.184-silver-engineering-to-alpha.185.json")) - if (project.version.toString() != "0.0.0-alpha.17" + if (project.version.toString() != "0.0.0-alpha.18" || recipe.pattern != ["PGP", "GCG", "PBP"] || recipe.key != [B: "anotherworld:silver_block", C: "anotherworld:aircraft_cockpit", G: "anotherworld:silver_gear", P: "anotherworld:silver_plate"] @@ -386,7 +386,7 @@ tasks.register("verifyGrapplePrediction") { def payload = file("src/main/java/fr/koka99cab/sanctuary26/iliketomoveit/network/GrappleStatePayload.java").text def controller = file("src/main/java/fr/koka99cab/sanctuary26/iliketomoveit/grapple/GrappleController.java").text def prediction = file("src/main/java/fr/koka99cab/sanctuary26/iliketomoveit/client/grapple/ClientGrapplePrediction.java").text - if (project.version.toString() != "0.0.0-alpha.17" + if (project.version.toString() != "0.0.0-alpha.18" || migration.target?.modules?.iliketomoveit != "0.0.0-alpha.13" || migration.grappling?.owner_prediction_payload != "iliketomoveit:s2c/grapple_state" || migration.compatibility?.iliketomoveit_source_network_protocol != 4 @@ -418,7 +418,7 @@ tasks.register("verifyWaystoneDescendingRelease") { "src/main/java/fr/koka99cab/sanctuary26/iliketomoveit/waystone/WaystoneElevatorRules.java").text def teleportation = file( "src/main/java/fr/koka99cab/sanctuary26/iliketomoveit/network/WaystoneTeleportation.java").text - if (project.version.toString() != "0.0.0-alpha.17" + if (project.version.toString() != "0.0.0-alpha.18" || migration.target?.modules?.iliketomoveit != "0.0.0-alpha.14" || migration.waystone_elevator?.undiscovered_downward_destination_allowed != true || migration.waystone_elevator?.destination_discovered_after_arrival != true @@ -452,7 +452,7 @@ tasks.register("verifyAlphaPortal") { def locales = ["fr_fr", "en_us", "ru_ru"].collect { new JsonSlurper().parse(file("src/main/resources/assets/iliketomoveit/lang/${it}.json")) } - if (project.version.toString() != "0.0.0-alpha.17" + if (project.version.toString() != "0.0.0-alpha.18" || route.schema_version != 2 || route.source_dimension != "minecraft:overworld" || route.destination_dimension != "sanctuary:alpha" || route.destination_resolver != "fixed" diff --git a/itsalive/build.gradle b/itsalive/build.gradle index d5b38b3..5ffaf89 100644 --- a/itsalive/build.gradle +++ b/itsalive/build.gradle @@ -565,7 +565,7 @@ tasks.register("verifyItsAlive") { def climateSource = file("src/main/java/fr/koka99cab/sanctuary26/itsalive/agriculture/ClimateCropForaging.java").text def pineappleSource = file("src/main/java/fr/koka99cab/sanctuary26/itsalive/agriculture/PineappleItem.java").text def worldgenSource = file("src/main/java/fr/koka99cab/sanctuary26/itsalive/agriculture/ItsAliveAgricultureWorldGeneration.java").text - if (project.version.toString() != "0.0.0-alpha.37" + if (project.version.toString() != "0.0.0-alpha.38" || climateMigration.target?.pack_version != "26.2.0-alpha.157" || climateMigration.target?.modules?.itsalive != "0.0.0-alpha.24" || !climateSource.contains("PlayerBlockBreakEvents.AFTER.register") @@ -1322,7 +1322,7 @@ tasks.register("verifyCulinaryReliability") { } } } - if (project.version.toString() != "0.0.0-alpha.37" + if (project.version.toString() != "0.0.0-alpha.38" || migration.target?.modules?.itsalive != "0.0.0-alpha.28" || migration.culinary_fixes?.food_press_contents_destroyed_on_break != true || migration.culinary_fixes?.comparator_contract?.blocks?.size() != 6 @@ -1360,7 +1360,7 @@ tasks.register("verifyCauldronBatching") { def recipe = file("src/main/java/fr/koka99cab/sanctuary26/itsalive/culinary/recipe/CulinaryProcessRecipe.java").text def cauldron = file("src/main/java/fr/koka99cab/sanctuary26/itsalive/culinary/block/entity/CookingCauldronBlockEntity.java").text def timed = file("src/main/java/fr/koka99cab/sanctuary26/itsalive/culinary/block/entity/AbstractTimedCulinaryBlockEntity.java").text - if (project.version.toString() != "0.0.0-alpha.37" + if (project.version.toString() != "0.0.0-alpha.38" || migration.target?.modules?.itsalive != "0.0.0-alpha.29" || migration.cauldron_batches?.logical_stack_limit != 64 || migration.cauldron_batches?.identity != "same_item_same_components" @@ -1398,7 +1398,7 @@ tasks.register("verifyFermentationBarrelAutomation") { def partialMatching = file("src/main/java/fr/koka99cab/sanctuary26/itsalive/culinary/recipe/CulinaryPartialMatching.java").text def blockstate = new JsonSlurper().parse( file("src/main/resources/assets/itsalive/blockstates/fermentation_barrel.json")) - if (project.version.toString() != "0.0.0-alpha.37" + if (project.version.toString() != "0.0.0-alpha.38" || migration.source?.modules?.itsalive != "0.0.0-alpha.29" || migration.target?.modules?.itsalive != "0.0.0-alpha.30" || migration.fermentation_barrel?.maximum_units_per_input_slot != 1 @@ -1446,7 +1446,7 @@ tasks.register("verifyCulinaryLecternRelease") { [(locale): new JsonSlurper().parse(file( "src/main/resources/assets/itsalive/lang/${locale}.json"))] } - if (project.version.toString() != "0.0.0-alpha.37" + if (project.version.toString() != "0.0.0-alpha.38" || migration.target?.modules?.itsalive != "0.0.0-alpha.31" || migration.culinary_lectern?.book_tag != "minecraft:lectern_books" || migration.culinary_lectern?.owner_catalog_shared_while_placed != true @@ -1509,7 +1509,7 @@ tasks.register("verifyCanapliaForbiddenBook") { fr_fr: "Livre interdit", en_us: "Forbidden Book", ru_ru: "Запретная книга"] - if (project.version.toString() != "0.0.0-alpha.37" + if (project.version.toString() != "0.0.0-alpha.38" || !pageItem.contains("CanapliaKnowledge.learnRandomUnknown(serverPlayer)") || !knowledge.contains("unknownVariants(data.personal(player.getUUID()))") || !knowledge.contains("data.personal(inscription.ownerId())") diff --git a/onlyfun/src/main/resources/fabric.mod.json b/onlyfun/src/main/resources/fabric.mod.json index 73a91c7..49f24b8 100644 --- a/onlyfun/src/main/resources/fabric.mod.json +++ b/onlyfun/src/main/resources/fabric.mod.json @@ -27,7 +27,7 @@ "java": ">=25", "fabric-api": ">=0.154.2+26.2", "iliketomoveit": ">=0.0.0-alpha.17", - "sanctuary": ">=0.0.0-alpha.127" + "sanctuary": ">=0.0.0-alpha.129" }, "custom": { "sanctuary26": { diff --git a/pack/migrations/26.2.0-alpha.224-four-bug-fixes-to-alpha.225.json b/pack/migrations/26.2.0-alpha.224-four-bug-fixes-to-alpha.225.json new file mode 100644 index 0000000..e5288c4 --- /dev/null +++ b/pack/migrations/26.2.0-alpha.224-four-bug-fixes-to-alpha.225.json @@ -0,0 +1,87 @@ +{ + "schema_version": 1, + "status": "released", + "source": { + "pack_version": "26.2.0-alpha.224", + "modules": { + "anotherworld": "0.0.0-alpha.55", + "itsalive": "0.0.0-alpha.37", + "iliketomoveit": "0.0.0-alpha.17", + "onlyfun": "0.0.0-alpha.26", + "sanctuary": "0.0.0-alpha.128" + } + }, + "target": { + "pack_version": "26.2.0-alpha.225", + "modules": { + "anotherworld": "0.0.0-alpha.56", + "itsalive": "0.0.0-alpha.38", + "iliketomoveit": "0.0.0-alpha.18", + "onlyfun": "0.0.0-alpha.27", + "sanctuary": "0.0.0-alpha.129" + } + }, + "fixed_issues": [105, 116, 123, 124], + "safe_vault_raid": { + "owner": "anotherworld", + "attacker_requires_registered_vault": true, + "validated_when_drilling_starts": true, + "revalidated_during_drilling": true, + "revalidated_before_balance_transfer": true + }, + "temporary_companions": { + "owner": "sanctuary", + "public_policy_api": "SanctuaryEntityPolicy", + "vanilla_loot_suppressed": true, + "experience_suppressed": true, + "quest_board_progress_suppressed": true, + "community_request_progress_suppressed": true, + "onlyfun_lootboxes_suppressed": true + }, + "canaplia_variants": { + "owner": "itsalive", + "historical_seed_ids_preserved": 16, + "placement_preserves_variant": true, + "natural_growth_preserves_variant": true, + "bonemeal_preserves_variant": true, + "upper_crop_preserves_variant": true, + "block_state_persistence_preserves_variant": true, + "harvest_and_break_drops_preserve_variant": true, + "mature_neighbors_preserve_variant": true, + "tender_plus_olive_can_produce_gold": true + }, + "magic_carpet_texture": { + "owner": "iliketomoveit", + "canonical_item": "iliketomoveit:magic_carpet", + "legacy_item": "portals:notch_totem", + "texture": "iliketomoveit:item/magic_carpet", + "historical_totem_art_restored": true, + "purple_wool_reference_removed": true, + "platform_behavior_changed": false + }, + "compatibility": { + "existing_saves_supported": true, + "new_world_required": false, + "save_reset_required": false, + "registry_ids_changed": false, + "persistent_data_formats_changed": false, + "network_protocols_changed": false, + "client_server_update_required": true, + "anotherworld_data_version": 5, + "anotherworld_network_protocol": 2, + "itsalive_data_version": 4, + "itsalive_network_protocol": 4, + "iliketomoveit_data_version": 4, + "iliketomoveit_network_protocol": 5, + "onlyfun_data_version": 2, + "onlyfun_network_protocol": 3, + "sanctuary_data_version": 13, + "sanctuary_network_protocol": 23 + }, + "distribution": { + "pack_release_updated": true, + "packwiz_index_refreshed": true, + "prism_modrinth_index_updated": true, + "shared_client_server_mrpack": true + } +} diff --git a/pack/packwiz/index.toml b/pack/packwiz/index.toml index cb357fb..e518c1d 100644 --- a/pack/packwiz/index.toml +++ b/pack/packwiz/index.toml @@ -14,15 +14,15 @@ hash = "41f4f4c88c71d0a23446d5014f7407d55ad477441847099cad24492b032335a0" [[files]] file = "mods/ambiance-0.0.0-alpha.22.jar" -hash = "20f1b31b773c7cea9c5cbe01161c2c7e541eaca714213752a8d6227bae85c9b9" +hash = "d6c44f09ddc455ae0cec02a1568e07036f11a3b2d105659e9aa14289357ddb47" [[files]] -file = "mods/anotherworld-0.0.0-alpha.55.jar" -hash = "2c01fb018cce49b8ef5ff6de1f2c4d0218243c23581333675c60dfe4ab48dfde" +file = "mods/anotherworld-0.0.0-alpha.56.jar" +hash = "ede131b654d26110af8c7e64238c1b5f99634c3e1307346953ad6ab622ccfedc" [[files]] file = "mods/events-0.0.0-alpha.0.jar" -hash = "5bc52d22c93203c6c3881cd9086db5a1166feb6b31a67af8e761c9c0d0b87f37" +hash = "9ccc30733117ab9984df3d69b98ab82d731578a6c35116595c96f2362ea22b76" [[files]] file = "mods/fabric-api.pw.toml" @@ -30,8 +30,8 @@ hash = "df032a6b051d0262cf24945c43e0e6b915e8cc1d62af62fe933932e7f35960c4" metafile = true [[files]] -file = "mods/iliketomoveit-0.0.0-alpha.17.jar" -hash = "4aa2f5394f4e12301d13026c7b542660334f7c4e4f8057ea3d36dd04dfe461b6" +file = "mods/iliketomoveit-0.0.0-alpha.18.jar" +hash = "f0ccb5a3f411cb01bcf328a139a1f90e8357587c549778f98354d910d69b2616" [[files]] file = "mods/iris.pw.toml" @@ -39,8 +39,8 @@ hash = "84a3cef87679c0d21dceb4641167dc0368b9a3593698f6a3632485e9b3a8d5da" metafile = true [[files]] -file = "mods/itsalive-0.0.0-alpha.37.jar" -hash = "926803c09b2247f42363d1042346bff9798b982aaeafa96800711e259c48039d" +file = "mods/itsalive-0.0.0-alpha.38.jar" +hash = "6dab7b2dca11cc1cd9789ed66cc8403b849cb73227d965d979eeebcf5c201309" [[files]] file = "mods/jei.pw.toml" @@ -49,23 +49,23 @@ metafile = true [[files]] file = "mods/masterkey-0.0.0-alpha.9.jar" -hash = "3069c9e784f425f59189c255638648ca51598c8626e340df9bf72a2c06f31753" +hash = "ab0241386a0958505622487318c2e2e269e57e793ef873ed71dac8e0f420338b" [[files]] -file = "mods/onlyfun-0.0.0-alpha.26.jar" -hash = "5d2915c761e87cd94f4d4075c85ebb71f021b59b92ced5eba6b5da8bb1413519" +file = "mods/onlyfun-0.0.0-alpha.27.jar" +hash = "15dbc6a9c3d4fef699c1f62f989c1d47e366cc781747c76640f5de668ea00510" [[files]] file = "mods/ouch-0.0.0-alpha.11.jar" -hash = "0e26e6e386781e2e258ef01eecad0129c00eec11783f182a34226213ea5f252e" +hash = "5bc1e244309a8835ef1d7869225201179cbee12853fb2f2390bfd47f2fcc3c4a" [[files]] file = "mods/redstoner-0.0.0-alpha.13.jar" -hash = "2e9519b8f8092883616fdce4e5b4ab427b7875565423ea18a90adb40df751878" +hash = "d913aac62b6e7152c5751ea0ddc820a98a0b74c3864f4c0bdbfc3b44eeaa3417" [[files]] -file = "mods/sanctuary-0.0.0-alpha.128.jar" -hash = "9ac5e370509e0d0be77222aca227b698d449cfbcdde70ebc58fee2cec05e6a7e" +file = "mods/sanctuary-0.0.0-alpha.129.jar" +hash = "0b67c37680e5004b7f08ac9de32b501fc8f2025fe5a7649858948f14a5d8f5f5" [[files]] file = "mods/simple-voice-chat.pw.toml" diff --git a/pack/packwiz/pack.toml b/pack/packwiz/pack.toml index c9fc692..594a73d 100644 --- a/pack/packwiz/pack.toml +++ b/pack/packwiz/pack.toml @@ -1,12 +1,12 @@ name = "Sanctuary 26.2" author = "KOKA99CAB" -version = "26.2.0-alpha.224" +version = "26.2.0-alpha.225" pack-format = "packwiz:1.1.0" [index] file = "index.toml" hash-format = "sha256" -hash = "0073565d9342eae7a811696a273094f157b9a6ec113c8282c3e92714c8fe921a" +hash = "19d66dcd7dbbc8e1a9471dcb259a9c9aad727acbc8428f114a48c05c2fd1d8de" [versions] fabric = "0.19.3" diff --git a/pack/prism/modrinth.index.json b/pack/prism/modrinth.index.json index 4528a20..8593c1f 100644 --- a/pack/prism/modrinth.index.json +++ b/pack/prism/modrinth.index.json @@ -3,7 +3,7 @@ "game": "minecraft", "name": "Sanctuary 26.2", "summary": "Sanctuary 26.2 — progression, exploration, worldgen and multiplayer systems by KOKA99CAB.", - "versionId": "26.2.0-alpha.224", + "versionId": "26.2.0-alpha.225", "files": [ { "path": "mods/fabric-api-0.158.0+26.2.jar", diff --git a/pack/release.json b/pack/release.json index ee8e3dc..8e51c3a 100644 --- a/pack/release.json +++ b/pack/release.json @@ -1,6 +1,6 @@ { "schema_version": 1, - "pack_version": "26.2.0-alpha.224", + "pack_version": "26.2.0-alpha.225", "release_channel": "alpha", "minecraft_version": "26.2", "fabric_loader_version": "0.19.3", @@ -9,7 +9,7 @@ "project_id": "FgOqyAXd", "project_slug": "sanctuary-koka99", "project_url": "https://modrinth.com/modpack/sanctuary-koka99", - "primary_file": "sanctuary-26.2.0-alpha.224.mrpack", + "primary_file": "sanctuary-26.2.0-alpha.225.mrpack", "shared_client_server_pack": true, "update_owner": "packwiz-installer", "check_on_launch": true, diff --git a/sanctuary/build.gradle b/sanctuary/build.gradle index 743ba1d..9d22301 100644 --- a/sanctuary/build.gradle +++ b/sanctuary/build.gradle @@ -124,6 +124,14 @@ tasks.register("inventorySortSmoke", JavaExec) { mainClass = "fr.koka99cab.sanctuary26.sanctuary.gameplay.SanctuaryInventorySortSmoke" } +tasks.register("entityPolicySmoke", JavaExec) { + group = "verification" + description = "Checks that only tagged temporary companions are excluded from loot and quests." + dependsOn tasks.named("testClasses") + classpath = sourceSets.test.runtimeClasspath + mainClass = "fr.koka99cab.sanctuary26.sanctuary.api.entity.SanctuaryEntityPolicySmoke" +} + tasks.register("alphaIndevGeneratorSmoke", JavaExec) { group = "verification" description = "Checks deterministic finite Indev islands, residences and safe portal arrivals." @@ -175,7 +183,7 @@ tasks.register("verifyBlackMarket") { def questData = file("src/main/java/fr/koka99cab/sanctuary26/sanctuary/shop/QuestBoardData.java").text def quests = file("src/main/java/fr/koka99cab/sanctuary26/sanctuary/shop/QuestBoardService.java").text def inventoryView = file("src/main/java/fr/koka99cab/sanctuary26/sanctuary/api/inventory/SanctuaryPlayerInventoryView.java").text - if (project.version.toString() != "0.0.0-alpha.128" + if (project.version.toString() != "0.0.0-alpha.129" || !data.contains('SAVE_KEY = "black_market"') || !data.contains("DATA_VERSION = 2") || !data.contains("ItemStack.CODEC.fieldOf(\"item\")") || !data.contains("replaceListing") || !service.contains("LISTING_FEE_RUBIES = 1") || !service.contains("COMMISSION_PERCENT = 5") @@ -2891,7 +2899,7 @@ tasks.register("verifyShopCurrencyRowsRelease") { "src/main/java/fr/koka99cab/sanctuary26/sanctuary/shop/BlackMarketService.java").text def shop = file( "src/main/java/fr/koka99cab/sanctuary26/sanctuary/shop/ShopService.java").text - if (project.version.toString() != "0.0.0-alpha.128" + if (project.version.toString() != "0.0.0-alpha.129" || migration.target?.modules?.sanctuary != "0.0.0-alpha.117" || migration.shop_currency_inventory?.all_unlocked_rows_counted != true || migration.shop_currency_inventory?.overflow_rows_counted != true @@ -3057,7 +3065,7 @@ tasks.register("verifyProgressivePauseMenu") { "pack/migrations/26.2.0-alpha.190-progressive-pause-menu-to-alpha.191.json")) def pauseMenu = file("src/main/java/fr/koka99cab/sanctuary26/sanctuary/mixin/client/PauseScreenMixin.java").text def costs = file("src/main/java/fr/koka99cab/sanctuary26/sanctuary/progression/SanctuaryProgressionCosts.java").text - if (project.version.toString() != "0.0.0-alpha.128" + if (project.version.toString() != "0.0.0-alpha.129" || migration.target?.pack_version != "26.2.0-alpha.191" || migration.target?.modules?.sanctuary != "0.0.0-alpha.109" || migration.pause_menu?.progression_full_width != true @@ -3095,7 +3103,7 @@ tasks.register("verifyShopPricingLayout") { "pack/migrations/26.2.0-alpha.192-shop-pricing-layout-to-alpha.193.json")) def screen = file("src/main/java/fr/koka99cab/sanctuary26/sanctuary/client/SanctuaryShopScreen.java").text def progression = file("src/main/java/fr/koka99cab/sanctuary26/sanctuary/shop/ShopProgression.java").text - if (project.version.toString() != "0.0.0-alpha.128" + if (project.version.toString() != "0.0.0-alpha.129" || migration.target?.modules?.sanctuary != "0.0.0-alpha.110" || migration.shop_layout?.locked_offer_buttons != 6 || migration.shop_layout?.button_slots != [4, 5, 6, 7, 8, 9] @@ -3126,7 +3134,7 @@ tasks.register("verifyShopCsvBossGates") { "pack/migrations/26.2.0-alpha.194-shop-csv-boss-gates-to-alpha.195.json")) def provider = file("src/main/java/fr/koka99cab/sanctuary26/sanctuary/shop/ShopCatalogProvider.java").text def catalog = file("src/main/java/fr/koka99cab/sanctuary26/sanctuary/shop/ShopOfferCatalog.java").text - if (project.version.toString() != "0.0.0-alpha.128" + if (project.version.toString() != "0.0.0-alpha.129" || migration.target?.pack_version != "26.2.0-alpha.195" || migration.target?.modules?.sanctuary != "0.0.0-alpha.111" || migration.compatibility?.sanctuary_data_version != 11 @@ -3157,7 +3165,7 @@ tasks.register("verifyDeliveryBoxOrientation") { def blockstate = new JsonSlurper().parse( file("src/main/resources/assets/sanctuary/blockstates/delivery_box.json")) def expectedVariants = ["facing=north", "facing=east", "facing=south", "facing=west"].toSet() - if (project.version.toString() != "0.0.0-alpha.128" + if (project.version.toString() != "0.0.0-alpha.129" || migration.target?.modules?.sanctuary != "0.0.0-alpha.112" || migration.mailbox?.id != "sanctuary:delivery_box" || migration.mailbox?.horizontal_facing != true @@ -3185,7 +3193,7 @@ tasks.register("verifyInventoryShiftClick") { def mixin = file("src/main/java/fr/koka99cab/sanctuary26/sanctuary/mixin/AbstractContainerMenuMixin.java").text def screen = file("src/main/java/fr/koka99cab/sanctuary26/sanctuary/mixin/client/AbstractContainerScreenMixin.java").text def gui = file("INVENTORY_GUI.md").text - if (project.version.toString() != "0.0.0-alpha.128" + if (project.version.toString() != "0.0.0-alpha.129" || !transfer.contains("shouldAppendOverflow") || !transfer.contains("isVanillaStorageRange") || !transfer.contains("hotbarStart") @@ -3231,7 +3239,7 @@ tasks.register("verifyQuestRequests") { new JsonSlurper().parse(file("src/main/resources/data/sanctuary/loot_table/blocks/${path}.json")) .pools[0].entries[0].name } - if (project.version.toString() != "0.0.0-alpha.128" + if (project.version.toString() != "0.0.0-alpha.129" || migration.target?.modules?.sanctuary != "0.0.0-alpha.113" || migration.quest_requests?.save_key != "quest_requests" || migration.quest_requests?.data_version != 1 @@ -3289,7 +3297,7 @@ tasks.register("verifyQuestRequestContracts") { def locales = ["fr_fr", "en_us", "ru_ru"].collectEntries { locale -> [(locale): new JsonSlurper().parse(file("src/main/resources/assets/sanctuary/lang/${locale}.json"))] } - if (project.version.toString() != "0.0.0-alpha.128" + if (project.version.toString() != "0.0.0-alpha.129" || migration.source?.pack_version != "26.2.0-alpha.198" || migration.source?.modules?.sanctuary != "0.0.0-alpha.114" || migration.target?.pack_version != "26.2.0-alpha.199" @@ -3358,7 +3366,7 @@ tasks.register("verifyQuestRequestEscrow") { def locales = ["fr_fr", "en_us", "ru_ru"].collectEntries { locale -> [(locale): new JsonSlurper().parse(file("src/main/resources/assets/sanctuary/lang/${locale}.json"))] } - if (project.version.toString() != "0.0.0-alpha.128" + if (project.version.toString() != "0.0.0-alpha.129" || migration.source?.pack_version != "26.2.0-alpha.200" || migration.source?.modules?.sanctuary != "0.0.0-alpha.115" || migration.target?.pack_version != "26.2.0-alpha.201" @@ -3430,7 +3438,7 @@ tasks.register("verifyAlphaIndev") { def locales = ["fr_fr", "en_us", "ru_ru"].collect { new JsonSlurper().parse(file("src/main/resources/assets/sanctuary/lang/${it}.json")) } - if (project.version.toString() != "0.0.0-alpha.128" + if (project.version.toString() != "0.0.0-alpha.129" || migration.target?.modules?.sanctuary != "0.0.0-alpha.122" || migration.alpha_world?.dimension != "sanctuary:alpha" || migration.alpha_world?.legacy_dimension != "portals:alpha" @@ -3468,5 +3476,6 @@ tasks.named("check") { dependsOn tasks.named("alphaIndevGeneratorSmoke") dependsOn tasks.named("capeJoinSyncSmoke") dependsOn tasks.named("inventorySortSmoke") + dependsOn tasks.named("entityPolicySmoke") dependsOn tasks.named("verifyAlphaIndev") } -- 2.54.0