[Feature] Build for 1.19.4
This commit is contained in:
parent
8a8e73348c
commit
55930d73d5
55 changed files with 380 additions and 304 deletions
|
@ -3,15 +3,15 @@ package org.betterx.worlds.together.mixin.client;
|
|||
import org.betterx.worlds.together.world.event.WorldBootstrap;
|
||||
import org.betterx.worlds.together.worldPreset.WorldPresets;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.screens.Screen;
|
||||
import net.minecraft.client.gui.screens.worldselection.CreateWorldScreen;
|
||||
import net.minecraft.client.gui.screens.worldselection.WorldGenSettingsComponent;
|
||||
import net.minecraft.client.gui.screens.worldselection.WorldCreationContext;
|
||||
import net.minecraft.client.gui.screens.worldselection.WorldCreationUiState;
|
||||
import net.minecraft.resources.ResourceKey;
|
||||
import net.minecraft.world.level.WorldDataConfiguration;
|
||||
import net.minecraft.world.level.levelgen.presets.WorldPreset;
|
||||
import net.minecraft.world.level.storage.LevelStorageSource;
|
||||
|
||||
import org.spongepowered.asm.mixin.Final;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
|
@ -21,26 +21,27 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
|||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||
|
||||
import java.util.Optional;
|
||||
import java.util.OptionalLong;
|
||||
|
||||
@Mixin(CreateWorldScreen.class)
|
||||
public class CreateWorldScreen_Mixin {
|
||||
public abstract class CreateWorldScreen_Mixin {
|
||||
@Shadow
|
||||
@Final
|
||||
public WorldGenSettingsComponent worldGenSettingsComponent;
|
||||
|
||||
public abstract WorldCreationUiState getUiState();
|
||||
|
||||
@Inject(method = "<init>", at = @At("TAIL"))
|
||||
private void wt_init(
|
||||
Minecraft minecraft,
|
||||
Screen screen,
|
||||
WorldDataConfiguration worldDataConfiguration,
|
||||
WorldGenSettingsComponent worldGenSettingsComponent,
|
||||
WorldCreationContext worldCreationContext,
|
||||
Optional optional,
|
||||
OptionalLong optionalLong,
|
||||
CallbackInfo ci
|
||||
) {
|
||||
//WorldBootstrap.InGUI.registryReadyOnNewWorld(worldGenSettingsComponent);
|
||||
}
|
||||
|
||||
//Change the WorldPreset that is selected by default on the Create World Screen
|
||||
@ModifyArg(method = "openFresh", index = 1, at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screens/worldselection/WorldGenSettingsComponent;<init>(Lnet/minecraft/client/gui/screens/worldselection/WorldCreationContext;Ljava/util/Optional;Ljava/util/OptionalLong;)V"))
|
||||
@ModifyArg(method = "openFresh", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screens/worldselection/CreateWorldScreen;<init>(Lnet/minecraft/client/Minecraft;Lnet/minecraft/client/gui/screens/Screen;Lnet/minecraft/client/gui/screens/worldselection/WorldCreationContext;Ljava/util/Optional;Ljava/util/OptionalLong;)V"))
|
||||
private static Optional<ResourceKey<WorldPreset>> wt_NewDefault(Optional<ResourceKey<WorldPreset>> preset) {
|
||||
return Optional.of(WorldPresets.getDEFAULT());
|
||||
}
|
||||
|
@ -48,7 +49,7 @@ public class CreateWorldScreen_Mixin {
|
|||
//this is called when a new world is first created
|
||||
@Inject(method = "createNewWorldDirectory", at = @At("RETURN"))
|
||||
void wt_createNewWorld(CallbackInfoReturnable<Optional<LevelStorageSource.LevelStorageAccess>> cir) {
|
||||
WorldBootstrap.InGUI.registryReadyOnNewWorld(this.worldGenSettingsComponent);
|
||||
WorldBootstrap.InGUI.setupNewWorld(cir.getReturnValue(), this.worldGenSettingsComponent);
|
||||
WorldBootstrap.InGUI.registryReadyOnNewWorld(this.getUiState().getSettings());
|
||||
WorldBootstrap.InGUI.setupNewWorld(cir.getReturnValue(), this.getUiState());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,78 +0,0 @@
|
|||
package org.betterx.worlds.together.mixin.client;
|
||||
|
||||
import org.betterx.worlds.together.worldPreset.WorldGenSettingsComponentAccessor;
|
||||
|
||||
import net.minecraft.client.gui.screens.worldselection.WorldCreationContext;
|
||||
import net.minecraft.client.gui.screens.worldselection.WorldGenSettingsComponent;
|
||||
import net.minecraft.core.Holder;
|
||||
import net.minecraft.world.level.levelgen.presets.WorldPreset;
|
||||
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.ModifyArg;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.OptionalLong;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Mixin(WorldGenSettingsComponent.class)
|
||||
public abstract class WorldGenSettingsComponentMixin implements WorldGenSettingsComponentAccessor {
|
||||
@Override
|
||||
@Accessor("preset")
|
||||
public abstract Optional<Holder<WorldPreset>> bcl_getPreset();
|
||||
|
||||
@Override
|
||||
@Accessor("preset")
|
||||
public abstract void bcl_setPreset(Optional<Holder<WorldPreset>> preset);
|
||||
|
||||
@Shadow
|
||||
private WorldCreationContext settings;
|
||||
|
||||
@Shadow
|
||||
public abstract void updateSettings(WorldCreationContext.DimensionsUpdater dimensionsUpdater);
|
||||
|
||||
@Shadow
|
||||
private Optional<Holder<WorldPreset>> preset;
|
||||
|
||||
@Inject(method = "<init>", at = @At("TAIL"))
|
||||
public void wt_init(
|
||||
WorldCreationContext worldCreationContext,
|
||||
Optional worldPreset,
|
||||
OptionalLong seed,
|
||||
CallbackInfo ci
|
||||
) {
|
||||
if (this.preset.isPresent()) {
|
||||
//make sure the initial dimensions are in sync with the selected World Preset
|
||||
this.updateSettings((frozen, worldDimensions) -> this.preset.get().value().createWorldDimensions());
|
||||
}
|
||||
}
|
||||
|
||||
@ModifyArg(method = "init", index = 0, at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/components/CycleButton$Builder;withValues(Ljava/util/List;Ljava/util/List;)Lnet/minecraft/client/gui/components/CycleButton$Builder;"))
|
||||
public List<Holder<WorldPreset>> bcl_SortLists(List<Holder<WorldPreset>> list) {
|
||||
final Predicate<Holder<WorldPreset>> vanilla = (p -> p.unwrapKey()
|
||||
.orElseThrow()
|
||||
.location()
|
||||
.getNamespace()
|
||||
.equals("minecraft"));
|
||||
|
||||
|
||||
List<Holder<WorldPreset>> custom = list
|
||||
.stream()
|
||||
.filter(p -> !vanilla.test(p))
|
||||
.collect(Collectors.toCollection(LinkedList::new));
|
||||
|
||||
custom.addAll(list
|
||||
.stream()
|
||||
.filter(vanilla)
|
||||
.toList());
|
||||
|
||||
return custom;
|
||||
}
|
||||
}
|
|
@ -4,10 +4,8 @@ import net.minecraft.core.Holder;
|
|||
import net.minecraft.world.level.levelgen.WorldDimensions;
|
||||
import net.minecraft.world.level.levelgen.presets.WorldPreset;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
public class AdaptWorldPresetSettingEvent extends EventImpl<OnAdaptWorldPresetSettings> {
|
||||
public Optional<Holder<WorldPreset>> emit(Optional<Holder<WorldPreset>> start, WorldDimensions worldDims) {
|
||||
public Holder<WorldPreset> emit(Holder<WorldPreset> start, WorldDimensions worldDims) {
|
||||
for (OnAdaptWorldPresetSettings a : handlers) {
|
||||
start = a.adapt(start, worldDims);
|
||||
}
|
||||
|
|
|
@ -4,12 +4,10 @@ import net.minecraft.core.Holder;
|
|||
import net.minecraft.world.level.levelgen.WorldDimensions;
|
||||
import net.minecraft.world.level.levelgen.presets.WorldPreset;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
@FunctionalInterface
|
||||
public interface OnAdaptWorldPresetSettings {
|
||||
Optional<Holder<WorldPreset>> adapt(
|
||||
Optional<Holder<WorldPreset>> currentPreset,
|
||||
Holder<WorldPreset> adapt(
|
||||
Holder<WorldPreset> currentPreset,
|
||||
WorldDimensions worldDims
|
||||
);
|
||||
}
|
||||
|
|
|
@ -9,10 +9,10 @@ import org.betterx.worlds.together.mixin.common.WorldPresetAccessor;
|
|||
import org.betterx.worlds.together.surfaceRules.SurfaceRuleUtil;
|
||||
import org.betterx.worlds.together.world.WorldConfig;
|
||||
import org.betterx.worlds.together.worldPreset.TogetherWorldPreset;
|
||||
import org.betterx.worlds.together.worldPreset.WorldGenSettingsComponentAccessor;
|
||||
import org.betterx.worlds.together.worldPreset.WorldPresets;
|
||||
|
||||
import net.minecraft.client.gui.screens.worldselection.WorldGenSettingsComponent;
|
||||
import net.minecraft.client.gui.screens.worldselection.WorldCreationContext;
|
||||
import net.minecraft.client.gui.screens.worldselection.WorldCreationUiState;
|
||||
import net.minecraft.core.Holder;
|
||||
import net.minecraft.core.LayeredRegistryAccess;
|
||||
import net.minecraft.core.Registry;
|
||||
|
@ -94,14 +94,14 @@ public class WorldBootstrap {
|
|||
return dimensions;
|
||||
}
|
||||
|
||||
private static Optional<Holder<WorldPreset>> presetFromDatapack(Optional<Holder<WorldPreset>> currentPreset) {
|
||||
if (currentPreset.isPresent() && LAST_REGISTRY_ACCESS != null) {
|
||||
var presetKey = currentPreset.get().unwrapKey();
|
||||
private static Holder<WorldPreset> presetFromDatapack(Holder<WorldPreset> currentPreset) {
|
||||
if (currentPreset != null && LAST_REGISTRY_ACCESS != null) {
|
||||
Optional<ResourceKey<WorldPreset>> presetKey = currentPreset.unwrapKey();
|
||||
if (presetKey.isPresent()) {
|
||||
Optional<Holder.Reference<WorldPreset>> newPreset = LAST_REGISTRY_ACCESS
|
||||
.registryOrThrow(Registries.WORLD_PRESET)
|
||||
.getHolder(presetKey.get());
|
||||
if (newPreset.isPresent()) currentPreset = (Optional<Holder<WorldPreset>>) (Optional<?>) newPreset;
|
||||
currentPreset = newPreset.orElse(null);
|
||||
}
|
||||
}
|
||||
return currentPreset;
|
||||
|
@ -126,7 +126,7 @@ public class WorldBootstrap {
|
|||
true, true
|
||||
);
|
||||
|
||||
Optional<Holder<WorldPreset>> currentPreset = Optional.of(Helpers.defaultServerPreset());
|
||||
Holder<WorldPreset> currentPreset = Helpers.defaultServerPreset();
|
||||
writeWorldPresets(dimensions, currentPreset);
|
||||
finishedWorldLoad();
|
||||
} else {
|
||||
|
@ -155,8 +155,8 @@ public class WorldBootstrap {
|
|||
}
|
||||
|
||||
public static class InGUI {
|
||||
public static void registryReadyOnNewWorld(WorldGenSettingsComponent worldGenSettingsComponent) {
|
||||
Helpers.onRegistryReady(worldGenSettingsComponent.registryHolder());
|
||||
public static void registryReadyOnNewWorld(WorldCreationContext worldGenSettingsComponent) {
|
||||
Helpers.onRegistryReady(worldGenSettingsComponent.worldgenLoadContext());
|
||||
}
|
||||
|
||||
public static void registryReady(RegistryAccess access) {
|
||||
|
@ -165,22 +165,19 @@ public class WorldBootstrap {
|
|||
|
||||
public static void setupNewWorld(
|
||||
Optional<LevelStorageSource.LevelStorageAccess> levelStorageAccess,
|
||||
WorldGenSettingsComponent worldGenSettingsComponent
|
||||
WorldCreationUiState uiState
|
||||
) {
|
||||
|
||||
if (levelStorageAccess.isPresent()) {
|
||||
if (worldGenSettingsComponent instanceof WorldGenSettingsComponentAccessor acc) {
|
||||
Optional<Holder<WorldPreset>> currentPreset = acc.bcl_getPreset();
|
||||
currentPreset = Helpers.presetFromDatapack(currentPreset);
|
||||
Optional<Holder<WorldPreset>> newPreset = setupNewWorldCommon(
|
||||
levelStorageAccess.get(),
|
||||
currentPreset,
|
||||
worldGenSettingsComponent.settings().selectedDimensions()
|
||||
);
|
||||
if (newPreset != currentPreset) {
|
||||
acc.bcl_setPreset(newPreset);
|
||||
}
|
||||
} else {
|
||||
WorldsTogether.LOGGER.error("Unable to access WorldGenSettingsComponent.");
|
||||
Holder<WorldPreset> currentPreset = uiState.getWorldType().preset();
|
||||
currentPreset = Helpers.presetFromDatapack(currentPreset);
|
||||
Holder<WorldPreset> newPreset = setupNewWorldCommon(
|
||||
levelStorageAccess.get(),
|
||||
currentPreset,
|
||||
uiState.getSettings().selectedDimensions()
|
||||
);
|
||||
if (newPreset != null && newPreset != currentPreset) {
|
||||
uiState.setWorldType(new WorldCreationUiState.WorldTypeEntry(newPreset));
|
||||
}
|
||||
} else {
|
||||
WorldsTogether.LOGGER.error("Unable to access Level Folder.");
|
||||
|
@ -188,13 +185,13 @@ public class WorldBootstrap {
|
|||
|
||||
}
|
||||
|
||||
static Optional<Holder<WorldPreset>> setupNewWorldCommon(
|
||||
static Holder<WorldPreset> setupNewWorldCommon(
|
||||
LevelStorageSource.LevelStorageAccess levelStorageAccess,
|
||||
Optional<Holder<WorldPreset>> currentPreset,
|
||||
Holder<WorldPreset> currentPreset,
|
||||
WorldDimensions worldDims
|
||||
) {
|
||||
final WorldDimensions dimensions;
|
||||
if (currentPreset.map(Holder::value).orElse(null) instanceof TogetherWorldPreset t) {
|
||||
if (currentPreset.value() instanceof TogetherWorldPreset t) {
|
||||
dimensions = t.getWorldDimensions();
|
||||
} else {
|
||||
dimensions = TogetherWorldPreset.getWorldDimensions(net.minecraft.world.level.levelgen.presets.WorldPresets.NORMAL);
|
||||
|
@ -251,7 +248,7 @@ public class WorldBootstrap {
|
|||
String levelID,
|
||||
WorldDimensions worldDims,
|
||||
LevelStorageSource levelSource,
|
||||
Optional<Holder<WorldPreset>> worldPreset
|
||||
Holder<WorldPreset> worldPreset
|
||||
) {
|
||||
try {
|
||||
var levelStorageAccess = levelSource.createAccess(levelID);
|
||||
|
@ -280,10 +277,10 @@ public class WorldBootstrap {
|
|||
}
|
||||
}
|
||||
|
||||
private static void writeWorldPresets(WorldDimensions dimensions, Optional<Holder<WorldPreset>> currentPreset) {
|
||||
private static void writeWorldPresets(WorldDimensions dimensions, Holder<WorldPreset> currentPreset) {
|
||||
currentPreset = WorldEventsImpl.ADAPT_WORLD_PRESET.emit(currentPreset, dimensions);
|
||||
|
||||
if (currentPreset.map(Holder::value).orElse(null) instanceof WorldPresetAccessor acc) {
|
||||
if (currentPreset != null && currentPreset.value() instanceof WorldPresetAccessor acc) {
|
||||
TogetherWorldPreset.writeWorldPresetSettings(acc.bcl_getDimensions());
|
||||
} else {
|
||||
WorldsTogether.LOGGER.error("Failed writing together File");
|
||||
|
|
|
@ -1,11 +0,0 @@
|
|||
package org.betterx.worlds.together.worldPreset;
|
||||
|
||||
import net.minecraft.core.Holder;
|
||||
import net.minecraft.world.level.levelgen.presets.WorldPreset;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
public interface WorldGenSettingsComponentAccessor {
|
||||
Optional<Holder<WorldPreset>> bcl_getPreset();
|
||||
void bcl_setPreset(Optional<Holder<WorldPreset>> preset);
|
||||
}
|
|
@ -11,10 +11,7 @@ import net.minecraft.core.registries.Registries;
|
|||
import net.minecraft.data.worldgen.BootstapContext;
|
||||
import net.minecraft.resources.ResourceKey;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.world.level.biome.Biome;
|
||||
import net.minecraft.world.level.biome.BiomeSource;
|
||||
import net.minecraft.world.level.biome.MultiNoiseBiomeSource;
|
||||
import net.minecraft.world.level.biome.TheEndBiomeSource;
|
||||
import net.minecraft.world.level.biome.*;
|
||||
import net.minecraft.world.level.chunk.ChunkGenerator;
|
||||
import net.minecraft.world.level.dimension.BuiltinDimensionTypes;
|
||||
import net.minecraft.world.level.dimension.DimensionType;
|
||||
|
@ -69,7 +66,10 @@ public class WorldPresets {
|
|||
public final WorldGenUtil.Context netherContext;
|
||||
public final WorldGenUtil.Context endContext;
|
||||
|
||||
public final HolderGetter<MultiNoiseBiomeSourceParameterList> parameterLists;
|
||||
|
||||
public BootstrapData(BootstapContext<WorldPreset> bootstapContext) {
|
||||
this.parameterLists = bootstapContext.lookup(Registries.MULTI_NOISE_BIOME_SOURCE_PARAMETER_LIST);
|
||||
final HolderGetter<DimensionType> dimensionTypes = bootstapContext.lookup(Registries.DIMENSION_TYPE);
|
||||
|
||||
this.noiseSettings = bootstapContext.lookup(Registries.NOISE_SETTINGS);
|
||||
|
@ -78,16 +78,20 @@ public class WorldPresets {
|
|||
this.structureSets = bootstapContext.lookup(Registries.STRUCTURE_SET);
|
||||
|
||||
this.overworldDimensionType = dimensionTypes.getOrThrow(BuiltinDimensionTypes.OVERWORLD);
|
||||
MultiNoiseBiomeSource overworldBiomeSource = MultiNoiseBiomeSource.Preset.OVERWORLD.biomeSource(this.biomes);
|
||||
Holder.Reference<MultiNoiseBiomeSourceParameterList> overworldParameters = parameterLists
|
||||
.getOrThrow(MultiNoiseBiomeSourceParameterLists.OVERWORLD);
|
||||
MultiNoiseBiomeSource overworldBiomeSource = MultiNoiseBiomeSource.createFromPreset(overworldParameters);
|
||||
Holder<NoiseGeneratorSettings> defaultOverworldNoise = this.noiseSettings.getOrThrow(NoiseGeneratorSettings.OVERWORLD);
|
||||
this.overworldStem = makeNoiseBasedOverworld(overworldBiomeSource, defaultOverworldNoise);
|
||||
|
||||
this.netherDimensionType = dimensionTypes.getOrThrow(BuiltinDimensionTypes.NETHER);
|
||||
Holder.Reference<MultiNoiseBiomeSourceParameterList> netherParameters = parameterLists
|
||||
.getOrThrow(MultiNoiseBiomeSourceParameterLists.NETHER);
|
||||
Holder<NoiseGeneratorSettings> defaultNetherNoise = this.noiseSettings.getOrThrow(NoiseGeneratorSettings.NETHER);
|
||||
this.netherStem = new LevelStem(
|
||||
netherDimensionType,
|
||||
new NoiseBasedChunkGenerator(
|
||||
MultiNoiseBiomeSource.Preset.NETHER.biomeSource(this.biomes),
|
||||
MultiNoiseBiomeSource.createFromPreset(netherParameters),
|
||||
defaultNetherNoise
|
||||
)
|
||||
);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue