Skip to content

Commit

Permalink
Merge branch 'api-12' into api-13
Browse files Browse the repository at this point in the history
# Conflicts:
#	src/accessors/java/org/spongepowered/common/accessor/world/level/NaturalSpawner_SpawnStateAccessor.java
#	src/mixins/java/org/spongepowered/common/mixin/core/server/WorldLoaderMixin.java
#	src/mixins/java/org/spongepowered/common/mixin/core/world/level/NaturalSpawnerMixin.java
#	src/mixins/java/org/spongepowered/common/mixin/tracker/world/level/ExplosionMixin_Tracker.java
  • Loading branch information
Yeregorix committed Mar 8, 2025
2 parents cdb3171 + da6e70e commit 8056f67
Show file tree
Hide file tree
Showing 14 changed files with 69 additions and 224 deletions.

This file was deleted.

1 change: 0 additions & 1 deletion src/accessors/resources/mixins.sponge.accessors.json
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,6 @@
"world.level.GameRulesAccessor",
"world.level.LevelAccessor",
"world.level.LevelSettingsAccessor",
"world.level.NaturalSpawner_SpawnStateAccessor",
"world.level.NaturalSpawnerAccessor",
"world.level.ServerExplosionAccessor",
"world.level.biome.Biome_ClimateSettingsAccessor",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ public interface Lifecycle {
void establishEarlyGlobalRegistries();
void finalizeEarlyGlobalRegistries();

void establishGlobalRegistries(RegistryAccess.Frozen registryAccess, final RegistryLayer $$0);
void establishGlobalRegistries(RegistryAccess.Frozen registryAccess, final RegistryLayer layer);

void establishDataProviders();

Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,6 @@

public interface NaturalSpawner_SpawnStateBridge {

boolean bridge$canSpawnForCategoryInWorld(MobCategory p_234991_1_, ServerLevel world);
boolean bridge$canSpawnForCategoryInWorld(MobCategory category, ServerLevel level);

}
Original file line number Diff line number Diff line change
Expand Up @@ -24,24 +24,25 @@
*/
package org.spongepowered.common.mixin.core.server;

import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import net.minecraft.core.LayeredRegistryAccess;
import net.minecraft.core.RegistryAccess;
import net.minecraft.server.RegistryLayer;
import net.minecraft.server.ReloadableServerRegistries;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.common.launch.Launch;

@Mixin(ReloadableServerRegistries.class)
public abstract class ReloadableServerRegistriesMixin {

@Redirect(method = "reload", at = @At(value = "INVOKE",
@WrapOperation(method = "reload", at = @At(value = "INVOKE",
target = "Lnet/minecraft/core/LayeredRegistryAccess;getAccessForLoading(Ljava/lang/Object;)Lnet/minecraft/core/RegistryAccess$Frozen;"))
private static <T> RegistryAccess.Frozen impl$onGetAccess(final LayeredRegistryAccess instance, final T $$0) {
final RegistryAccess.Frozen registryAccess = instance.getAccessForLoading($$0);
private static RegistryAccess.Frozen impl$onGetRegistryAccess(final LayeredRegistryAccess<?> instance, final Object layer, final Operation<RegistryAccess.Frozen> original) {
final RegistryAccess.Frozen registryAccess = original.call(instance, layer);
final var lifecycle = Launch.instance().lifecycle();
lifecycle.establishGlobalRegistries(registryAccess, (RegistryLayer) $$0);
lifecycle.establishGlobalRegistries(registryAccess, (RegistryLayer) layer);
return registryAccess;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@
*/
package org.spongepowered.common.mixin.core.server;

import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import com.mojang.datafixers.util.Pair;
import net.minecraft.core.LayeredRegistryAccess;
import net.minecraft.core.RegistryAccess;
Expand All @@ -33,39 +36,32 @@
import net.minecraft.world.level.WorldDataConfiguration;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.common.launch.Launch;

@Mixin(WorldLoader.class)
public abstract class WorldLoaderMixin {

@Redirect(method = "load", at = @At(value = "INVOKE",
@ModifyExpressionValue(method = "load", at = @At(value = "INVOKE",
target = "Lnet/minecraft/server/WorldLoader$PackConfig;createResourceManager()Lcom/mojang/datafixers/util/Pair;"))
private static Pair<WorldDataConfiguration, CloseableResourceManager> impl$onGetSecond(final WorldLoader.PackConfig instance) {
final Pair<WorldDataConfiguration, CloseableResourceManager> pair = instance.createResourceManager();
private static Pair<WorldDataConfiguration, CloseableResourceManager> impl$onCreateResourceManager(final Pair<WorldDataConfiguration, CloseableResourceManager> pair) {
Launch.instance().lifecycle().setWorldDataConfiguration(pair.getFirst());
return pair;
}

@Redirect(method = "load", at = @At(value = "INVOKE",
@WrapOperation(method = "load", at = @At(value = "INVOKE",
target = "Lnet/minecraft/core/LayeredRegistryAccess;getAccessForLoading(Ljava/lang/Object;)Lnet/minecraft/core/RegistryAccess$Frozen;"))
private static <T> RegistryAccess.Frozen impl$onGetAccess(final LayeredRegistryAccess instance, final T $$0) {
final RegistryAccess.Frozen registryAccess = instance.getAccessForLoading($$0);
private static RegistryAccess.Frozen impl$onGetRegistryAccess(final LayeredRegistryAccess<?> instance, final Object layer, final Operation<RegistryAccess.Frozen> original) {
final RegistryAccess.Frozen registryAccess = original.call(instance, layer);
final var lifecycle = Launch.instance().lifecycle();
lifecycle.establishGlobalRegistries(registryAccess, (RegistryLayer) $$0);
lifecycle.establishGlobalRegistries(registryAccess, (RegistryLayer) layer);
return registryAccess;
}


@Redirect(method = "load", at = @At(value = "INVOKE",
@WrapOperation(method = "load", at = @At(value = "INVOKE",
target = "Lnet/minecraft/core/LayeredRegistryAccess;replaceFrom(Ljava/lang/Object;[Lnet/minecraft/core/RegistryAccess$Frozen;)Lnet/minecraft/core/LayeredRegistryAccess;"))
private static <T> LayeredRegistryAccess<T> impl$afterLoadDimensionRegistries(final LayeredRegistryAccess instance,
final T $$0, final RegistryAccess.Frozen[] $$1) {
private static LayeredRegistryAccess<?> impl$afterLoadDimensionRegistries(final LayeredRegistryAccess<?> instance, final Object worldGenLayer, final RegistryAccess.Frozen[] registries, final Operation<LayeredRegistryAccess<?>> original) {
final var lifecycle = Launch.instance().lifecycle();
lifecycle.establishGlobalRegistries($$1[0], RegistryLayer.DIMENSIONS);
return instance.replaceFrom($$0, $$1);
lifecycle.establishGlobalRegistries(registries[0], RegistryLayer.DIMENSIONS);
return original.call(instance, worldGenLayer, registries);
}



}
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@
import org.spongepowered.math.vector.Vector3d;

@Mixin(EnderEyeItem.class)
public abstract class EnderEyeItemMixin extends ItemMixin {
public abstract class EnderEyeItemMixin {

/**
* @author gabizou - June 10th, 2019 - 1.12.2
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@
import net.minecraft.nbt.CompoundTag;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.component.CustomData;
import net.minecraft.world.level.ItemLike;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.spongepowered.api.data.DataTransactionResult;
Expand Down Expand Up @@ -99,7 +98,7 @@ public abstract class ItemStackMixin implements SpongeDataHolderBridge, DataComp

@Override
public void data$setCompound(final CompoundTag nbt) {
this.components.set(DataComponents.CUSTOM_DATA, nbt == null ? CustomData.EMPTY : CustomDataAccessor.invoker$new(nbt));
this.components.set(DataComponents.CUSTOM_DATA, nbt == null ? null : CustomDataAccessor.invoker$new(nbt));
}

// Add our manipulators when creating copies from this ItemStack:
Expand All @@ -117,16 +116,16 @@ public abstract class ItemStackMixin implements SpongeDataHolderBridge, DataComp

// Read custom data from nbt
@Inject(method = "<init>(Lnet/minecraft/world/level/ItemLike;ILnet/minecraft/core/component/PatchedDataComponentMap;)V", at = @At("RETURN"))
private void impl$onRead(final ItemLike $$0, final int $$1, final PatchedDataComponentMap $$2, final CallbackInfo ci) {
private void impl$onRead(final CallbackInfo ci) {
if (!this.shadow$isEmpty()) {
DataUtil.syncTagToData(this); // Deserialize
DataUtil.syncDataToTag(this); // Sync back after reading
}
}

@Inject(method = "set", at = @At("RETURN"))
private <T> void impl$onSetCustomData(final DataComponentType<? super T> $$0, final T $$1, final CallbackInfoReturnable<T> cir) {
if ($$0.equals(DataComponents.CUSTOM_DATA)) {
private <T> void impl$onSetCustomData(final DataComponentType<? super T> type, final T value, final CallbackInfoReturnable<T> cir) {
if (type.equals(DataComponents.CUSTOM_DATA)) {
this.bridge$clear();
DataUtil.syncTagToData(this); // Deserialize
DataUtil.syncDataToTag(this); // Sync back after reading
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,57 +24,47 @@
*/
package org.spongepowered.common.mixin.core.world.level;

import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import com.llamalad7.mixinextras.sugar.Local;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.entity.MobCategory;
import net.minecraft.world.level.ChunkPos;
import net.minecraft.world.level.NaturalSpawner;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.common.accessor.world.level.NaturalSpawner_SpawnStateAccessor;
import org.spongepowered.common.bridge.world.level.NaturalSpawner_SpawnStateBridge;
import org.spongepowered.common.config.SpongeGameConfigs;
import org.spongepowered.common.config.inheritable.SpawnerCategory;

@Mixin(NaturalSpawner.class)
public abstract class NaturalSpawnerMixin {

@Redirect(method = "spawnForChunk", at = @At(value = "INVOKE",
target = "Lnet/minecraft/world/level/NaturalSpawner$SpawnState;canSpawnForCategoryLocal(Lnet/minecraft/world/entity/MobCategory;Lnet/minecraft/world/level/ChunkPos;)Z"))
private static boolean impl$canSpawnForCategoryLocal(final NaturalSpawner.SpawnState instance, final MobCategory $$0, final ChunkPos $$1, final ServerLevel level) {
return NaturalSpawnerMixin.impl$canSpawnInLevel(instance, $$0, level, $$1);
}

private static boolean impl$canSpawnInLevel(final NaturalSpawner.SpawnState spawnState, final MobCategory classification, final ServerLevel level, final ChunkPos chunkPos) {
final int tick = NaturalSpawnerMixin.impl$getSpawningTickRate(classification, level);
@WrapOperation(method = "spawnForChunk", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/NaturalSpawner$SpawnState;canSpawnForCategoryLocal(Lnet/minecraft/world/entity/MobCategory;Lnet/minecraft/world/level/ChunkPos;)Z"))
private static boolean impl$spawnTickRate(final NaturalSpawner.SpawnState state, final MobCategory category, final ChunkPos pos,
final Operation<Boolean> original, @Local(argsOnly = true) final ServerLevel level) {
final int tickRate = NaturalSpawnerMixin.impl$getSpawningTickRate(category, level);
// Unknown category/use default
if (tick == -1) {
return ((NaturalSpawner_SpawnStateAccessor) spawnState).invoker$canSpawnForCategoryLocal(classification, chunkPos);
if (tickRate == -1) {
return original.call(state, category, pos);
}
// Turn off spawns
if (tick == 0) {
if (tickRate == 0) {
return false;
}
return level.getGameTime() % tick == 0L && ((NaturalSpawner_SpawnStateBridge) spawnState).bridge$canSpawnForCategoryInWorld(classification, level);
return level.getGameTime() % tickRate == 0L && ((NaturalSpawner_SpawnStateBridge) state).bridge$canSpawnForCategoryInWorld(category, level);
}

private static int impl$getSpawningTickRate(final MobCategory classification, final ServerLevel level) {
private static int impl$getSpawningTickRate(final MobCategory category, final ServerLevel level) {
final SpawnerCategory.TickRatesSubCategory tickRates = SpongeGameConfigs.getForWorld(level).get().spawner.tickRates;
switch (classification) {
case MONSTER:
return tickRates.monster;
case CREATURE:
return tickRates.creature;
case AMBIENT:
return tickRates.ambient;
case UNDERGROUND_WATER_CREATURE:
return tickRates.undergroundAquaticCreature;
case WATER_CREATURE:
return tickRates.aquaticCreature;
case WATER_AMBIENT:
return tickRates.aquaticAmbient;
default:
return -1;
}
return switch (category) {
case MONSTER -> tickRates.monster;
case CREATURE -> tickRates.creature;
case AMBIENT -> tickRates.ambient;
case UNDERGROUND_WATER_CREATURE -> tickRates.undergroundAquaticCreature;
case WATER_CREATURE -> tickRates.aquaticCreature;
case WATER_AMBIENT -> tickRates.aquaticAmbient;
default -> -1;
};
}
}
Loading

0 comments on commit 8056f67

Please sign in to comment.