From d3bc3a1421f49022f29830c92d265827d1a407dd Mon Sep 17 00:00:00 2001 From: marcus8448 Date: Fri, 27 May 2022 20:17:59 -0700 Subject: [PATCH 01/12] feat: use DynWorlds for satellites --- build.gradle.kts | 2 + gradle.properties | 3 +- .../accessor/ChunkSectionOxygenAccessor.java | 16 ++ .../celestialbody/landable/Landable.java | 8 +- .../client/fabric/GalacticraftAPIClient.java | 3 +- .../impl/internal/command/GCApiCommands.java | 141 ++++++++++++------ .../mixin/MinecraftServerAccessor.java | 46 ------ .../internal/mixin/MinecraftServerMixin.java | 23 +-- .../world/gen/SatelliteChunkGenerator.java | 7 +- .../celestialbody/type/PlanetType.java | 8 +- .../celestialbody/type/SatelliteType.java | 100 ++++++------- .../resources/galacticraft-api.mixins.json | 1 - 12 files changed, 188 insertions(+), 170 deletions(-) delete mode 100644 src/main/java/dev/galacticraft/impl/internal/mixin/MinecraftServerAccessor.java diff --git a/build.gradle.kts b/build.gradle.kts index 90104457..2cf34330 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -40,6 +40,7 @@ val yarn = project.property("yarn.build").toString() val loader = project.property("loader.version").toString() val fabric = project.property("fabric.version").toString() val machinelib = project.property("machinelib.version").toString() +val dynworlds = project.property("dynworlds.version").toString() group = modGroup version ="$modVersion+$minecraft" @@ -108,6 +109,7 @@ dependencies { } modImplementation("dev.galacticraft:MachineLib:$machinelib") + modImplementation("dev.galacticraft:dynworlds:$dynworlds") modRuntimeOnly("net.fabricmc.fabric-api:fabric-api:$fabric") } diff --git a/gradle.properties b/gradle.properties index f10bbee6..9e6a79f0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,4 +13,5 @@ loader.version=0.14.6 # Mod Dependencies fabric.version=0.53.0+1.18.2 -machinelib.version=0.1.0+1.18.2 \ No newline at end of file +machinelib.version=0.1.0+1.18.2 +dynworlds.version=0.1.0+1.18.2 diff --git a/src/main/java/dev/galacticraft/api/accessor/ChunkSectionOxygenAccessor.java b/src/main/java/dev/galacticraft/api/accessor/ChunkSectionOxygenAccessor.java index 492e0583..3b55bae7 100644 --- a/src/main/java/dev/galacticraft/api/accessor/ChunkSectionOxygenAccessor.java +++ b/src/main/java/dev/galacticraft/api/accessor/ChunkSectionOxygenAccessor.java @@ -26,7 +26,23 @@ * @author TeamGalacticraft */ public interface ChunkSectionOxygenAccessor { + /** + * Returns whether the supplied position in this chunk section is breathable for entities + * + * @param x the position to test on the X-axis + * @param y the position to test on the Y-axis + * @param z the position to test on the Z-axis + * @return whether the supplied position in this chunk section is breathable for entities + */ boolean isBreathable(int x, int y, int z); + /** + * Sets the breathable state for entities for the supplied position + * + * @param x the position to test on the X-axis + * @param y the position to test on the Y-axis + * @param z the position to test on the Z-axis + * @param value whether the supplied position is breathable + */ void setBreathable(int x, int y, int z, boolean value); } diff --git a/src/main/java/dev/galacticraft/api/universe/celestialbody/landable/Landable.java b/src/main/java/dev/galacticraft/api/universe/celestialbody/landable/Landable.java index 423d168a..ad1ce844 100644 --- a/src/main/java/dev/galacticraft/api/universe/celestialbody/landable/Landable.java +++ b/src/main/java/dev/galacticraft/api/universe/celestialbody/landable/Landable.java @@ -39,7 +39,7 @@ public interface Landable { * @param config the celestial body configuration to be queried * @return the registry key of the {@link World} this celestial body is linked to */ - @NotNull RegistryKey world(C config); + @NotNull RegistryKey world(@NotNull C config); /** * Returns the access weight required to generically reach this celestial body, or a negative value if it cannot be accessed this way. @@ -48,7 +48,7 @@ public interface Landable { * @param config the celestial body configuration to be queried * @return the access weight required to generically reach this celestial body */ - int accessWeight(C config); + int accessWeight(@NotNull C config); /** * Returns the approximate temperature on this celestial body during the day (in Celsius) @@ -56,7 +56,7 @@ public interface Landable { * @param config the celestial body configuration to be queried * @return the approximate temperature on this celestial body during the day */ - int dayTemperature(C config); + int dayTemperature(@NotNull C config); /** * Returns the approximate temperature on this celestial body during the night (in Celsius) @@ -64,5 +64,5 @@ public interface Landable { * @param config the celestial body configuration to be queried * @return the approximate temperature on this celestial body during the night */ - int nightTemperature(C config); + int nightTemperature(@NotNull C config); } diff --git a/src/main/java/dev/galacticraft/impl/internal/client/fabric/GalacticraftAPIClient.java b/src/main/java/dev/galacticraft/impl/internal/client/fabric/GalacticraftAPIClient.java index 82fcfd68..03cbc84a 100644 --- a/src/main/java/dev/galacticraft/impl/internal/client/fabric/GalacticraftAPIClient.java +++ b/src/main/java/dev/galacticraft/impl/internal/client/fabric/GalacticraftAPIClient.java @@ -38,6 +38,7 @@ import net.minecraft.nbt.NbtOps; import net.minecraft.network.PacketByteBuf; import net.minecraft.util.Identifier; +import net.minecraft.util.dynamic.RegistryOps; import org.jetbrains.annotations.ApiStatus; import java.util.Objects; @@ -53,7 +54,7 @@ public void onInitializeClient() { client.execute(() -> ((ClientResearchAccessor) Objects.requireNonNull(client.player)).readChanges(buf)); }); ClientPlayNetworking.registerGlobalReceiver(new Identifier(Constant.MOD_ID, "add_satellite"), (client, networkHandler, buffer, sender) -> { - ((SatelliteAccessor) networkHandler).addSatellite(buffer.readIdentifier(), new CelestialBody<>(SatelliteType.INSTANCE, SatelliteConfig.CODEC.decode(NbtOps.INSTANCE, buffer.readNbt()).get().orThrow().getFirst())); + ((SatelliteAccessor) networkHandler).addSatellite(buffer.readIdentifier(), new CelestialBody<>(SatelliteType.INSTANCE, SatelliteConfig.CODEC.decode(RegistryOps.of(NbtOps.INSTANCE, networkHandler.getRegistryManager()), buffer.readNbt()).get().orThrow().getFirst())); }); ClientPlayNetworking.registerGlobalReceiver(new Identifier(Constant.MOD_ID, "remove_satellite"), (client, networkHandler, buffer, sender) -> { PacketByteBuf buf = new PacketByteBuf(buffer.copy()); diff --git a/src/main/java/dev/galacticraft/impl/internal/command/GCApiCommands.java b/src/main/java/dev/galacticraft/impl/internal/command/GCApiCommands.java index 3db3f1c5..1713c11e 100644 --- a/src/main/java/dev/galacticraft/impl/internal/command/GCApiCommands.java +++ b/src/main/java/dev/galacticraft/impl/internal/command/GCApiCommands.java @@ -28,13 +28,16 @@ import com.mojang.brigadier.context.CommandContext; import com.mojang.brigadier.exceptions.CommandSyntaxException; import dev.galacticraft.api.accessor.WorldOxygenAccessor; +import dev.galacticraft.api.registry.AddonRegistry; import dev.galacticraft.impl.Constant; import dev.galacticraft.impl.command.argument.RegistryArgumentType; +import dev.galacticraft.impl.universe.celestialbody.type.SatelliteType; import net.fabricmc.fabric.api.command.v1.CommandRegistrationCallback; import net.minecraft.command.argument.BlockPosArgumentType; import net.minecraft.command.argument.IdentifierArgumentType; import net.minecraft.server.command.CommandManager; import net.minecraft.server.command.ServerCommandSource; +import net.minecraft.structure.Structure; import net.minecraft.text.LiteralText; import net.minecraft.text.TranslatableText; import net.minecraft.util.Identifier; @@ -42,56 +45,69 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.registry.Registry; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; + +import java.util.Objects; @ApiStatus.Internal public class GCApiCommands { public static void register() { - CommandRegistrationCallback.EVENT.register((commandDispatcher, server) -> { - LiteralArgumentBuilder builder = CommandManager.literal(Constant.MOD_ID + ":debug") - .requires(serverCommandSource -> serverCommandSource.hasPermissionLevel(2)) - .executes(context -> { - context.getSource().sendError(new TranslatableText("command.galacticraft-api.debug")); - return -1; - }); - builder.then(CommandManager.literal("registry").then(CommandManager.argument("registry", RegistryArgumentType.create()) - .then(CommandManager.literal("dump_ids").executes(context -> { - ServerCommandSource source = context.getSource(); - Registry registry = RegistryArgumentType.getRegistry(context, "registry"); - source.sendFeedback(new TranslatableText("command.galacticraft-api.debug.registry.dump", registry.getKey().getValue().toString()), true); - for (Identifier id : registry.getIds()) { - source.sendFeedback(new LiteralText(id.toString()), false); - } - return 1; - })).then(CommandManager.literal("get").then(CommandManager.argument("id", IdentifierArgumentType.identifier()).executes(context -> { - Registry registry = RegistryArgumentType.getRegistry(context, "registry"); - context.getSource().sendFeedback(new TranslatableText("command.galacticraft-api.debug.registry.id", registry.getKey().getValue(), registry.get(IdentifierArgumentType.getIdentifier(context, "id"))), true); - return 1; - }))).then(CommandManager.literal("get_raw").then(CommandManager.argument("id", IntegerArgumentType.integer()).executes(context -> { - Registry registry = RegistryArgumentType.getRegistry(context, "registry"); - context.getSource().sendFeedback(new TranslatableText("command.galacticraft-api.debug.registry.id", registry.getKey().getValue(), registry.get(IntegerArgumentType.getInteger(context, "id"))), true); - return 1; - }))).then(CommandManager.literal("to_raw").then(CommandManager.argument("id", IdentifierArgumentType.identifier()).executes(context -> { - Registry registry = RegistryArgumentType.getRegistry(context, "registry"); - Object o = registry.get(IdentifierArgumentType.getIdentifier(context, "id")); - context.getSource().sendFeedback(new TranslatableText("command.galacticraft-api.debug.registry.id", registry.getKey().getValue(), registry.getRawId(o)), true); - return 1; - }))).then(CommandManager.literal("dump_values").then(CommandManager.argument("id", IdentifierArgumentType.identifier()).executes(context -> { - ServerCommandSource source = context.getSource(); - Registry registry = RegistryArgumentType.getRegistry(context, "registry"); - source.sendFeedback(new TranslatableText("command.galacticraft-api.debug.registry.dump", registry.getKey().getValue().toString()), true); - for (Identifier id : registry.getIds()) { - source.sendFeedback(new LiteralText(id.toString() + " - " + registry.get(id)), false); - } - return 1; - }))))); - commandDispatcher.register(builder); - builder = CommandManager.literal(Constant.MOD_ID + ":oxygen").requires(source -> source.hasPermissionLevel(3)); - builder.then(CommandManager.literal("get").then(CommandManager.argument("start_pos", BlockPosArgumentType.blockPos()).executes(GCApiCommands::getOxygen).then(CommandManager.argument("end_pos", BlockPosArgumentType.blockPos()).executes(GCApiCommands::getOxygenArea)))); - builder.then(CommandManager.literal("set").requires(source -> source.hasPermissionLevel(4)).then(CommandManager.argument("start_pos", BlockPosArgumentType.blockPos()).then(CommandManager.argument("oxygen", BoolArgumentType.bool()).executes(GCApiCommands::setOxygen)).then(CommandManager.argument("end_pos", BlockPosArgumentType.blockPos()).then(CommandManager.argument("oxygen", BoolArgumentType.bool()).executes(GCApiCommands::setOxygenArea))))); - commandDispatcher.register(builder); + CommandRegistrationCallback.EVENT.register((dispatcher, server) -> { + dispatcher.register(CommandManager.literal(Constant.MOD_ID + ":debug") + .requires(serverCommandSource -> serverCommandSource.hasPermissionLevel(2)).then(CommandManager.literal("registry").then(CommandManager.argument("registry", RegistryArgumentType.create()) + .then(CommandManager.literal("dump_ids").executes(GCApiCommands::dumpRegistries)) + .then(CommandManager.literal("get") + .then(CommandManager.argument("id", IdentifierArgumentType.identifier()) + .executes(GCApiCommands::getRegistryValue))) + .then(CommandManager.literal("get_raw") + .then(CommandManager.argument("id", IntegerArgumentType.integer()) + .executes(GCApiCommands::getRegistryValueFromRawId))) + .then(CommandManager.literal("to_raw") + .then(CommandManager.argument("id", IdentifierArgumentType.identifier()) + .executes(GCApiCommands::getRegistryRawId))) + .then(CommandManager.literal("dump_values") + .then(CommandManager.argument("id", IdentifierArgumentType.identifier()) + .executes(GCApiCommands::dumpRegistryValues)))))); + + dispatcher.register(CommandManager.literal(Constant.MOD_ID + ":oxygen").requires(source -> source.hasPermissionLevel(3)) + .then(CommandManager.literal("get").then(CommandManager.argument("start_pos", BlockPosArgumentType.blockPos()) + .executes(GCApiCommands::getOxygen) + .then(CommandManager.argument("end_pos", BlockPosArgumentType.blockPos()) + .executes(GCApiCommands::getOxygenArea)))) + .then(CommandManager.literal("set") + .then(CommandManager.argument("start_pos", BlockPosArgumentType.blockPos()) + .then(CommandManager.argument("oxygen", BoolArgumentType.bool()) + .executes(GCApiCommands::setOxygen)) + .then(CommandManager.argument("end_pos", BlockPosArgumentType.blockPos()) + .then(CommandManager.argument("oxygen", BoolArgumentType.bool()) + .executes(GCApiCommands::setOxygenArea)))))); + + dispatcher.register(CommandManager.literal(Constant.MOD_ID + ":satellite").requires(source -> source.hasPermissionLevel(3)) + .then(CommandManager.literal("add").then(CommandManager.argument("world", IdentifierArgumentType.identifier()) + .executes(GCApiCommands::addSatellite) + .then(CommandManager.argument("structure", IdentifierArgumentType.identifier()) + .executes(GCApiCommands::addSatelliteStructured)))) + .then(CommandManager.literal("remove").then(CommandManager.argument("id", IdentifierArgumentType.identifier()) + .executes(GCApiCommands::removeSatellite)))); }); } + private static int removeSatellite(@NotNull CommandContext ctx) throws CommandSyntaxException { + SatelliteType.removeSatellite(ctx.getSource().getServer(), IdentifierArgumentType.getIdentifier(ctx, "id")); + return 1; + } + + private static int addSatelliteStructured(@NotNull CommandContext ctx) throws CommandSyntaxException { + Structure structure = ctx.getSource().getServer().getStructureManager().getStructure(IdentifierArgumentType.getIdentifier(ctx, "structure")).orElseThrow(); + SatelliteType.registerSatellite(ctx.getSource().getServer(), ctx.getSource().getPlayer(), Objects.requireNonNull(ctx.getSource().getRegistryManager().get(AddonRegistry.CELESTIAL_BODY_KEY).get(IdentifierArgumentType.getIdentifier(ctx, "world"))), structure); + return 1; + } + + private static int addSatellite(@NotNull CommandContext ctx) throws CommandSyntaxException { + SatelliteType.registerSatellite(ctx.getSource().getServer(), ctx.getSource().getPlayer(), Objects.requireNonNull(ctx.getSource().getRegistryManager().get(AddonRegistry.CELESTIAL_BODY_KEY).get(IdentifierArgumentType.getIdentifier(ctx, "world"))), new Structure()); + return 1; + } + private static int setOxygen(CommandContext context) throws CommandSyntaxException { BlockPos pos = BlockPosArgumentType.getLoadedBlockPos(context, "start_pos"); boolean b = BoolArgumentType.getBool(context, "oxygen"); @@ -156,4 +172,43 @@ private static int getOxygenArea(CommandContext context) th } return 1; } + + private static int getRegistryValue(CommandContext context) { + Registry registry = RegistryArgumentType.getRegistry(context, "registry"); + context.getSource().sendFeedback(new TranslatableText("command.galacticraft-api.debug.registry.id", registry.getKey().getValue(), registry.get(IdentifierArgumentType.getIdentifier(context, "id"))), true); + return 1; + } + + private static int getRegistryRawId(CommandContext context) { + Registry registry = RegistryArgumentType.getRegistry(context, "registry"); + Object o = registry.get(IdentifierArgumentType.getIdentifier(context, "id")); + context.getSource().sendFeedback(new TranslatableText("command.galacticraft-api.debug.registry.id", registry.getKey().getValue(), registry.getRawId(o)), true); + return 1; + } + + private static int dumpRegistryValues(CommandContext context) { + ServerCommandSource source = context.getSource(); + Registry registry = RegistryArgumentType.getRegistry(context, "registry"); + source.sendFeedback(new TranslatableText("command.galacticraft-api.debug.registry.dump", registry.getKey().getValue().toString()), true); + for (Identifier id : registry.getIds()) { + source.sendFeedback(new LiteralText(id.toString() + " - " + registry.get(id)), false); + } + return 1; + } + + private static int dumpRegistries(CommandContext context) { + ServerCommandSource source = context.getSource(); + Registry registry = RegistryArgumentType.getRegistry(context, "registry"); + source.sendFeedback(new TranslatableText("command.galacticraft-api.debug.registry.dump", registry.getKey().getValue().toString()), true); + for (Identifier id : registry.getIds()) { + source.sendFeedback(new LiteralText(id.toString()), false); + } + return 1; + } + + private static int getRegistryValueFromRawId(CommandContext context) { + Registry registry = RegistryArgumentType.getRegistry(context, "registry"); + context.getSource().sendFeedback(new TranslatableText("command.galacticraft-api.debug.registry.id", registry.getKey().getValue(), registry.get(IntegerArgumentType.getInteger(context, "id"))), true); + return 1; + } } diff --git a/src/main/java/dev/galacticraft/impl/internal/mixin/MinecraftServerAccessor.java b/src/main/java/dev/galacticraft/impl/internal/mixin/MinecraftServerAccessor.java deleted file mode 100644 index 501297f8..00000000 --- a/src/main/java/dev/galacticraft/impl/internal/mixin/MinecraftServerAccessor.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (c) 2019-2022 Team Galacticraft - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package dev.galacticraft.impl.internal.mixin; - -import net.minecraft.server.MinecraftServer; -import net.minecraft.server.world.ServerWorld; -import net.minecraft.util.registry.RegistryKey; -import net.minecraft.world.World; -import net.minecraft.world.level.storage.LevelStorage; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -import java.util.Map; -import java.util.concurrent.Executor; - -@Mixin(MinecraftServer.class) -public interface MinecraftServerAccessor { - @Accessor("workerExecutor") - Executor getWorkerExecutor(); - - @Accessor("session") - LevelStorage.Session getSession(); - - @Accessor("worlds") - Map, ServerWorld> getWorlds(); -} diff --git a/src/main/java/dev/galacticraft/impl/internal/mixin/MinecraftServerMixin.java b/src/main/java/dev/galacticraft/impl/internal/mixin/MinecraftServerMixin.java index d20424d4..d1f7f5db 100644 --- a/src/main/java/dev/galacticraft/impl/internal/mixin/MinecraftServerMixin.java +++ b/src/main/java/dev/galacticraft/impl/internal/mixin/MinecraftServerMixin.java @@ -35,6 +35,8 @@ import net.minecraft.server.world.ServerWorld; import net.minecraft.util.Identifier; import net.minecraft.util.WorldSavePath; +import net.minecraft.util.dynamic.RegistryOps; +import net.minecraft.util.registry.DynamicRegistryManager; import net.minecraft.util.registry.Registry; import net.minecraft.util.registry.RegistryEntry; import net.minecraft.util.registry.RegistryKey; @@ -69,11 +71,8 @@ public abstract class MinecraftServerMixin implements SatelliteAccessor { @Unique private final Map> satellites = new HashMap<>(); @Shadow @Final protected LevelStorage.Session session; - @Shadow @Final private Executor workerExecutor; - @Shadow @Final private Map, ServerWorld> worlds; - @Shadow public abstract SaveProperties getSaveProperties(); - @Shadow @Nullable public abstract ServerWorld getWorld(RegistryKey key); + @Shadow public abstract DynamicRegistryManager.Immutable getRegistryManager(); @Override public @Unmodifiable Map> getSatellites() { @@ -108,7 +107,7 @@ private void galacticraft_saveSatellites(boolean suppressLogs, boolean bl, boole } } - @Inject(method = "runServer", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/MinecraftServer;setupServer()Z", shift = At.Shift.AFTER)) + @Inject(method = "loadWorld", at = @At(value = "HEAD")) private void galacticraft_loadSatellites(CallbackInfo ci) { File worldFile = this.session.getDirectory(WorldSavePath.ROOT).toFile(); if (new File(worldFile, "satellites.dat").exists()) { @@ -117,20 +116,10 @@ private void galacticraft_loadSatellites(CallbackInfo ci) { assert nbt != null : "NBT list was null"; for (NbtElement compound : nbt) { assert compound instanceof NbtCompound : "Not a compound?!"; - this.satellites.put(new Identifier(((NbtCompound) compound).getString("id")), new CelestialBody<>(SatelliteType.INSTANCE, SatelliteConfig.CODEC.decode(NbtOps.INSTANCE, compound).get().orThrow().getFirst())); - } - - WorldBorder worldBorder = getWorld(World.OVERWORLD).getWorldBorder(); - for (Map.Entry> entry : this.satellites.entrySet()) { - RegistryEntry type = entry.getValue().config().dimensionOptions().getDimensionTypeSupplier(); - ChunkGenerator chunkGenerator = entry.getValue().config().dimensionOptions().getChunkGenerator(); - UnmodifiableLevelProperties unmodifiableLevelProperties = new UnmodifiableLevelProperties(getSaveProperties(), getSaveProperties().getMainWorldProperties()); - ServerWorld world = new ServerWorld((MinecraftServer) (Object) this, workerExecutor, session, unmodifiableLevelProperties, RegistryKey.of(Registry.WORLD_KEY, entry.getKey()), type, SatelliteType.EMPTY_PROGRESS_LISTENER, chunkGenerator, getSaveProperties().getGeneratorOptions().isDebugWorld(), BiomeAccess.hashSeed(getSaveProperties().getGeneratorOptions().getSeed()), ImmutableList.of(), false); - worldBorder.addListener(new WorldBorderListener.WorldBorderSyncer(world.getWorldBorder())); - worlds.put(RegistryKey.of(Registry.WORLD_KEY, entry.getKey()), world); + this.satellites.put(new Identifier(((NbtCompound) compound).getString("id")), new CelestialBody<>(SatelliteType.INSTANCE, SatelliteConfig.CODEC.decode(RegistryOps.of(NbtOps.INSTANCE, this.getRegistryManager()), compound).get().orThrow().getFirst())); } } catch (Throwable exception) { - throw new RuntimeException("Failed to reade satellite data!", exception); + throw new RuntimeException("Failed to read satellite data!", exception); } } } diff --git a/src/main/java/dev/galacticraft/impl/internal/world/gen/SatelliteChunkGenerator.java b/src/main/java/dev/galacticraft/impl/internal/world/gen/SatelliteChunkGenerator.java index 4cf0ec30..872f03d5 100644 --- a/src/main/java/dev/galacticraft/impl/internal/world/gen/SatelliteChunkGenerator.java +++ b/src/main/java/dev/galacticraft/impl/internal/world/gen/SatelliteChunkGenerator.java @@ -60,6 +60,7 @@ import net.minecraft.world.gen.densityfunction.DensityFunctionTypes; import net.minecraft.world.gen.feature.ConfiguredStructureFeature; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Collections; @@ -96,10 +97,10 @@ public DataResult encode(Structure input, DynamicOps ops, T prefix) { private static final MultiNoiseUtil.MultiNoiseSampler EMPTY_SAMPLER = new MultiNoiseUtil.MultiNoiseSampler(DensityFunctionTypes.zero(), DensityFunctionTypes.zero(), DensityFunctionTypes.zero(),DensityFunctionTypes.zero(), DensityFunctionTypes.zero(),DensityFunctionTypes.zero(), Collections.emptyList()); private static final VerticalBlockSample EMPTY_VIEW = new VerticalBlockSample(0, new BlockState[0]); - private final Structure structure; - private final RegistryEntry biome; + private final @NotNull Structure structure; + private final @NotNull RegistryEntry biome; - public SatelliteChunkGenerator(Registry registry, RegistryEntry biome, Structure structure) { + public SatelliteChunkGenerator(@NotNull Registry registry, @NotNull RegistryEntry biome, @NotNull Structure structure) { super(registry, Optional.empty(), new FixedBiomeSource(biome)); this.structure = structure; this.biome = biome; diff --git a/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/PlanetType.java b/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/PlanetType.java index dc6b07ce..366b0657 100644 --- a/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/PlanetType.java +++ b/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/PlanetType.java @@ -77,7 +77,7 @@ protected PlanetType() { } @Override - public @NotNull RegistryKey world(PlanetConfig config) { + public @NotNull RegistryKey world(@NotNull PlanetConfig config) { return config.world(); } @@ -92,17 +92,17 @@ public float gravity(PlanetConfig config) { } @Override - public int accessWeight(PlanetConfig config) { + public int accessWeight(@NotNull PlanetConfig config) { return config.accessWeight(); } @Override - public int dayTemperature(PlanetConfig config) { + public int dayTemperature(@NotNull PlanetConfig config) { return config.dayTemperature(); } @Override - public int nightTemperature(PlanetConfig config) { + public int nightTemperature(@NotNull PlanetConfig config) { return config.nightTemperature(); } diff --git a/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/SatelliteType.java b/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/SatelliteType.java index f9b4c091..2ee24bda 100644 --- a/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/SatelliteType.java +++ b/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/SatelliteType.java @@ -22,7 +22,6 @@ package dev.galacticraft.impl.universe.celestialbody.type; -import com.google.common.collect.ImmutableList; import com.mojang.serialization.Codec; import dev.galacticraft.api.accessor.SatelliteAccessor; import dev.galacticraft.api.gas.GasComposition; @@ -30,13 +29,15 @@ import dev.galacticraft.api.satellite.Satellite; import dev.galacticraft.api.satellite.SatelliteOwnershipData; import dev.galacticraft.api.universe.celestialbody.CelestialBody; +import dev.galacticraft.api.universe.celestialbody.CelestialBodyConfig; import dev.galacticraft.api.universe.celestialbody.CelestialBodyType; import dev.galacticraft.api.universe.celestialbody.landable.Landable; import dev.galacticraft.api.universe.display.CelestialDisplay; import dev.galacticraft.api.universe.galaxy.Galaxy; import dev.galacticraft.api.universe.position.CelestialPosition; +import dev.galacticraft.dynworlds.api.DynamicWorldRegistry; +import dev.galacticraft.dynworlds.api.PlayerDestroyer; import dev.galacticraft.impl.Constant; -import dev.galacticraft.impl.internal.mixin.MinecraftServerAccessor; import dev.galacticraft.impl.internal.world.gen.SatelliteChunkGenerator; import dev.galacticraft.impl.internal.world.gen.biome.GcApiBiomes; import dev.galacticraft.impl.universe.display.config.IconCelestialDisplayConfig; @@ -55,6 +56,7 @@ import net.minecraft.server.world.ServerWorld; import net.minecraft.structure.Structure; import net.minecraft.tag.TagKey; +import net.minecraft.test.TestServer; import net.minecraft.text.Text; import net.minecraft.text.TranslatableText; import net.minecraft.util.Identifier; @@ -63,40 +65,33 @@ import net.minecraft.util.registry.RegistryEntry; import net.minecraft.util.registry.RegistryKey; import net.minecraft.world.World; -import net.minecraft.world.biome.source.BiomeAccess; -import net.minecraft.world.border.WorldBorderListener; import net.minecraft.world.chunk.ChunkStatus; import net.minecraft.world.dimension.DimensionOptions; import net.minecraft.world.dimension.DimensionType; -import net.minecraft.world.gen.chunk.ChunkGenerator; -import net.minecraft.world.level.UnmodifiableLevelProperties; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.LinkedList; -import java.util.Locale; -import java.util.Objects; -import java.util.OptionalLong; +import java.util.*; public class SatelliteType extends CelestialBodyType implements Satellite, Landable { public static final SatelliteType INSTANCE = new SatelliteType(SatelliteConfig.CODEC); - public static final WorldGenerationProgressListener EMPTY_PROGRESS_LISTENER = new WorldGenerationProgressListener() { - @Override - public void start(ChunkPos spawnPos) { - } - - @Override - public void setChunkStatus(ChunkPos pos, @Nullable ChunkStatus status) { - } - - @Override - public void start() { - } - - @Override - public void stop() { + private static final PlayerDestroyer PLAYER_DESTROYER = (server, player) -> { + CelestialBody> satellite = CelestialBody.getByDimension(server.getRegistryManager(), player.getWorld().getRegistryKey()).orElse(null); + if (satellite != null) { + CelestialBody parent = satellite.parent(server.getRegistryManager()); + if (parent != null) { + if (parent.type() instanceof Landable landable) { + ServerWorld world = server.getWorld(landable.world(parent.config())); + player.teleport(world, player.getX(), world.getTopY() * 2, player.getZ(), player.getYaw(), player.getPitch()); + player.setVelocity((world.random.nextDouble() - 0.5) * 10.0, world.random.nextDouble() * 12.5, (world.random.nextDouble() - 0.5) * 10.0); + return; + } + } } + ServerWorld overworld = server.getOverworld(); + player.teleport(overworld, 0, 1000, 0, player.getYaw(), player.getPitch()); + player.setVelocity((overworld.random.nextDouble() - 0.5) * 10.0, overworld.random.nextDouble() * 20.0, (overworld.random.nextDouble() - 0.5) * 10.0); }; private static final GasComposition EMPTY_GAS_COMPOSITION = new GasComposition.Builder().build(); private static final TranslatableText NAME = new TranslatableText("ui.galacticraft-api.satellite.name"); @@ -106,9 +101,10 @@ protected SatelliteType(Codec codec) { super(codec); } - @ApiStatus.Internal - public static CelestialBody registerSatellite(@NotNull MinecraftServer server, @NotNull ServerPlayerEntity player, @NotNull CelestialBody parent, Structure structure) { - Identifier id = new Identifier(Objects.requireNonNull(server.getRegistryManager().get(AddonRegistry.CELESTIAL_BODY_KEY).getId(parent)) + "_" + player.getEntityName().toLowerCase(Locale.ROOT)); + @ApiStatus.Experimental + public static CelestialBody registerSatellite(@NotNull MinecraftServer server, @NotNull ServerPlayerEntity player, @NotNull CelestialBody parent, @NotNull Structure structure) { + Identifier identifier = Objects.requireNonNull(server.getRegistryManager().get(AddonRegistry.CELESTIAL_BODY_KEY).getId(parent)); + Identifier id = new Identifier(identifier.getNamespace(), "sat_" + identifier.getPath() + "_" + player.getGameProfile().getName().toLowerCase(Locale.ROOT)); DimensionType type = DimensionType.create(OptionalLong.empty(), true, false, false, true, 1, false, false, false, false, false, 0, 256, 256, new TagKey<>(Registry.BLOCK_KEY, new Identifier(Constant.MOD_ID, "infiniburn_space")), new Identifier(Constant.MOD_ID, "space_sky"), 0); DimensionOptions options = new DimensionOptions(RegistryEntry.of(type), new SatelliteChunkGenerator(server.getRegistryManager().get(Registry.STRUCTURE_SET_KEY), RegistryEntry.of(GcApiBiomes.SPACE), structure)); SatelliteOwnershipData ownershipData = SatelliteOwnershipData.create(player.getUuid(), player.getEntityName(), new LinkedList<>(), false); @@ -118,12 +114,11 @@ public static CelestialBody registerSatellite(@N RegistryKey key2 = RegistryKey.of(Registry.DIMENSION_TYPE_KEY, id); assert server.getWorld(key) == null : "World already registered?!"; assert server.getRegistryManager().get(Registry.DIMENSION_TYPE_KEY).get(key2) == null : "Dimension Type already registered?!"; - Registry.register(server.getRegistryManager().get(Registry.DIMENSION_TYPE_KEY), id, type); return create(id, server, parent, position, display, options, ownershipData, player.getGameProfile().getName() + "'s Space Station"); } - @ApiStatus.Internal - public static CelestialBody create(Identifier id, MinecraftServer server, CelestialBody parent, CelestialPosition position, CelestialDisplay display, + @ApiStatus.Experimental + public static CelestialBody create(Identifier id, @NotNull MinecraftServer server, CelestialBody parent, CelestialPosition position, CelestialDisplay display, DimensionOptions options, SatelliteOwnershipData ownershipData, String name) { SatelliteConfig config = new SatelliteConfig(RegistryKey.of(AddonRegistry.CELESTIAL_BODY_KEY, server.getRegistryManager().get(AddonRegistry.CELESTIAL_BODY_KEY).getId(parent)), parent.galaxy(), position, display, ownershipData, RegistryKey.of(Registry.WORLD_KEY, id), EMPTY_GAS_COMPOSITION, 0.0f, parent.type() instanceof Landable ? ((Landable) parent.type()).accessWeight(parent.config()) : 1, options); config.customName(new TranslatableText(name)); @@ -131,12 +126,7 @@ public static CelestialBody create(Identifier id ((SatelliteAccessor) server).addSatellite(id, satellite); Constant.LOGGER.debug("Attempting to create a world dynamically ({})", id); - RegistryEntry dimensionType3 = options.getDimensionTypeSupplier(); - ChunkGenerator chunkGenerator3 = options.getChunkGenerator(); - UnmodifiableLevelProperties unmodifiableLevelProperties = new UnmodifiableLevelProperties(server.getSaveProperties(), server.getSaveProperties().getMainWorldProperties()); - ServerWorld serverWorld2 = new ServerWorld(server, ((MinecraftServerAccessor) server).getWorkerExecutor(), ((MinecraftServerAccessor) server).getSession(), unmodifiableLevelProperties, RegistryKey.of(Registry.WORLD_KEY, id), dimensionType3, EMPTY_PROGRESS_LISTENER, chunkGenerator3, server.getSaveProperties().getGeneratorOptions().isDebugWorld(), BiomeAccess.hashSeed(server.getSaveProperties().getGeneratorOptions().getSeed()), ImmutableList.of(), false); - server.getWorld(World.OVERWORLD).getWorldBorder().addListener(new WorldBorderListener.WorldBorderSyncer(serverWorld2.getWorldBorder())); - ((MinecraftServerAccessor) server).getWorlds().put(RegistryKey.of(Registry.WORLD_KEY, id), serverWorld2); + ((DynamicWorldRegistry) server).addDynamicWorld(id, options, options.getDimensionTypeSupplier().value()); for (ServerPlayerEntity player : server.getPlayerManager().getPlayerList()) { NbtCompound compound = (NbtCompound) SatelliteConfig.CODEC.encode(satellite.config(), NbtOps.INSTANCE, new NbtCompound()).get().orThrow(); @@ -145,18 +135,28 @@ public static CelestialBody create(Identifier id return satellite; } + @ApiStatus.Experimental + public static void removeSatellite(@NotNull MinecraftServer server, Identifier id) { + ((DynamicWorldRegistry) server).removeDynamicWorld(id, PLAYER_DESTROYER); + ((SatelliteAccessor) server).removeSatellite(id); + + for (ServerPlayerEntity player : server.getPlayerManager().getPlayerList()) { + ServerPlayNetworking.send(player, new Identifier(Constant.MOD_ID, "remove_satellite"), new PacketByteBuf(Unpooled.buffer()).writeIdentifier(id)); + } + } + @Override public @NotNull TranslatableText name(SatelliteConfig config) { return NAME; } @Override - public @Nullable CelestialBody parent(Registry> registry, SatelliteConfig config) { + public @Nullable CelestialBody parent(@NotNull Registry> registry, @NotNull SatelliteConfig config) { return registry.get(config.parent()); } @Override - public @NotNull RegistryKey galaxy(SatelliteConfig config) { + public @NotNull RegistryKey galaxy(@NotNull SatelliteConfig config) { return config.galaxy(); } @@ -166,57 +166,57 @@ public static CelestialBody create(Identifier id } @Override - public @NotNull CelestialPosition position(SatelliteConfig config) { + public @NotNull CelestialPosition position(@NotNull SatelliteConfig config) { return config.position(); } @Override - public @NotNull CelestialDisplay display(SatelliteConfig config) { + public @NotNull CelestialDisplay display(@NotNull SatelliteConfig config) { return config.display(); } @Override - public SatelliteOwnershipData ownershipData(SatelliteConfig config) { + public SatelliteOwnershipData ownershipData(@NotNull SatelliteConfig config) { return config.ownershipData(); } @Override - public void setCustomName(@NotNull Text text, SatelliteConfig config) { + public void setCustomName(@NotNull Text text, @NotNull SatelliteConfig config) { config.customName(text); } @Override - public @NotNull Text getCustomName(SatelliteConfig config) { + public @NotNull Text getCustomName(@NotNull SatelliteConfig config) { return config.customName(); } @Override - public @NotNull RegistryKey world(SatelliteConfig config) { + public @NotNull RegistryKey world(@NotNull SatelliteConfig config) { return config.world(); } @Override - public @NotNull GasComposition atmosphere(SatelliteConfig config) { + public @NotNull GasComposition atmosphere(@NotNull SatelliteConfig config) { return config.atmosphere(); } @Override - public float gravity(SatelliteConfig config) { + public float gravity(@NotNull SatelliteConfig config) { return config.gravity(); } @Override - public int accessWeight(SatelliteConfig config) { + public int accessWeight(@NotNull SatelliteConfig config) { return config.accessWeight(); } @Override - public int dayTemperature(SatelliteConfig config) { + public int dayTemperature(@NotNull SatelliteConfig config) { return 121; } @Override - public int nightTemperature(SatelliteConfig config) { + public int nightTemperature(@NotNull SatelliteConfig config) { return -157; } diff --git a/src/main/resources/galacticraft-api.mixins.json b/src/main/resources/galacticraft-api.mixins.json index 1964fc82..259bfa33 100644 --- a/src/main/resources/galacticraft-api.mixins.json +++ b/src/main/resources/galacticraft-api.mixins.json @@ -12,7 +12,6 @@ "EmptyChunkMixin", "EntityGravityMixin", "LivingEntityMixin", - "MinecraftServerAccessor", "MinecraftServerMixin", "PlayerManagerMixin", "ProtoChunkMixin", From 8dda94733dabbfe67406487c76c9b0c4cbed30aa Mon Sep 17 00:00:00 2001 From: marcus8448 Date: Sun, 29 May 2022 20:11:21 -0700 Subject: [PATCH 02/12] fix: send satellites on world join add hook for setting sky/weather/etc. providers for the world --- .../dev/galacticraft/api/satellite/Satellite.java | 4 ++-- .../celestialbody/satellite/Orbitable.java | 13 +++++++++++++ .../impl/internal/mixin/PlayerManagerMixin.java | 15 +++++++++++++++ .../client/ClientPlayNetworkHandlerMixin.java | 9 +++++++++ .../celestialbody/type/DecorativePlanet.java | 6 ++++++ .../universe/celestialbody/type/PlanetType.java | 5 +++++ .../celestialbody/type/SatelliteType.java | 5 +++++ 7 files changed, 55 insertions(+), 2 deletions(-) diff --git a/src/main/java/dev/galacticraft/api/satellite/Satellite.java b/src/main/java/dev/galacticraft/api/satellite/Satellite.java index f8be4b5f..3d7a1cc9 100644 --- a/src/main/java/dev/galacticraft/api/satellite/Satellite.java +++ b/src/main/java/dev/galacticraft/api/satellite/Satellite.java @@ -39,7 +39,7 @@ public interface Satellite { * @return the ownership data of this satellite * @see SatelliteOwnershipData */ - SatelliteOwnershipData ownershipData(C config); + SatelliteOwnershipData ownershipData(@NotNull C config); /** * Returns the custom name of this satellite @@ -56,5 +56,5 @@ public interface Satellite { * @param text the text to set * @param config the satellite configuration to be set */ - void setCustomName(@NotNull Text text, C config); + void setCustomName(@NotNull Text text, @NotNull C config); } diff --git a/src/main/java/dev/galacticraft/api/universe/celestialbody/satellite/Orbitable.java b/src/main/java/dev/galacticraft/api/universe/celestialbody/satellite/Orbitable.java index b0a6466f..5ae47b45 100644 --- a/src/main/java/dev/galacticraft/api/universe/celestialbody/satellite/Orbitable.java +++ b/src/main/java/dev/galacticraft/api/universe/celestialbody/satellite/Orbitable.java @@ -24,6 +24,8 @@ import dev.galacticraft.api.satellite.SatelliteRecipe; import dev.galacticraft.api.universe.celestialbody.CelestialBodyConfig; +import net.minecraft.util.registry.RegistryKey; +import net.minecraft.world.World; import org.jetbrains.annotations.Nullable; /** @@ -39,4 +41,15 @@ public interface Orbitable { * @return the {@link SatelliteRecipe stellite recipe} of this celestial body */ @Nullable SatelliteRecipe satelliteRecipe(C config); + + + /** + * Callback to register client listeners (for example, {@link net.fabricmc.fabric.api.client.rendering.v1.DimensionRenderingRegistry.SkyRenderer sky renderers}) for this celestial body. + * Should only be called on the client. + * + * + * @param key the {@link net.minecraft.util.registry.RegistryKey} of the satellite's dimension + * @param config the celestial body configuration + */ + void registerClientWorldHooks(RegistryKey key, C config); } diff --git a/src/main/java/dev/galacticraft/impl/internal/mixin/PlayerManagerMixin.java b/src/main/java/dev/galacticraft/impl/internal/mixin/PlayerManagerMixin.java index 12a8cb1e..50ba328b 100644 --- a/src/main/java/dev/galacticraft/impl/internal/mixin/PlayerManagerMixin.java +++ b/src/main/java/dev/galacticraft/impl/internal/mixin/PlayerManagerMixin.java @@ -23,17 +23,25 @@ package dev.galacticraft.impl.internal.mixin; import dev.galacticraft.api.accessor.GearInventoryProvider; +import dev.galacticraft.api.accessor.SatelliteAccessor; import dev.galacticraft.impl.Constant; +import dev.galacticraft.impl.universe.position.config.SatelliteConfig; import net.fabricmc.fabric.api.networking.v1.PacketByteBufs; import net.fabricmc.fabric.api.networking.v1.PlayerLookup; import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; import net.minecraft.inventory.Inventory; +import net.minecraft.nbt.NbtCompound; +import net.minecraft.nbt.NbtOps; import net.minecraft.network.ClientConnection; import net.minecraft.network.PacketByteBuf; +import net.minecraft.network.packet.s2c.play.CustomPayloadS2CPacket; +import net.minecraft.server.MinecraftServer; import net.minecraft.server.PlayerManager; import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.test.TestServer; import net.minecraft.util.Identifier; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @@ -45,6 +53,8 @@ */ @Mixin(PlayerManager.class) public abstract class PlayerManagerMixin { + @Shadow public abstract MinecraftServer getServer(); + @Inject(method = "onPlayerConnect", at = @At("RETURN")) private void galacticraft_syncGearInventory(ClientConnection connection, ServerPlayerEntity player, CallbackInfo ci) { PacketByteBuf buf = PacketByteBufs.create(); @@ -62,5 +72,10 @@ private void galacticraft_syncGearInventory(ClientConnection connection, ServerP for (ServerPlayerEntity pl : tracking) { ServerPlayNetworking.send(pl, new Identifier(Constant.MOD_ID, "gear_inv_sync"), PacketByteBufs.copy(buf)); } + + ((SatelliteAccessor) this.getServer()).getSatellites().forEach((id, satellite) -> { + NbtCompound compound = (NbtCompound) SatelliteConfig.CODEC.encode(satellite.config(), NbtOps.INSTANCE, new NbtCompound()).get().orThrow(); + connection.send(new CustomPayloadS2CPacket(new Identifier(Constant.MOD_ID, "add_satellite"), PacketByteBufs.create().writeIdentifier(id).writeNbt(compound))); + }); } } diff --git a/src/main/java/dev/galacticraft/impl/internal/mixin/client/ClientPlayNetworkHandlerMixin.java b/src/main/java/dev/galacticraft/impl/internal/mixin/client/ClientPlayNetworkHandlerMixin.java index 9fac4769..5203d33c 100644 --- a/src/main/java/dev/galacticraft/impl/internal/mixin/client/ClientPlayNetworkHandlerMixin.java +++ b/src/main/java/dev/galacticraft/impl/internal/mixin/client/ClientPlayNetworkHandlerMixin.java @@ -24,13 +24,18 @@ import dev.galacticraft.api.client.accessor.ClientSatelliteAccessor; import dev.galacticraft.api.universe.celestialbody.CelestialBody; +import dev.galacticraft.api.universe.celestialbody.satellite.Orbitable; import dev.galacticraft.impl.universe.celestialbody.type.SatelliteType; import dev.galacticraft.impl.universe.position.config.SatelliteConfig; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.network.ClientPlayNetworkHandler; import net.minecraft.util.Identifier; +import net.minecraft.util.registry.DynamicRegistryManager; +import net.minecraft.util.registry.Registry; +import net.minecraft.util.registry.RegistryKey; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; import java.util.ArrayList; @@ -41,6 +46,8 @@ @Environment(EnvType.CLIENT) @Mixin(ClientPlayNetworkHandler.class) public abstract class ClientPlayNetworkHandlerMixin implements ClientSatelliteAccessor { + @Shadow public abstract DynamicRegistryManager getRegistryManager(); + private final @Unique Map> satellites = new HashMap<>(); private final @Unique List listeners = new ArrayList<>(); @@ -51,6 +58,8 @@ public Map> getSatelli @Override public void addSatellite(Identifier id, CelestialBody satellite) { + CelestialBody parent = satellite.parent(this.getRegistryManager()); + ((Orbitable) parent.type()).registerClientWorldHooks(RegistryKey.of(Registry.WORLD_KEY, id), parent.config()); this.satellites.put(id, satellite); for (SatelliteListener listener : this.listeners) { listener.onSatelliteUpdated(satellite, true); diff --git a/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/DecorativePlanet.java b/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/DecorativePlanet.java index c7cfa8b1..a3ee2b76 100644 --- a/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/DecorativePlanet.java +++ b/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/DecorativePlanet.java @@ -34,6 +34,7 @@ import net.minecraft.text.TranslatableText; import net.minecraft.util.registry.Registry; import net.minecraft.util.registry.RegistryKey; +import net.minecraft.world.World; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -88,4 +89,9 @@ public float gravity(DecorativePlanetConfig config) { public @Nullable SatelliteRecipe satelliteRecipe(DecorativePlanetConfig config) { return config.satelliteRecipe().orElse(null); } + + @Override + public void registerClientWorldHooks(RegistryKey key, DecorativePlanetConfig config) { + + } } diff --git a/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/PlanetType.java b/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/PlanetType.java index 366b0657..a6fefbe3 100644 --- a/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/PlanetType.java +++ b/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/PlanetType.java @@ -110,4 +110,9 @@ public int nightTemperature(@NotNull PlanetConfig config) { public @Nullable SatelliteRecipe satelliteRecipe(PlanetConfig config) { return config.satelliteRecipe().orElse(null); } + + @Override + public void registerClientWorldHooks(RegistryKey key, PlanetConfig config) { + + } } diff --git a/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/SatelliteType.java b/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/SatelliteType.java index 2ee24bda..56861963 100644 --- a/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/SatelliteType.java +++ b/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/SatelliteType.java @@ -32,6 +32,7 @@ import dev.galacticraft.api.universe.celestialbody.CelestialBodyConfig; import dev.galacticraft.api.universe.celestialbody.CelestialBodyType; import dev.galacticraft.api.universe.celestialbody.landable.Landable; +import dev.galacticraft.api.universe.celestialbody.satellite.Orbitable; import dev.galacticraft.api.universe.display.CelestialDisplay; import dev.galacticraft.api.universe.galaxy.Galaxy; import dev.galacticraft.api.universe.position.CelestialPosition; @@ -120,6 +121,10 @@ public static CelestialBody registerSatellite(@N @ApiStatus.Experimental public static CelestialBody create(Identifier id, @NotNull MinecraftServer server, CelestialBody parent, CelestialPosition position, CelestialDisplay display, DimensionOptions options, SatelliteOwnershipData ownershipData, String name) { + if (!(parent.type() instanceof Orbitable)) { + throw new IllegalArgumentException("Parent must be orbitable!"); + } + SatelliteConfig config = new SatelliteConfig(RegistryKey.of(AddonRegistry.CELESTIAL_BODY_KEY, server.getRegistryManager().get(AddonRegistry.CELESTIAL_BODY_KEY).getId(parent)), parent.galaxy(), position, display, ownershipData, RegistryKey.of(Registry.WORLD_KEY, id), EMPTY_GAS_COMPOSITION, 0.0f, parent.type() instanceof Landable ? ((Landable) parent.type()).accessWeight(parent.config()) : 1, options); config.customName(new TranslatableText(name)); CelestialBody satellite = INSTANCE.configure(config); From acea630c8b66da410ab5971ad15b0a9746e66386 Mon Sep 17 00:00:00 2001 From: marcus8448 Date: Sun, 26 Jun 2022 17:04:23 -0700 Subject: [PATCH 03/12] fix: basic implementation of space station dimension effects update to DynWorlds 0.2.0 --- build.gradle.kts | 2 +- gradle.properties | 2 +- ...iteRecipe.java => SpaceStationRecipe.java} | 14 +- .../celestialbody/satellite/Orbitable.java | 21 ++- .../universe/display/CelestialDisplay.java | 2 +- .../display/CelestialDisplayType.java | 2 +- .../client/GCApiDimensionEffects.java | 174 ++++++++++++++++++ .../impl/internal/command/GCApiCommands.java | 7 +- .../internal/mixin/PlayerManagerMixin.java | 11 +- .../client/ClientPlayNetworkHandlerMixin.java | 4 +- ...eImpl.java => SpaceStationRecipeImpl.java} | 6 +- .../config/DecorativePlanetConfig.java | 6 +- .../celestialbody/config/PlanetConfig.java | 6 +- .../celestialbody/type/DecorativePlanet.java | 18 +- .../celestialbody/type/PlanetType.java | 21 ++- .../celestialbody/type/SatelliteType.java | 37 ++-- .../type/EmptyCelestialDisplayType.java | 2 +- .../type/IconCelestialDisplayType.java | 2 +- .../structures/satellite/satellite.nbt | Bin 0 -> 758 bytes 19 files changed, 273 insertions(+), 64 deletions(-) rename src/main/java/dev/galacticraft/api/satellite/{SatelliteRecipe.java => SpaceStationRecipe.java} (87%) create mode 100644 src/main/java/dev/galacticraft/impl/internal/client/GCApiDimensionEffects.java rename src/main/java/dev/galacticraft/impl/satellite/{SatelliteRecipeImpl.java => SpaceStationRecipeImpl.java} (92%) create mode 100644 src/main/resources/data/galacticraft-api/structures/satellite/satellite.nbt diff --git a/build.gradle.kts b/build.gradle.kts index 9fdc75c4..bf90989f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -79,7 +79,7 @@ loom { repositories { mavenLocal() - maven("https://maven.galacticraft.dev/") { + maven("https://maven.galacticraft.net/repository/maven-releases/") { name = "Galacticraft Repository" content { includeGroup("dev.galacticraft") diff --git a/gradle.properties b/gradle.properties index 9e6a79f0..99c3ecf3 100644 --- a/gradle.properties +++ b/gradle.properties @@ -14,4 +14,4 @@ loader.version=0.14.6 # Mod Dependencies fabric.version=0.53.0+1.18.2 machinelib.version=0.1.0+1.18.2 -dynworlds.version=0.1.0+1.18.2 +dynworlds.version=0.2.0+1.18.2 diff --git a/src/main/java/dev/galacticraft/api/satellite/SatelliteRecipe.java b/src/main/java/dev/galacticraft/api/satellite/SpaceStationRecipe.java similarity index 87% rename from src/main/java/dev/galacticraft/api/satellite/SatelliteRecipe.java rename to src/main/java/dev/galacticraft/api/satellite/SpaceStationRecipe.java index b399610b..56e20160 100644 --- a/src/main/java/dev/galacticraft/api/satellite/SatelliteRecipe.java +++ b/src/main/java/dev/galacticraft/api/satellite/SpaceStationRecipe.java @@ -25,7 +25,7 @@ import com.mojang.datafixers.util.Pair; import com.mojang.serialization.*; import com.mojang.serialization.codecs.RecordCodecBuilder; -import dev.galacticraft.impl.satellite.SatelliteRecipeImpl; +import dev.galacticraft.impl.satellite.SpaceStationRecipeImpl; import it.unimi.dsi.fastutil.objects.Object2IntArrayMap; import it.unimi.dsi.fastutil.objects.Object2IntMap; import net.minecraft.inventory.Inventory; @@ -35,7 +35,7 @@ import java.util.function.Predicate; -public interface SatelliteRecipe extends Predicate { +public interface SpaceStationRecipe extends Predicate { Codec INGREDIENT_CODEC = new Codec<>() { @Override public DataResult encode(Ingredient input, DynamicOps ops, T prefix) { @@ -48,7 +48,7 @@ public DataResult> decode(DynamicOps ops, T input) { } }; - Codec CODEC = RecordCodecBuilder.create(i -> i.group( + Codec CODEC = RecordCodecBuilder.create(i -> i.group( new Codec>() { @Override public DataResult encode(Object2IntMap input, DynamicOps ops, T prefix) { @@ -64,12 +64,12 @@ public DataResult, T>> decode(DynamicOps o mapLike.entries().forEachOrdered(ttPair -> list.put(INGREDIENT_CODEC.decode(ops, ttPair.getFirst()).get().orThrow().getFirst(), ops.getNumberValue(ttPair.getSecond()).get().orThrow().intValue())); return DataResult.success(new Pair<>(list, input)); } - }.fieldOf("ingredients").forGetter(SatelliteRecipe::ingredients) - ).apply(i, SatelliteRecipe::create)); + }.fieldOf("ingredients").forGetter(SpaceStationRecipe::ingredients) + ).apply(i, SpaceStationRecipe::create)); @Contract(value = "_ -> new", pure = true) - static @NotNull SatelliteRecipe create(Object2IntMap list) { - return new SatelliteRecipeImpl(list); + static @NotNull SpaceStationRecipe create(Object2IntMap list) { + return new SpaceStationRecipeImpl(list); } Object2IntMap ingredients(); diff --git a/src/main/java/dev/galacticraft/api/universe/celestialbody/satellite/Orbitable.java b/src/main/java/dev/galacticraft/api/universe/celestialbody/satellite/Orbitable.java index 5ae47b45..61428d7d 100644 --- a/src/main/java/dev/galacticraft/api/universe/celestialbody/satellite/Orbitable.java +++ b/src/main/java/dev/galacticraft/api/universe/celestialbody/satellite/Orbitable.java @@ -22,34 +22,37 @@ package dev.galacticraft.api.universe.celestialbody.satellite; -import dev.galacticraft.api.satellite.SatelliteRecipe; +import dev.galacticraft.api.satellite.SpaceStationRecipe; import dev.galacticraft.api.universe.celestialbody.CelestialBodyConfig; +import dev.galacticraft.impl.universe.position.config.SatelliteConfig; +import net.minecraft.util.registry.DynamicRegistryManager; import net.minecraft.util.registry.RegistryKey; import net.minecraft.world.World; import org.jetbrains.annotations.Nullable; /** * Represents a {@link dev.galacticraft.api.universe.celestialbody.CelestialBodyType celestial body type} that can potentially allow player-made objects to orbit itself. + * Moons and other natural satellites are not effected by this. * * @param the type of configuration */ public interface Orbitable { /** - * Returns the {@link SatelliteRecipe stellite recipe} of this celestial body, or {@code null} if satellites should not be allowed to be created + * Returns the {@link SpaceStationRecipe stellite recipe} of this celestial body, or {@code null} if satellites should not be allowed to be created * * @param config the celestial body configuration to be queried - * @return the {@link SatelliteRecipe stellite recipe} of this celestial body + * @return the {@link SpaceStationRecipe satellite recipe} of this celestial body */ - @Nullable SatelliteRecipe satelliteRecipe(C config); - + @Nullable SpaceStationRecipe getSpaceStationRecipe(C config); /** * Callback to register client listeners (for example, {@link net.fabricmc.fabric.api.client.rendering.v1.DimensionRenderingRegistry.SkyRenderer sky renderers}) for this celestial body. * Should only be called on the client. * - * - * @param key the {@link net.minecraft.util.registry.RegistryKey} of the satellite's dimension - * @param config the celestial body configuration + * @param world + * @param key the {@link RegistryKey} of the satellite's dimension + * @param config the celestial body configuration + * @param satelliteConfig */ - void registerClientWorldHooks(RegistryKey key, C config); + void registerClientWorldHooks(DynamicRegistryManager manager, /*Client*/World world, RegistryKey key, C config, SatelliteConfig satelliteConfig); } diff --git a/src/main/java/dev/galacticraft/api/universe/display/CelestialDisplay.java b/src/main/java/dev/galacticraft/api/universe/display/CelestialDisplay.java index 5277fdc0..efbdfedb 100644 --- a/src/main/java/dev/galacticraft/api/universe/display/CelestialDisplay.java +++ b/src/main/java/dev/galacticraft/api/universe/display/CelestialDisplay.java @@ -38,7 +38,7 @@ public record CelestialDisplay> CODEC = AddonRegistry.CELESTIAL_DISPLAY_TYPE.getCodec().dispatch(CelestialDisplay::type, CelestialDisplayType::codec); @Environment(EnvType.CLIENT) - public Vector4f render(MatrixStack matrices, BufferBuilder buffer, int scale, double mouseX, double mouseY, float delta, Consumer> shaderSetter) { + public Vector4f render(MatrixStack matrices, BufferBuilder buffer, float scale, double mouseX, double mouseY, float delta, Consumer> shaderSetter) { return this.type().render(matrices, buffer, scale, mouseX, mouseY, delta, shaderSetter, this.config()); } } diff --git a/src/main/java/dev/galacticraft/api/universe/display/CelestialDisplayType.java b/src/main/java/dev/galacticraft/api/universe/display/CelestialDisplayType.java index 50e98f0e..32ed7141 100644 --- a/src/main/java/dev/galacticraft/api/universe/display/CelestialDisplayType.java +++ b/src/main/java/dev/galacticraft/api/universe/display/CelestialDisplayType.java @@ -42,7 +42,7 @@ public CelestialDisplayType(Codec codec) { } @Environment(EnvType.CLIENT) - public abstract Vector4f render(MatrixStack matrices, BufferBuilder buffer, int size, double mouseX, double mouseY, float delta, Consumer> shaderSetter, C config); + public abstract Vector4f render(MatrixStack matrices, BufferBuilder buffer, float size, double mouseX, double mouseY, float delta, Consumer> shaderSetter, C config); public Codec>> codec() { return this.codec; diff --git a/src/main/java/dev/galacticraft/impl/internal/client/GCApiDimensionEffects.java b/src/main/java/dev/galacticraft/impl/internal/client/GCApiDimensionEffects.java new file mode 100644 index 00000000..30121081 --- /dev/null +++ b/src/main/java/dev/galacticraft/impl/internal/client/GCApiDimensionEffects.java @@ -0,0 +1,174 @@ +/* + * Copyright (c) 2019-2022 Team Galacticraft + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package dev.galacticraft.impl.internal.client; + +import com.mojang.blaze3d.systems.RenderSystem; +import dev.galacticraft.api.universe.display.CelestialDisplay; +import net.fabricmc.fabric.api.client.rendering.v1.DimensionRenderingRegistry; +import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gl.VertexBuffer; +import net.minecraft.client.render.*; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3f; +import net.minecraft.world.World; + +import java.util.Random; + +public final class GCApiDimensionEffects { + public static final DimensionRenderingRegistry.CloudRenderer NO_CLOUDS = context -> {}; + public static final DimensionRenderingRegistry.WeatherRenderer NO_WEATHER = context -> {}; + + public static DimensionRenderingRegistry.SkyRenderer createSpaceStationRenderer(float starSize, float planetSize, CelestialDisplay starDisplay, CelestialDisplay planetDisplay) { + return new SatelliteSkyRenderer(starSize, planetSize, starDisplay, planetDisplay); + } + + private static class SatelliteSkyRenderer implements DimensionRenderingRegistry.SkyRenderer { + private final VertexBuffer starBuffer = new VertexBuffer(); + private final float starSize; + private final float planetSize; + private final CelestialDisplay starDisplay; + private final CelestialDisplay planetDisplay; + + public SatelliteSkyRenderer(float starSize, float planetSize, CelestialDisplay starDisplay, CelestialDisplay planetDisplay) { + this.starSize = starSize; + this.planetSize = planetSize; + this.starDisplay = starDisplay; + this.planetDisplay = planetDisplay; + final Random random = new Random(27893L); + final BufferBuilder buffer = Tessellator.getInstance().getBuffer(); + RenderSystem.setShader(GameRenderer::getPositionShader); + buffer.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + for (int i = 0; i < 12000; ++i) { + double j = random.nextFloat() * 2.0F - 1.0F; + double k = random.nextFloat() * 2.0F - 1.0F; + double l = random.nextFloat() * 2.0F - 1.0F; + double m = 0.15F + random.nextFloat() * 0.1F; + double n = j * j + k * k + l * l; + + if (n < 1.0D && n > 0.01D) { + n = 1.0D / Math.sqrt(n); + j *= n; + k *= n; + l *= n; + double o = j * 100.0D; + double p = k * 100.0D; + double q = l * 100.0D; + double r = Math.atan2(j, l); + double s = Math.sin(r); + double t = Math.cos(r); + double u = Math.atan2(Math.sqrt(j * j + l * l), k); + double v = Math.sin(u); + double w = Math.cos(u); + double x = random.nextDouble() * Math.PI * 2.0D; + double y = Math.sin(x); + double z = Math.cos(x); + + for (int a = 0; a < 4; ++a) { + double b = 0.0D; + double c = ((a & 2) - 1) * m; + double d = ((a + 1 & 2) - 1) * m; + double e = c * z - d * y; + double f = d * z + c * y; + double g = e * v + b * w; + double h = b * v - e * w; + double aa = h * s - f * t; + double ab = f * s + h * t; + buffer.vertex((o + aa) * (i > 6000 ? -1 : 1), (p + g) * (i > 6000 ? -1 : 1), (q + ab) * (i > 6000 ? -1 : 1)).next(); + } + } + } + buffer.end(); + starBuffer.upload(buffer); + } + + @Override + public void render(WorldRenderContext context) { + context.profiler().push("moon_sky_render"); + RenderSystem.disableTexture(); + RenderSystem.disableBlend(); + RenderSystem.depthMask(false); + + final MatrixStack matrices = context.matrixStack(); + final BufferBuilder buffer = Tessellator.getInstance().getBuffer(); + float starBrightness = this.getStarBrightness(context.world(), context.tickDelta()); + + context.profiler().push("stars"); + matrices.push(); + matrices.multiply(Vec3f.POSITIVE_Y.getDegreesQuaternion(-90.0F)); + matrices.multiply(Vec3f.POSITIVE_X.getDegreesQuaternion(context.world().getSkyAngle(context.tickDelta()) * 360.0f)); + matrices.multiply(Vec3f.POSITIVE_Y.getDegreesQuaternion(-19.0F)); + RenderSystem.setShaderColor(1.0F, 0.95F, 0.9F, starBrightness); + RenderSystem.disableTexture(); + this.starBuffer.setShader(matrices.peek().getPositionMatrix(), context.projectionMatrix(), GameRenderer.getPositionShader()); + this.starBuffer.bind(); + this.starBuffer.drawVertices(); + VertexBuffer.unbind(); + + matrices.pop(); + context.profiler().pop(); + + context.profiler().push("sun"); + matrices.push(); + + matrices.multiply(Vec3f.POSITIVE_Y.getDegreesQuaternion(-90.0F)); + matrices.multiply(Vec3f.POSITIVE_X.getDegreesQuaternion(context.world().getSkyAngle(context.tickDelta()) * 360.0f)); + matrices.translate(0.0, -100.0, 0.0); + RenderSystem.enableTexture(); + RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + + starDisplay.render(matrices, buffer, starSize, Float.MAX_VALUE / 3, Float.MAX_VALUE / 3, context.tickDelta(), RenderSystem::setShader); + + matrices.pop(); + context.profiler().swap("planet"); + matrices.push(); + + matrices.multiply(Vec3f.POSITIVE_X.getDegreesQuaternion((context.world().getSkyAngle(context.tickDelta()) * 360.0F) * 0.001F + ((float) (context.world().getSpawnPos().getZ() - MinecraftClient.getInstance().player.getZ()) * 0.01F) + 200.0F)); + matrices.scale(0.6F, 0.6F, 0.6F); + planetDisplay.render(matrices, buffer, planetSize, Float.MAX_VALUE / 3, Float.MAX_VALUE / 3, context.tickDelta(), RenderSystem::setShader); + + context.profiler().pop(); + matrices.pop(); + + RenderSystem.disableTexture(); + RenderSystem.depthMask(true); + context.profiler().pop(); + } + + private float getStarBrightness(World world, float delta) { + final float skyAngle = world.getSkyAngle(delta); + float brightness = 1.0F - (MathHelper.cos((float) (skyAngle * Math.PI * 2.0D) * 2.0F + 0.25F)); + + if (brightness < 0.0F) { + brightness = 0.0F; + } + + if (brightness > 1.0F) { + brightness = 1.0F; + } + + return brightness * brightness * 0.5F + 0.3F; + } + } +} diff --git a/src/main/java/dev/galacticraft/impl/internal/command/GCApiCommands.java b/src/main/java/dev/galacticraft/impl/internal/command/GCApiCommands.java index 1713c11e..bf192741 100644 --- a/src/main/java/dev/galacticraft/impl/internal/command/GCApiCommands.java +++ b/src/main/java/dev/galacticraft/impl/internal/command/GCApiCommands.java @@ -93,8 +93,11 @@ public static void register() { } private static int removeSatellite(@NotNull CommandContext ctx) throws CommandSyntaxException { - SatelliteType.removeSatellite(ctx.getSource().getServer(), IdentifierArgumentType.getIdentifier(ctx, "id")); - return 1; + if (SatelliteType.removeSatellite(ctx.getSource().getServer(), IdentifierArgumentType.getIdentifier(ctx, "id"))) { + return 1; + } else { + return 0; + } } private static int addSatelliteStructured(@NotNull CommandContext ctx) throws CommandSyntaxException { diff --git a/src/main/java/dev/galacticraft/impl/internal/mixin/PlayerManagerMixin.java b/src/main/java/dev/galacticraft/impl/internal/mixin/PlayerManagerMixin.java index 50ba328b..b24ad916 100644 --- a/src/main/java/dev/galacticraft/impl/internal/mixin/PlayerManagerMixin.java +++ b/src/main/java/dev/galacticraft/impl/internal/mixin/PlayerManagerMixin.java @@ -33,6 +33,7 @@ import net.minecraft.nbt.NbtCompound; import net.minecraft.nbt.NbtOps; import net.minecraft.network.ClientConnection; +import net.minecraft.network.Packet; import net.minecraft.network.PacketByteBuf; import net.minecraft.network.packet.s2c.play.CustomPayloadS2CPacket; import net.minecraft.server.MinecraftServer; @@ -55,6 +56,8 @@ public abstract class PlayerManagerMixin { @Shadow public abstract MinecraftServer getServer(); + @Shadow public abstract void sendToAll(Packet packet); + @Inject(method = "onPlayerConnect", at = @At("RETURN")) private void galacticraft_syncGearInventory(ClientConnection connection, ServerPlayerEntity player, CallbackInfo ci) { PacketByteBuf buf = PacketByteBufs.create(); @@ -65,13 +68,7 @@ private void galacticraft_syncGearInventory(ClientConnection connection, ServerP buf.writeItemStack(inventory.getStack(i)); } - Collection tracking = PlayerLookup.tracking(player); - if (!tracking.contains(player)) { - ServerPlayNetworking.send(player, new Identifier(Constant.MOD_ID, "gear_inv_sync"), buf); - } - for (ServerPlayerEntity pl : tracking) { - ServerPlayNetworking.send(pl, new Identifier(Constant.MOD_ID, "gear_inv_sync"), PacketByteBufs.copy(buf)); - } + this.sendToAll(new CustomPayloadS2CPacket(new Identifier(Constant.MOD_ID, "gear_inv_sync"), buf)); ((SatelliteAccessor) this.getServer()).getSatellites().forEach((id, satellite) -> { NbtCompound compound = (NbtCompound) SatelliteConfig.CODEC.encode(satellite.config(), NbtOps.INSTANCE, new NbtCompound()).get().orThrow(); diff --git a/src/main/java/dev/galacticraft/impl/internal/mixin/client/ClientPlayNetworkHandlerMixin.java b/src/main/java/dev/galacticraft/impl/internal/mixin/client/ClientPlayNetworkHandlerMixin.java index 5203d33c..0115b603 100644 --- a/src/main/java/dev/galacticraft/impl/internal/mixin/client/ClientPlayNetworkHandlerMixin.java +++ b/src/main/java/dev/galacticraft/impl/internal/mixin/client/ClientPlayNetworkHandlerMixin.java @@ -30,6 +30,7 @@ import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.network.ClientPlayNetworkHandler; +import net.minecraft.client.world.ClientWorld; import net.minecraft.util.Identifier; import net.minecraft.util.registry.DynamicRegistryManager; import net.minecraft.util.registry.Registry; @@ -48,6 +49,7 @@ public abstract class ClientPlayNetworkHandlerMixin implements ClientSatelliteAccessor { @Shadow public abstract DynamicRegistryManager getRegistryManager(); + @Shadow private ClientWorld world; private final @Unique Map> satellites = new HashMap<>(); private final @Unique List listeners = new ArrayList<>(); @@ -59,7 +61,7 @@ public Map> getSatelli @Override public void addSatellite(Identifier id, CelestialBody satellite) { CelestialBody parent = satellite.parent(this.getRegistryManager()); - ((Orbitable) parent.type()).registerClientWorldHooks(RegistryKey.of(Registry.WORLD_KEY, id), parent.config()); + ((Orbitable) parent.type()).registerClientWorldHooks(this.getRegistryManager(), this.world, RegistryKey.of(Registry.WORLD_KEY, id), parent.config(), satellite.config()); this.satellites.put(id, satellite); for (SatelliteListener listener : this.listeners) { listener.onSatelliteUpdated(satellite, true); diff --git a/src/main/java/dev/galacticraft/impl/satellite/SatelliteRecipeImpl.java b/src/main/java/dev/galacticraft/impl/satellite/SpaceStationRecipeImpl.java similarity index 92% rename from src/main/java/dev/galacticraft/impl/satellite/SatelliteRecipeImpl.java rename to src/main/java/dev/galacticraft/impl/satellite/SpaceStationRecipeImpl.java index 08042c51..5d96f173 100644 --- a/src/main/java/dev/galacticraft/impl/satellite/SatelliteRecipeImpl.java +++ b/src/main/java/dev/galacticraft/impl/satellite/SpaceStationRecipeImpl.java @@ -22,7 +22,7 @@ package dev.galacticraft.impl.satellite; -import dev.galacticraft.api.satellite.SatelliteRecipe; +import dev.galacticraft.api.satellite.SpaceStationRecipe; import it.unimi.dsi.fastutil.ints.IntArrayList; import it.unimi.dsi.fastutil.ints.IntList; import it.unimi.dsi.fastutil.objects.Object2IntMap; @@ -31,10 +31,10 @@ import net.minecraft.recipe.Ingredient; import org.jetbrains.annotations.NotNull; -public class SatelliteRecipeImpl implements SatelliteRecipe { +public class SpaceStationRecipeImpl implements SpaceStationRecipe { private final Object2IntMap ingredients; - public SatelliteRecipeImpl(Object2IntMap list) { + public SpaceStationRecipeImpl(Object2IntMap list) { this.ingredients = list; } diff --git a/src/main/java/dev/galacticraft/impl/universe/celestialbody/config/DecorativePlanetConfig.java b/src/main/java/dev/galacticraft/impl/universe/celestialbody/config/DecorativePlanetConfig.java index fa321c51..d985a241 100644 --- a/src/main/java/dev/galacticraft/impl/universe/celestialbody/config/DecorativePlanetConfig.java +++ b/src/main/java/dev/galacticraft/impl/universe/celestialbody/config/DecorativePlanetConfig.java @@ -26,7 +26,7 @@ import com.mojang.serialization.codecs.RecordCodecBuilder; import dev.galacticraft.api.gas.GasComposition; import dev.galacticraft.api.registry.AddonRegistry; -import dev.galacticraft.api.satellite.SatelliteRecipe; +import dev.galacticraft.api.satellite.SpaceStationRecipe; import dev.galacticraft.api.universe.celestialbody.CelestialBody; import dev.galacticraft.api.universe.celestialbody.CelestialBodyConfig; import dev.galacticraft.api.universe.display.CelestialDisplay; @@ -44,7 +44,7 @@ public record DecorativePlanetConfig(@NotNull TranslatableText name, @NotNull Tr @NotNull RegistryKey> parent, @NotNull CelestialPosition position, @NotNull CelestialDisplay display, GasComposition atmosphere, float gravity, - @NotNull Optional satelliteRecipe) implements CelestialBodyConfig { + @NotNull Optional satelliteRecipe) implements CelestialBodyConfig { public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( Codec.STRING.fieldOf("name").xmap(TranslatableText::new, TranslatableText::getKey).forGetter(DecorativePlanetConfig::name), Codec.STRING.fieldOf("description").xmap(TranslatableText::new, TranslatableText::getKey).forGetter(DecorativePlanetConfig::description), @@ -54,6 +54,6 @@ public record DecorativePlanetConfig(@NotNull TranslatableText name, @NotNull Tr CelestialDisplay.CODEC.fieldOf("display").forGetter(DecorativePlanetConfig::display), GasComposition.CODEC.fieldOf("atmosphere").forGetter(DecorativePlanetConfig::atmosphere), Codec.FLOAT.fieldOf("gravity").forGetter(DecorativePlanetConfig::gravity), - SatelliteRecipe.CODEC.optionalFieldOf("satellite_recipe").forGetter(DecorativePlanetConfig::satelliteRecipe) + SpaceStationRecipe.CODEC.optionalFieldOf("satellite_recipe").forGetter(DecorativePlanetConfig::satelliteRecipe) ).apply(instance, DecorativePlanetConfig::new)); } diff --git a/src/main/java/dev/galacticraft/impl/universe/celestialbody/config/PlanetConfig.java b/src/main/java/dev/galacticraft/impl/universe/celestialbody/config/PlanetConfig.java index b4d999be..423e122d 100644 --- a/src/main/java/dev/galacticraft/impl/universe/celestialbody/config/PlanetConfig.java +++ b/src/main/java/dev/galacticraft/impl/universe/celestialbody/config/PlanetConfig.java @@ -26,7 +26,7 @@ import com.mojang.serialization.codecs.RecordCodecBuilder; import dev.galacticraft.api.gas.GasComposition; import dev.galacticraft.api.registry.AddonRegistry; -import dev.galacticraft.api.satellite.SatelliteRecipe; +import dev.galacticraft.api.satellite.SpaceStationRecipe; import dev.galacticraft.api.universe.celestialbody.CelestialBody; import dev.galacticraft.api.universe.celestialbody.CelestialBodyConfig; import dev.galacticraft.api.universe.display.CelestialDisplay; @@ -45,7 +45,7 @@ public record PlanetConfig(@NotNull TranslatableText name, @NotNull Translatable @NotNull CelestialPosition position, @NotNull CelestialDisplay display, @NotNull RegistryKey world, @NotNull GasComposition atmosphere, float gravity, int accessWeight, int dayTemperature, int nightTemperature, - @NotNull Optional satelliteRecipe) implements CelestialBodyConfig { + @NotNull Optional satelliteRecipe) implements CelestialBodyConfig { public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( Codec.STRING.fieldOf("name").xmap(TranslatableText::new, TranslatableText::getKey).forGetter(PlanetConfig::name), Codec.STRING.fieldOf("description").xmap(TranslatableText::new, TranslatableText::getKey).forGetter(PlanetConfig::description), @@ -59,6 +59,6 @@ public record PlanetConfig(@NotNull TranslatableText name, @NotNull Translatable Codec.INT.fieldOf("access_weight").forGetter(PlanetConfig::accessWeight), Codec.INT.fieldOf("day_temperature").forGetter(PlanetConfig::dayTemperature), Codec.INT.fieldOf("night_temperature").forGetter(PlanetConfig::nightTemperature), - SatelliteRecipe.CODEC.optionalFieldOf("satellite_recipe").forGetter(PlanetConfig::satelliteRecipe) + SpaceStationRecipe.CODEC.optionalFieldOf("satellite_recipe").forGetter(PlanetConfig::satelliteRecipe) ).apply(instance, PlanetConfig::new)); } diff --git a/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/DecorativePlanet.java b/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/DecorativePlanet.java index a3ee2b76..06c06d42 100644 --- a/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/DecorativePlanet.java +++ b/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/DecorativePlanet.java @@ -23,15 +23,19 @@ package dev.galacticraft.impl.universe.celestialbody.type; import dev.galacticraft.api.gas.GasComposition; -import dev.galacticraft.api.satellite.SatelliteRecipe; +import dev.galacticraft.api.satellite.SpaceStationRecipe; import dev.galacticraft.api.universe.celestialbody.CelestialBody; import dev.galacticraft.api.universe.celestialbody.CelestialBodyType; import dev.galacticraft.api.universe.celestialbody.satellite.Orbitable; import dev.galacticraft.api.universe.display.CelestialDisplay; import dev.galacticraft.api.universe.galaxy.Galaxy; import dev.galacticraft.api.universe.position.CelestialPosition; +import dev.galacticraft.impl.internal.client.GCApiDimensionEffects; import dev.galacticraft.impl.universe.celestialbody.config.DecorativePlanetConfig; +import dev.galacticraft.impl.universe.position.config.SatelliteConfig; +import net.fabricmc.fabric.api.client.rendering.v1.DimensionRenderingRegistry; import net.minecraft.text.TranslatableText; +import net.minecraft.util.registry.DynamicRegistryManager; import net.minecraft.util.registry.Registry; import net.minecraft.util.registry.RegistryKey; import net.minecraft.world.World; @@ -86,12 +90,20 @@ public float gravity(DecorativePlanetConfig config) { } @Override - public @Nullable SatelliteRecipe satelliteRecipe(DecorativePlanetConfig config) { + public @Nullable SpaceStationRecipe getSpaceStationRecipe(DecorativePlanetConfig config) { return config.satelliteRecipe().orElse(null); } @Override - public void registerClientWorldHooks(RegistryKey key, DecorativePlanetConfig config) { + public void registerClientWorldHooks(DynamicRegistryManager manager, World world, RegistryKey key, DecorativePlanetConfig config, SatelliteConfig satelliteConfig) { + DimensionRenderingRegistry.registerCloudRenderer(key, GCApiDimensionEffects.NO_CLOUDS); + DimensionRenderingRegistry.registerWeatherRenderer(key, GCApiDimensionEffects.NO_WEATHER); + Registry> registry = CelestialBody.getRegistry(manager); + CelestialBody celestialBody = registry.get(config.parent()); + while (celestialBody.parent(manager) != null) { + celestialBody = celestialBody.parent(manager); + } + DimensionRenderingRegistry.registerSkyRenderer(key, GCApiDimensionEffects.createSpaceStationRenderer(4, 30, celestialBody.display(), config.display())); } } diff --git a/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/PlanetType.java b/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/PlanetType.java index a6fefbe3..f2662d9d 100644 --- a/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/PlanetType.java +++ b/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/PlanetType.java @@ -23,16 +23,21 @@ package dev.galacticraft.impl.universe.celestialbody.type; import dev.galacticraft.api.gas.GasComposition; -import dev.galacticraft.api.satellite.SatelliteRecipe; +import dev.galacticraft.api.satellite.SpaceStationRecipe; import dev.galacticraft.api.universe.celestialbody.CelestialBody; +import dev.galacticraft.api.universe.celestialbody.CelestialBodyConfig; import dev.galacticraft.api.universe.celestialbody.CelestialBodyType; import dev.galacticraft.api.universe.celestialbody.landable.Landable; import dev.galacticraft.api.universe.celestialbody.satellite.Orbitable; import dev.galacticraft.api.universe.display.CelestialDisplay; import dev.galacticraft.api.universe.galaxy.Galaxy; import dev.galacticraft.api.universe.position.CelestialPosition; +import dev.galacticraft.impl.internal.client.GCApiDimensionEffects; import dev.galacticraft.impl.universe.celestialbody.config.PlanetConfig; +import dev.galacticraft.impl.universe.position.config.SatelliteConfig; +import net.fabricmc.fabric.api.client.rendering.v1.DimensionRenderingRegistry; import net.minecraft.text.TranslatableText; +import net.minecraft.util.registry.DynamicRegistryManager; import net.minecraft.util.registry.Registry; import net.minecraft.util.registry.RegistryKey; import net.minecraft.world.World; @@ -107,12 +112,20 @@ public int nightTemperature(@NotNull PlanetConfig config) { } @Override - public @Nullable SatelliteRecipe satelliteRecipe(PlanetConfig config) { + public @Nullable SpaceStationRecipe getSpaceStationRecipe(@NotNull PlanetConfig config) { return config.satelliteRecipe().orElse(null); } @Override - public void registerClientWorldHooks(RegistryKey key, PlanetConfig config) { - + public void registerClientWorldHooks(DynamicRegistryManager manager, World world, RegistryKey key, @NotNull PlanetConfig config, SatelliteConfig satelliteConfig) { + DimensionRenderingRegistry.registerCloudRenderer(key, GCApiDimensionEffects.NO_CLOUDS); + DimensionRenderingRegistry.registerWeatherRenderer(key, GCApiDimensionEffects.NO_WEATHER); + + Registry> registry = CelestialBody.getRegistry(manager); + CelestialBody celestialBody = registry.get(config.parent()); + while (celestialBody.parent(manager) != null) { + celestialBody = celestialBody.parent(manager); + } + DimensionRenderingRegistry.registerSkyRenderer(key, GCApiDimensionEffects.createSpaceStationRenderer(4, 30, celestialBody.display(), config.display())); } } diff --git a/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/SatelliteType.java b/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/SatelliteType.java index 56861963..5f1124c6 100644 --- a/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/SatelliteType.java +++ b/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/SatelliteType.java @@ -36,8 +36,8 @@ import dev.galacticraft.api.universe.display.CelestialDisplay; import dev.galacticraft.api.universe.galaxy.Galaxy; import dev.galacticraft.api.universe.position.CelestialPosition; -import dev.galacticraft.dynworlds.api.DynamicWorldRegistry; -import dev.galacticraft.dynworlds.api.PlayerDestroyer; +import dev.galacticraft.dynworlds.api.DynamicLevelRegistry; +import dev.galacticraft.dynworlds.api.PlayerRemover; import dev.galacticraft.impl.Constant; import dev.galacticraft.impl.internal.world.gen.SatelliteChunkGenerator; import dev.galacticraft.impl.internal.world.gen.biome.GcApiBiomes; @@ -52,32 +52,31 @@ import net.minecraft.nbt.NbtOps; import net.minecraft.network.PacketByteBuf; import net.minecraft.server.MinecraftServer; -import net.minecraft.server.WorldGenerationProgressListener; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.server.world.ServerWorld; import net.minecraft.structure.Structure; import net.minecraft.tag.TagKey; -import net.minecraft.test.TestServer; import net.minecraft.text.Text; import net.minecraft.text.TranslatableText; import net.minecraft.util.Identifier; -import net.minecraft.util.math.ChunkPos; import net.minecraft.util.registry.Registry; import net.minecraft.util.registry.RegistryEntry; import net.minecraft.util.registry.RegistryKey; import net.minecraft.world.World; -import net.minecraft.world.chunk.ChunkStatus; import net.minecraft.world.dimension.DimensionOptions; import net.minecraft.world.dimension.DimensionType; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.*; +import java.util.LinkedList; +import java.util.Locale; +import java.util.Objects; +import java.util.OptionalLong; public class SatelliteType extends CelestialBodyType implements Satellite, Landable { public static final SatelliteType INSTANCE = new SatelliteType(SatelliteConfig.CODEC); - private static final PlayerDestroyer PLAYER_DESTROYER = (server, player) -> { + private static final PlayerRemover PLAYER_REMOVER = (server, player) -> { CelestialBody> satellite = CelestialBody.getByDimension(server.getRegistryManager(), player.getWorld().getRegistryKey()).orElse(null); if (satellite != null) { CelestialBody parent = satellite.parent(server.getRegistryManager()); @@ -125,13 +124,15 @@ public static CelestialBody create(Identifier id throw new IllegalArgumentException("Parent must be orbitable!"); } + Constant.LOGGER.debug("Attempting to create a world dynamically ({})", id); + if (!((DynamicLevelRegistry) server).addDynamicLevel(id, options, options.getDimensionTypeSupplier().value())) { + throw new RuntimeException("Failed to create dynamic level!"); + } + SatelliteConfig config = new SatelliteConfig(RegistryKey.of(AddonRegistry.CELESTIAL_BODY_KEY, server.getRegistryManager().get(AddonRegistry.CELESTIAL_BODY_KEY).getId(parent)), parent.galaxy(), position, display, ownershipData, RegistryKey.of(Registry.WORLD_KEY, id), EMPTY_GAS_COMPOSITION, 0.0f, parent.type() instanceof Landable ? ((Landable) parent.type()).accessWeight(parent.config()) : 1, options); config.customName(new TranslatableText(name)); CelestialBody satellite = INSTANCE.configure(config); ((SatelliteAccessor) server).addSatellite(id, satellite); - Constant.LOGGER.debug("Attempting to create a world dynamically ({})", id); - - ((DynamicWorldRegistry) server).addDynamicWorld(id, options, options.getDimensionTypeSupplier().value()); for (ServerPlayerEntity player : server.getPlayerManager().getPlayerList()) { NbtCompound compound = (NbtCompound) SatelliteConfig.CODEC.encode(satellite.config(), NbtOps.INSTANCE, new NbtCompound()).get().orThrow(); @@ -141,12 +142,16 @@ public static CelestialBody create(Identifier id } @ApiStatus.Experimental - public static void removeSatellite(@NotNull MinecraftServer server, Identifier id) { - ((DynamicWorldRegistry) server).removeDynamicWorld(id, PLAYER_DESTROYER); - ((SatelliteAccessor) server).removeSatellite(id); + public static boolean removeSatellite(@NotNull MinecraftServer server, Identifier id) { + if (((DynamicLevelRegistry) server).removeDynamicLevel(id, PLAYER_REMOVER)) { + ((SatelliteAccessor) server).removeSatellite(id); - for (ServerPlayerEntity player : server.getPlayerManager().getPlayerList()) { - ServerPlayNetworking.send(player, new Identifier(Constant.MOD_ID, "remove_satellite"), new PacketByteBuf(Unpooled.buffer()).writeIdentifier(id)); + for (ServerPlayerEntity player : server.getPlayerManager().getPlayerList()) { + ServerPlayNetworking.send(player, new Identifier(Constant.MOD_ID, "remove_satellite"), new PacketByteBuf(Unpooled.buffer()).writeIdentifier(id)); + } + return true; + } else { + return false; } } diff --git a/src/main/java/dev/galacticraft/impl/universe/display/type/EmptyCelestialDisplayType.java b/src/main/java/dev/galacticraft/impl/universe/display/type/EmptyCelestialDisplayType.java index a2578e89..62ecce87 100644 --- a/src/main/java/dev/galacticraft/impl/universe/display/type/EmptyCelestialDisplayType.java +++ b/src/main/java/dev/galacticraft/impl/universe/display/type/EmptyCelestialDisplayType.java @@ -40,7 +40,7 @@ private EmptyCelestialDisplayType() { } @Override - public Vector4f render(MatrixStack matrices, BufferBuilder buffer, int size, double mouseX, double mouseY, float delta, Consumer> shaderSetter, EmptyCelestialDisplayConfig config) { + public Vector4f render(MatrixStack matrices, BufferBuilder buffer, float size, double mouseX, double mouseY, float delta, Consumer> shaderSetter, EmptyCelestialDisplayConfig config) { return NULL_VECTOR; } } diff --git a/src/main/java/dev/galacticraft/impl/universe/display/type/IconCelestialDisplayType.java b/src/main/java/dev/galacticraft/impl/universe/display/type/IconCelestialDisplayType.java index eb1df142..b1e4fcc6 100644 --- a/src/main/java/dev/galacticraft/impl/universe/display/type/IconCelestialDisplayType.java +++ b/src/main/java/dev/galacticraft/impl/universe/display/type/IconCelestialDisplayType.java @@ -46,7 +46,7 @@ protected IconCelestialDisplayType(Codec codec) { } @Override - public Vector4f render(MatrixStack matrices, BufferBuilder buffer, int size, double mouseX, double mouseY, float delta, Consumer> shaderSetter, IconCelestialDisplayConfig config) { + public Vector4f render(MatrixStack matrices, BufferBuilder buffer, float size, double mouseX, double mouseY, float delta, Consumer> shaderSetter, IconCelestialDisplayConfig config) { shaderSetter.accept(GameRenderer::getPositionTexShader); Matrix4f positionMatrix = matrices.peek().getPositionMatrix(); AbstractTexture texture = MinecraftClient.getInstance().getTextureManager().getTexture(config.texture()); diff --git a/src/main/resources/data/galacticraft-api/structures/satellite/satellite.nbt b/src/main/resources/data/galacticraft-api/structures/satellite/satellite.nbt new file mode 100644 index 0000000000000000000000000000000000000000..8e541aa16174e833d63ec4e166d8319636a24697 GIT binary patch literal 758 zcmb2|=3oGW|7T~M?wjo(;5s|}_tvv&L1sUD*KF?Fbn2Q?SwDL#qf2t+DfTDkpH?&8 z7OxHn-fnbGsb`JgqYJhEqT9UVq&FL_)UVrhM8bHF*k5hwf9ua&3XQ!edT#c^2+7}j z*Oc4;*=7H8tC44L^&Jzr&XYCM%imSGcXW#QtVs}Jovby(=U_x*r^vemm2!hg))FUW zd!F#Q6|pPtJkEtC&^+LdyY>*=XrM`8W4>>`e8hHE;*Ihc zmro5F55)y4_`fi&+2yz5ea>8;jeVh4*m+1(LNERjB;ITBwY4Z_1@8(q{sCnn$2FXb~n-h&y zirEjRc|4QTMi-fz+mF`~Fg` zFMRgbJ8)<0Z2Qvr-_Dutd-F3le9Ad#1^K)a?{vLZp+j{tY=3iaC z?{htO@6nl_R{W}S+ZulM?dCUwRIH+j!>fBc#Ezdv_e_@mOE{aQzM?#aLRqfsoT>&Lb7gHJE*&u&!f``}_D fpl&$(eC71|; Date: Wed, 13 Jul 2022 22:20:08 -0700 Subject: [PATCH 04/12] fix: compile errors from merge --- .../celestialbody/satellite/Orbitable.java | 10 +- .../client/GCApiDimensionEffects.java | 64 ++++++------- .../client/fabric/GalacticraftAPIClient.java | 4 +- .../impl/internal/command/GCApiCommands.java | 91 ++++++++----------- .../mixin/DynamicRegistryManagerMixin.java | 2 +- .../internal/mixin/MinecraftServerMixin.java | 42 ++------- .../internal/mixin/PlayerManagerMixin.java | 29 ++---- .../client/ClientPlayNetworkHandlerMixin.java | 16 ++-- .../celestialbody/type/DecorativePlanet.java | 6 +- .../celestialbody/type/PlanetType.java | 7 +- .../celestialbody/type/SatelliteType.java | 79 ++++++---------- 11 files changed, 135 insertions(+), 215 deletions(-) diff --git a/src/main/java/dev/galacticraft/api/universe/celestialbody/satellite/Orbitable.java b/src/main/java/dev/galacticraft/api/universe/celestialbody/satellite/Orbitable.java index 61428d7d..1d79f4ca 100644 --- a/src/main/java/dev/galacticraft/api/universe/celestialbody/satellite/Orbitable.java +++ b/src/main/java/dev/galacticraft/api/universe/celestialbody/satellite/Orbitable.java @@ -25,9 +25,9 @@ import dev.galacticraft.api.satellite.SpaceStationRecipe; import dev.galacticraft.api.universe.celestialbody.CelestialBodyConfig; import dev.galacticraft.impl.universe.position.config.SatelliteConfig; -import net.minecraft.util.registry.DynamicRegistryManager; -import net.minecraft.util.registry.RegistryKey; -import net.minecraft.world.World; +import net.minecraft.core.RegistryAccess; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.level.Level; import org.jetbrains.annotations.Nullable; /** @@ -50,9 +50,9 @@ public interface Orbitable { * Should only be called on the client. * * @param world - * @param key the {@link RegistryKey} of the satellite's dimension + * @param key the {@link ResourceKey} of the satellite's dimension * @param config the celestial body configuration * @param satelliteConfig */ - void registerClientWorldHooks(DynamicRegistryManager manager, /*Client*/World world, RegistryKey key, C config, SatelliteConfig satelliteConfig); + void registerClientWorldHooks(RegistryAccess manager, /*Client*/Level world, ResourceKey key, C config, SatelliteConfig satelliteConfig); } diff --git a/src/main/java/dev/galacticraft/impl/internal/client/GCApiDimensionEffects.java b/src/main/java/dev/galacticraft/impl/internal/client/GCApiDimensionEffects.java index 30121081..f731e10f 100644 --- a/src/main/java/dev/galacticraft/impl/internal/client/GCApiDimensionEffects.java +++ b/src/main/java/dev/galacticraft/impl/internal/client/GCApiDimensionEffects.java @@ -22,17 +22,17 @@ package dev.galacticraft.impl.internal.client; +import com.mojang.authlib.minecraft.client.MinecraftClient; import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.*; +import com.mojang.math.Vector3f; import dev.galacticraft.api.universe.display.CelestialDisplay; import net.fabricmc.fabric.api.client.rendering.v1.DimensionRenderingRegistry; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gl.VertexBuffer; -import net.minecraft.client.render.*; -import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.util.math.MathHelper; -import net.minecraft.util.math.Vec3f; -import net.minecraft.world.World; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.util.Mth; +import net.minecraft.world.level.Level; import java.util.Random; @@ -57,9 +57,9 @@ public SatelliteSkyRenderer(float starSize, float planetSize, CelestialDisplay 6000 ? -1 : 1), (p + g) * (i > 6000 ? -1 : 1), (q + ab) * (i > 6000 ? -1 : 1)).next(); + buffer.vertex((o + aa) * (i > 6000 ? -1 : 1), (p + g) * (i > 6000 ? -1 : 1), (q + ab) * (i > 6000 ? -1 : 1)).endVertex(); } } } - buffer.end(); - starBuffer.upload(buffer); + starBuffer.bind(); + starBuffer.upload(buffer.end()); + VertexBuffer.unbind(); } @Override @@ -110,55 +111,54 @@ public void render(WorldRenderContext context) { RenderSystem.disableBlend(); RenderSystem.depthMask(false); - final MatrixStack matrices = context.matrixStack(); - final BufferBuilder buffer = Tessellator.getInstance().getBuffer(); + final PoseStack matrices = context.matrixStack(); + final BufferBuilder buffer = Tesselator.getInstance().getBuilder(); float starBrightness = this.getStarBrightness(context.world(), context.tickDelta()); context.profiler().push("stars"); - matrices.push(); - matrices.multiply(Vec3f.POSITIVE_Y.getDegreesQuaternion(-90.0F)); - matrices.multiply(Vec3f.POSITIVE_X.getDegreesQuaternion(context.world().getSkyAngle(context.tickDelta()) * 360.0f)); - matrices.multiply(Vec3f.POSITIVE_Y.getDegreesQuaternion(-19.0F)); + matrices.pushPose(); + matrices.mulPose(Vector3f.YP.rotationDegrees(-90.0F)); + matrices.mulPose(Vector3f.XP.rotationDegrees(context.world().getSunAngle(context.tickDelta()) * 360.0f)); + matrices.mulPose(Vector3f.YP.rotationDegrees(-19.0F)); RenderSystem.setShaderColor(1.0F, 0.95F, 0.9F, starBrightness); RenderSystem.disableTexture(); - this.starBuffer.setShader(matrices.peek().getPositionMatrix(), context.projectionMatrix(), GameRenderer.getPositionShader()); this.starBuffer.bind(); - this.starBuffer.drawVertices(); + this.starBuffer.drawWithShader(matrices.last().pose(), context.projectionMatrix(), GameRenderer.getPositionShader()); VertexBuffer.unbind(); - matrices.pop(); + matrices.popPose(); context.profiler().pop(); context.profiler().push("sun"); - matrices.push(); + matrices.pushPose(); - matrices.multiply(Vec3f.POSITIVE_Y.getDegreesQuaternion(-90.0F)); - matrices.multiply(Vec3f.POSITIVE_X.getDegreesQuaternion(context.world().getSkyAngle(context.tickDelta()) * 360.0f)); + matrices.mulPose(Vector3f.YP.rotationDegrees(-90.0F)); + matrices.mulPose(Vector3f.XP.rotationDegrees(context.world().getSunAngle(context.tickDelta()) * 360.0f)); matrices.translate(0.0, -100.0, 0.0); RenderSystem.enableTexture(); RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); starDisplay.render(matrices, buffer, starSize, Float.MAX_VALUE / 3, Float.MAX_VALUE / 3, context.tickDelta(), RenderSystem::setShader); - matrices.pop(); - context.profiler().swap("planet"); - matrices.push(); + matrices.popPose(); + context.profiler().popPush("planet"); + matrices.pushPose(); - matrices.multiply(Vec3f.POSITIVE_X.getDegreesQuaternion((context.world().getSkyAngle(context.tickDelta()) * 360.0F) * 0.001F + ((float) (context.world().getSpawnPos().getZ() - MinecraftClient.getInstance().player.getZ()) * 0.01F) + 200.0F)); + matrices.mulPose(Vector3f.XP.rotationDegrees((context.world().getSunAngle(context.tickDelta()) * 360.0F) * 0.001F + ((float) (context.world().getSharedSpawnPos().getZ() - Minecraft.getInstance().player.getZ()) * 0.01F) + 200.0F)); matrices.scale(0.6F, 0.6F, 0.6F); planetDisplay.render(matrices, buffer, planetSize, Float.MAX_VALUE / 3, Float.MAX_VALUE / 3, context.tickDelta(), RenderSystem::setShader); context.profiler().pop(); - matrices.pop(); + matrices.popPose(); RenderSystem.disableTexture(); RenderSystem.depthMask(true); context.profiler().pop(); } - private float getStarBrightness(World world, float delta) { - final float skyAngle = world.getSkyAngle(delta); - float brightness = 1.0F - (MathHelper.cos((float) (skyAngle * Math.PI * 2.0D) * 2.0F + 0.25F)); + private float getStarBrightness(Level world, float delta) { + final float skyAngle = world.getSunAngle(delta); + float brightness = 1.0F - (Mth.cos((float) (skyAngle * Math.PI * 2.0D) * 2.0F + 0.25F)); if (brightness < 0.0F) { brightness = 0.0F; diff --git a/src/main/java/dev/galacticraft/impl/internal/client/fabric/GalacticraftAPIClient.java b/src/main/java/dev/galacticraft/impl/internal/client/fabric/GalacticraftAPIClient.java index 95f64630..c36ee92d 100644 --- a/src/main/java/dev/galacticraft/impl/internal/client/fabric/GalacticraftAPIClient.java +++ b/src/main/java/dev/galacticraft/impl/internal/client/fabric/GalacticraftAPIClient.java @@ -36,9 +36,9 @@ import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; import net.minecraft.nbt.NbtOps; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.resources.RegistryOps; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; -import net.minecraft.util.dynamic.RegistryOps; import org.jetbrains.annotations.ApiStatus; import java.util.Objects; @@ -54,7 +54,7 @@ public void onInitializeClient() { client.execute(() -> ((ClientResearchAccessor) Objects.requireNonNull(client.player)).readChanges(buf)); }); ClientPlayNetworking.registerGlobalReceiver(new ResourceLocation(Constant.MOD_ID, "add_satellite"), (client, networkHandler, buffer, sender) -> { - ((SatelliteAccessor) networkHandler).addSatellite(buffer.readResourceLocation(), new CelestialBody<>(SatelliteType.INSTANCE, SatelliteConfig.CODEC.decode(RegistryOps.of(NbtOps.INSTANCE, networkHandler.getRegistryManager()), buffer.readNbt()).get().orThrow().getFirst())); + ((SatelliteAccessor) networkHandler).addSatellite(buffer.readResourceLocation(), new CelestialBody<>(SatelliteType.INSTANCE, SatelliteConfig.CODEC.decode(RegistryOps.create(NbtOps.INSTANCE, networkHandler.registryAccess()), buffer.readNbt()).get().orThrow().getFirst())); }); ClientPlayNetworking.registerGlobalReceiver(new ResourceLocation(Constant.MOD_ID, "remove_satellite"), (client, networkHandler, buffer, sender) -> { FriendlyByteBuf buf = new FriendlyByteBuf(buffer.copy()); diff --git a/src/main/java/dev/galacticraft/impl/internal/command/GCApiCommands.java b/src/main/java/dev/galacticraft/impl/internal/command/GCApiCommands.java index eb876959..15ba360a 100644 --- a/src/main/java/dev/galacticraft/impl/internal/command/GCApiCommands.java +++ b/src/main/java/dev/galacticraft/impl/internal/command/GCApiCommands.java @@ -24,7 +24,6 @@ import com.mojang.brigadier.arguments.BoolArgumentType; import com.mojang.brigadier.arguments.IntegerArgumentType; -import com.mojang.brigadier.builder.LiteralArgumentBuilder; import com.mojang.brigadier.context.CommandContext; import com.mojang.brigadier.exceptions.CommandSyntaxException; import dev.galacticraft.api.accessor.WorldOxygenAccessor; @@ -32,20 +31,7 @@ import dev.galacticraft.impl.Constant; import dev.galacticraft.impl.command.argument.RegistryArgumentType; import dev.galacticraft.impl.universe.celestialbody.type.SatelliteType; -import net.fabricmc.fabric.api.command.v1.CommandRegistrationCallback; -import net.minecraft.command.argument.BlockPosArgumentType; -import net.minecraft.command.argument.IdentifierArgumentType; -import net.minecraft.server.command.Commands; -import net.minecraft.server.command.ServerCommandSource; -import net.minecraft.structure.Structure; -import net.minecraft.text.LiteralText; -import net.minecraft.text.TranslatableText; -import net.minecraft.util.Identifier; -import net.minecraft.util.math.BlockBox; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.registry.Registry; import dev.galacticraft.impl.command.argument.serializer.RegistryArgumentTypeSerializer; -import net.fabricmc.fabric.api.command.v2.ArgumentTypeRegistry; import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback; import net.fabricmc.fabric.mixin.command.ArgumentTypesAccessor; import net.minecraft.commands.CommandSourceStack; @@ -57,6 +43,7 @@ import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.levelgen.structure.BoundingBox; +import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; @@ -67,62 +54,62 @@ public class GCApiCommands { public static void register() { RegistryArgumentTypeSerializer serializer = new RegistryArgumentTypeSerializer(); ArgumentTypesAccessor.fabric_getClassMap().put( RegistryArgumentType.class, serializer); - CommandRegistrationCallback.EVENT.register((dispatcher, server) -> { + CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, commandSelection) -> { dispatcher.register(Commands.literal(Constant.MOD_ID + ":debug") - .requires(serverCommandSource -> serverCommandSource.hasPermissionLevel(2)).then(Commands.literal("registry").then(Commands.argument("registry", RegistryArgumentType.create()) + .requires(serverCommandSource -> serverCommandSource.hasPermission(2)).then(Commands.literal("registry").then(Commands.argument("registry", RegistryArgumentType.create()) .then(Commands.literal("dump_ids").executes(GCApiCommands::dumpRegistries)) .then(Commands.literal("get") - .then(Commands.argument("id", IdentifierArgumentType.identifier()) + .then(Commands.argument("id", ResourceLocationArgument.id()) .executes(GCApiCommands::getRegistryValue))) .then(Commands.literal("get_raw") .then(Commands.argument("id", IntegerArgumentType.integer()) .executes(GCApiCommands::getRegistryValueFromRawId))) .then(Commands.literal("to_raw") - .then(Commands.argument("id", IdentifierArgumentType.identifier()) + .then(Commands.argument("id", ResourceLocationArgument.id()) .executes(GCApiCommands::getRegistryRawId))) .then(Commands.literal("dump_values") - .then(Commands.argument("id", IdentifierArgumentType.identifier()) + .then(Commands.argument("id", ResourceLocationArgument.id()) .executes(GCApiCommands::dumpRegistryValues)))))); - dispatcher.register(Commands.literal(Constant.MOD_ID + ":oxygen").requires(source -> source.hasPermissionLevel(3)) - .then(Commands.literal("get").then(Commands.argument("start_pos", BlockPosArgumentType.blockPos()) + dispatcher.register(Commands.literal(Constant.MOD_ID + ":oxygen").requires(source -> source.hasPermission(3)) + .then(Commands.literal("get").then(Commands.argument("start_pos", BlockPosArgument.blockPos()) .executes(GCApiCommands::getOxygen) - .then(Commands.argument("end_pos", BlockPosArgumentType.blockPos()) + .then(Commands.argument("end_pos", BlockPosArgument.blockPos()) .executes(GCApiCommands::getOxygenArea)))) .then(Commands.literal("set") - .then(Commands.argument("start_pos", BlockPosArgumentType.blockPos()) + .then(Commands.argument("start_pos", BlockPosArgument.blockPos()) .then(Commands.argument("oxygen", BoolArgumentType.bool()) .executes(GCApiCommands::setOxygen)) - .then(Commands.argument("end_pos", BlockPosArgumentType.blockPos()) + .then(Commands.argument("end_pos", BlockPosArgument.blockPos()) .then(Commands.argument("oxygen", BoolArgumentType.bool()) .executes(GCApiCommands::setOxygenArea)))))); - dispatcher.register(Commands.literal(Constant.MOD_ID + ":satellite").requires(source -> source.hasPermissionLevel(3)) - .then(Commands.literal("add").then(Commands.argument("world", IdentifierArgumentType.identifier()) + dispatcher.register(Commands.literal(Constant.MOD_ID + ":satellite").requires(source -> source.hasPermission(3)) + .then(Commands.literal("add").then(Commands.argument("world", ResourceLocationArgument.id()) .executes(GCApiCommands::addSatellite) - .then(Commands.argument("structure", IdentifierArgumentType.identifier()) + .then(Commands.argument("structure", ResourceLocationArgument.id()) .executes(GCApiCommands::addSatelliteStructured)))) - .then(Commands.literal("remove").then(Commands.argument("id", IdentifierArgumentType.identifier()) + .then(Commands.literal("remove").then(Commands.argument("id", ResourceLocationArgument.id()) .executes(GCApiCommands::removeSatellite)))); }); } - private static int removeSatellite(@NotNull CommandContext ctx) throws CommandSyntaxException { - if (SatelliteType.removeSatellite(ctx.getSource().getServer(), IdentifierArgumentType.getIdentifier(ctx, "id"))) { + private static int removeSatellite(@NotNull CommandContext ctx) throws CommandSyntaxException { + if (SatelliteType.removeSatellite(ctx.getSource().getServer(), ResourceLocationArgument.getId(ctx, "id"))) { return 1; } else { return 0; } } - private static int addSatelliteStructured(@NotNull CommandContext ctx) throws CommandSyntaxException { - Structure structure = ctx.getSource().getServer().getStructureManager().getStructure(IdentifierArgumentType.getIdentifier(ctx, "structure")).orElseThrow(); - SatelliteType.registerSatellite(ctx.getSource().getServer(), ctx.getSource().getPlayer(), Objects.requireNonNull(ctx.getSource().getRegistryManager().get(AddonRegistry.CELESTIAL_BODY_KEY).get(IdentifierArgumentType.getIdentifier(ctx, "world"))), structure); + private static int addSatelliteStructured(@NotNull CommandContext ctx) throws CommandSyntaxException { + StructureTemplate structure = ctx.getSource().getServer().getStructureManager().get(ResourceLocationArgument.getId(ctx, "structure")).orElseThrow(); + SatelliteType.registerSpaceStation(ctx.getSource().getServer(), ctx.getSource().getPlayer(), Objects.requireNonNull(ctx.getSource().registryAccess().registryOrThrow(AddonRegistry.CELESTIAL_BODY_KEY).get(ResourceLocationArgument.getId(ctx, "world"))), structure); return 1; } - private static int addSatellite(@NotNull CommandContext ctx) throws CommandSyntaxException { - SatelliteType.registerSatellite(ctx.getSource().getServer(), ctx.getSource().getPlayer(), Objects.requireNonNull(ctx.getSource().getRegistryManager().get(AddonRegistry.CELESTIAL_BODY_KEY).get(IdentifierArgumentType.getIdentifier(ctx, "world"))), new Structure()); + private static int addSatellite(@NotNull CommandContext ctx) throws CommandSyntaxException { + SatelliteType.registerSpaceStation(ctx.getSource().getServer(), ctx.getSource().getPlayer(), Objects.requireNonNull(ctx.getSource().registryAccess().registryOrThrow(AddonRegistry.CELESTIAL_BODY_KEY).get(ResourceLocationArgument.getId(ctx, "world"))), new StructureTemplate()); return 1; } @@ -191,42 +178,42 @@ private static int getOxygenArea(CommandContext context) thr return 1; } - private static int getRegistryValue(CommandContext context) { + private static int getRegistryValue(CommandContext context) { Registry registry = RegistryArgumentType.getRegistry(context, "registry"); - context.getSource().sendFeedback(new TranslatableText("command.galacticraft-api.debug.registry.id", registry.getKey().getValue(), registry.get(IdentifierArgumentType.getIdentifier(context, "id"))), true); + context.getSource().sendSuccess(Component.translatable("command.galacticraft-api.debug.registry.id", registry.key().location(), registry.get(ResourceLocationArgument.getId(context, "id"))), true); return 1; } - private static int getRegistryRawId(CommandContext context) { + private static int getRegistryRawId(CommandContext context) { Registry registry = RegistryArgumentType.getRegistry(context, "registry"); - Object o = registry.get(IdentifierArgumentType.getIdentifier(context, "id")); - context.getSource().sendFeedback(new TranslatableText("command.galacticraft-api.debug.registry.id", registry.getKey().getValue(), registry.getRawId(o)), true); + Object o = registry.get(ResourceLocationArgument.getId(context, "id")); + context.getSource().sendSuccess(Component.translatable("command.galacticraft-api.debug.registry.id", registry.key().location(), registry.getId(o)), true); return 1; } - private static int dumpRegistryValues(CommandContext context) { - ServerCommandSource source = context.getSource(); + private static int dumpRegistryValues(CommandContext context) { + CommandSourceStack source = context.getSource(); Registry registry = RegistryArgumentType.getRegistry(context, "registry"); - source.sendFeedback(new TranslatableText("command.galacticraft-api.debug.registry.dump", registry.getKey().getValue().toString()), true); - for (Identifier id : registry.getIds()) { - source.sendFeedback(new LiteralText(id.toString() + " - " + registry.get(id)), false); + source.sendSuccess(Component.translatable("command.galacticraft-api.debug.registry.dump", registry.key().location().toString()), true); + for (ResourceLocation id : registry.keySet()) { + source.sendSuccess(Component.literal(id.toString() + " - " + registry.get(id)), false); } return 1; } - private static int dumpRegistries(CommandContext context) { - ServerCommandSource source = context.getSource(); + private static int dumpRegistries(CommandContext context) { + CommandSourceStack source = context.getSource(); Registry registry = RegistryArgumentType.getRegistry(context, "registry"); - source.sendFeedback(new TranslatableText("command.galacticraft-api.debug.registry.dump", registry.getKey().getValue().toString()), true); - for (Identifier id : registry.getIds()) { - source.sendFeedback(new LiteralText(id.toString()), false); + source.sendSuccess(Component.translatable("command.galacticraft-api.debug.registry.dump", registry.key().location().toString()), true); + for (ResourceLocation id : registry.keySet()) { + source.sendSuccess(Component.literal(id.toString()), false); } return 1; } - private static int getRegistryValueFromRawId(CommandContext context) { + private static int getRegistryValueFromRawId(CommandContext context) { Registry registry = RegistryArgumentType.getRegistry(context, "registry"); - context.getSource().sendFeedback(new TranslatableText("command.galacticraft-api.debug.registry.id", registry.getKey().getValue(), registry.get(IntegerArgumentType.getInteger(context, "id"))), true); + context.getSource().sendSuccess(Component.translatable("command.galacticraft-api.debug.registry.id", registry.key().location(), registry.byId(IntegerArgumentType.getInteger(context, "id"))), true); return 1; } } diff --git a/src/main/java/dev/galacticraft/impl/internal/mixin/DynamicRegistryManagerMixin.java b/src/main/java/dev/galacticraft/impl/internal/mixin/DynamicRegistryManagerMixin.java index 797e89c9..1a0fa6c7 100644 --- a/src/main/java/dev/galacticraft/impl/internal/mixin/DynamicRegistryManagerMixin.java +++ b/src/main/java/dev/galacticraft/impl/internal/mixin/DynamicRegistryManagerMixin.java @@ -44,7 +44,7 @@ public interface DynamicRegistryManagerMixin { @Shadow private static void put(ImmutableMap.Builder>, RegistryAccess.RegistryData> infosBuilder, ResourceKey> registryRef, Codec entryCodec) {} - @Dynamic("1.18.2 synthetic method") + @Dynamic("1.19 synthetic method") @Inject(method = "method_30531", at = @At(value = "INVOKE", target = "Lnet/minecraft/core/RegistryAccess;put(Lcom/google/common/collect/ImmutableMap$Builder;Lnet/minecraft/resources/ResourceKey;Lcom/mojang/serialization/Codec;Lcom/mojang/serialization/Codec;)V", ordinal = 0), locals = LocalCapture.CAPTURE_FAILHARD) private static void galacticraft_registerCustomRegistries(CallbackInfoReturnable>, RegistryAccess.RegistryData>> ci, ImmutableMap.Builder>, RegistryAccess.RegistryData> builder) { put(builder, AddonRegistry.GALAXY_KEY, Galaxy.CODEC); diff --git a/src/main/java/dev/galacticraft/impl/internal/mixin/MinecraftServerMixin.java b/src/main/java/dev/galacticraft/impl/internal/mixin/MinecraftServerMixin.java index 0e15d3f9..b3320e1a 100644 --- a/src/main/java/dev/galacticraft/impl/internal/mixin/MinecraftServerMixin.java +++ b/src/main/java/dev/galacticraft/impl/internal/mixin/MinecraftServerMixin.java @@ -22,7 +22,6 @@ package dev.galacticraft.impl.internal.mixin; -import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import dev.galacticraft.api.accessor.SatelliteAccessor; import dev.galacticraft.api.universe.celestialbody.CelestialBody; @@ -30,39 +29,13 @@ import dev.galacticraft.impl.universe.celestialbody.type.SatelliteType; import dev.galacticraft.impl.universe.position.config.SatelliteConfig; import net.fabricmc.fabric.api.util.NbtType; -import net.minecraft.core.Registry; +import net.minecraft.core.RegistryAccess; import net.minecraft.nbt.*; -import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.RegistryOps; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.MinecraftServer; -import net.minecraft.server.world.ServerWorld; -import net.minecraft.util.Identifier; -import net.minecraft.util.WorldSavePath; -import net.minecraft.util.dynamic.RegistryOps; -import net.minecraft.util.registry.DynamicRegistryManager; -import net.minecraft.util.registry.Registry; -import net.minecraft.util.registry.RegistryEntry; -import net.minecraft.util.registry.RegistryKey; -import net.minecraft.world.SaveProperties; -import net.minecraft.world.World; -import net.minecraft.world.biome.source.BiomeAccess; -import net.minecraft.world.border.WorldBorder; -import net.minecraft.world.border.WorldBorderListener; -import net.minecraft.world.dimension.DimensionType; -import net.minecraft.world.gen.chunk.ChunkGenerator; -import net.minecraft.world.level.UnmodifiableLevelProperties; -import net.minecraft.world.level.storage.LevelStorage; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.biome.BiomeManager; -import net.minecraft.world.level.border.BorderChangeListener; -import net.minecraft.world.level.border.WorldBorder; -import net.minecraft.world.level.chunk.ChunkGenerator; -import net.minecraft.world.level.storage.DerivedLevelData; import net.minecraft.world.level.storage.LevelResource; import net.minecraft.world.level.storage.LevelStorageSource; -import net.minecraft.world.level.storage.WorldData; -import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Unmodifiable; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -77,7 +50,6 @@ import java.nio.file.Path; import java.util.HashMap; import java.util.Map; -import java.util.concurrent.Executor; @Mixin(MinecraftServer.class) public abstract class MinecraftServerMixin implements SatelliteAccessor { @@ -85,7 +57,7 @@ public abstract class MinecraftServerMixin implements SatelliteAccessor { @Shadow @Final protected LevelStorageSource.LevelStorageAccess storageSource; - @Shadow public abstract DynamicRegistryManager.Immutable getRegistryManager(); + @Shadow public abstract RegistryAccess.Frozen registryAccess(); @Override public @Unmodifiable Map> getSatellites() { @@ -120,16 +92,16 @@ private void galacticraft_saveSatellites(boolean suppressLogs, boolean bl, boole } } - @Inject(method = "loadWorld", at = @At(value = "HEAD")) + @Inject(method = "loadLevel", at = @At(value = "HEAD")) private void galacticraft_loadSatellites(CallbackInfo ci) { File worldFile = this.storageSource.getLevelPath(LevelResource.ROOT).toFile(); if (new File(worldFile, "satellites.dat").exists()) { try { ListTag nbt = NbtIo.readCompressed(new File(worldFile, "satellites.dat")).getList("satellites", NbtType.COMPOUND); assert nbt != null : "NBT list was null"; - for (NbtElement compound : nbt) { - assert compound instanceof NbtCompound : "Not a compound?!"; - this.satellites.put(new Identifier(((NbtCompound) compound).getString("id")), new CelestialBody<>(SatelliteType.INSTANCE, SatelliteConfig.CODEC.decode(RegistryOps.of(NbtOps.INSTANCE, this.getRegistryManager()), compound).get().orThrow().getFirst())); + for (Tag compound : nbt) { + assert compound instanceof CompoundTag : "Not a compound?!"; + this.satellites.put(new ResourceLocation(((CompoundTag) compound).getString("id")), new CelestialBody<>(SatelliteType.INSTANCE, SatelliteConfig.CODEC.decode(RegistryOps.create(NbtOps.INSTANCE, this.registryAccess()), compound).get().orThrow().getFirst())); } } catch (Throwable exception) { throw new RuntimeException("Failed to read satellite data!", exception); diff --git a/src/main/java/dev/galacticraft/impl/internal/mixin/PlayerManagerMixin.java b/src/main/java/dev/galacticraft/impl/internal/mixin/PlayerManagerMixin.java index 7d6583bb..171b2fbb 100644 --- a/src/main/java/dev/galacticraft/impl/internal/mixin/PlayerManagerMixin.java +++ b/src/main/java/dev/galacticraft/impl/internal/mixin/PlayerManagerMixin.java @@ -27,34 +27,23 @@ import dev.galacticraft.impl.Constant; import dev.galacticraft.impl.universe.position.config.SatelliteConfig; import net.fabricmc.fabric.api.networking.v1.PacketByteBufs; -import net.fabricmc.fabric.api.networking.v1.PlayerLookup; -import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.NbtOps; import net.minecraft.network.Connection; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientboundCustomPayloadPacket; import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.players.PlayerList; import net.minecraft.world.Container; -import net.minecraft.inventory.Inventory; -import net.minecraft.nbt.NbtCompound; -import net.minecraft.nbt.NbtOps; -import net.minecraft.network.ClientConnection; -import net.minecraft.network.Packet; -import net.minecraft.network.PacketByteBuf; -import net.minecraft.network.packet.s2c.play.CustomPayloadS2CPacket; -import net.minecraft.server.MinecraftServer; -import net.minecraft.server.PlayerManager; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.test.TestServer; -import net.minecraft.util.Identifier; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import java.util.Collection; - /** * @author TeamGalacticraft */ @@ -62,7 +51,7 @@ public abstract class PlayerManagerMixin { @Shadow public abstract MinecraftServer getServer(); - @Shadow public abstract void sendToAll(Packet packet); + @Shadow public abstract void broadcastAll(Packet packet); @Inject(method = "placeNewPlayer", at = @At("RETURN")) private void galacticraft_syncGearInventory(Connection connection, ServerPlayer player, CallbackInfo ci) { @@ -74,11 +63,11 @@ private void galacticraft_syncGearInventory(Connection connection, ServerPlayer buf.writeItem(inventory.getItem(i)); } - this.sendToAll(new CustomPayloadS2CPacket(new Identifier(Constant.MOD_ID, "gear_inv_sync"), buf)); + this.broadcastAll(new ClientboundCustomPayloadPacket(new ResourceLocation(Constant.MOD_ID, "gear_inv_sync"), buf)); ((SatelliteAccessor) this.getServer()).getSatellites().forEach((id, satellite) -> { - NbtCompound compound = (NbtCompound) SatelliteConfig.CODEC.encode(satellite.config(), NbtOps.INSTANCE, new NbtCompound()).get().orThrow(); - connection.send(new CustomPayloadS2CPacket(new Identifier(Constant.MOD_ID, "add_satellite"), PacketByteBufs.create().writeIdentifier(id).writeNbt(compound))); + CompoundTag compound = (CompoundTag) SatelliteConfig.CODEC.encode(satellite.config(), NbtOps.INSTANCE, new CompoundTag()).get().orThrow(); + connection.send(new ClientboundCustomPayloadPacket(new ResourceLocation(Constant.MOD_ID, "add_satellite"), PacketByteBufs.create().writeResourceLocation(id).writeNbt(compound))); }); } } diff --git a/src/main/java/dev/galacticraft/impl/internal/mixin/client/ClientPlayNetworkHandlerMixin.java b/src/main/java/dev/galacticraft/impl/internal/mixin/client/ClientPlayNetworkHandlerMixin.java index df7d284f..1718baf0 100644 --- a/src/main/java/dev/galacticraft/impl/internal/mixin/client/ClientPlayNetworkHandlerMixin.java +++ b/src/main/java/dev/galacticraft/impl/internal/mixin/client/ClientPlayNetworkHandlerMixin.java @@ -29,12 +29,12 @@ import dev.galacticraft.impl.universe.position.config.SatelliteConfig; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; +import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.multiplayer.ClientPacketListener; -import net.minecraft.client.world.ClientWorld; +import net.minecraft.core.Registry; +import net.minecraft.core.RegistryAccess; +import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; -import net.minecraft.util.registry.DynamicRegistryManager; -import net.minecraft.util.registry.Registry; -import net.minecraft.util.registry.RegistryKey; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; @@ -47,9 +47,9 @@ @Environment(EnvType.CLIENT) @Mixin(ClientPacketListener.class) public abstract class ClientPlayNetworkHandlerMixin implements ClientSatelliteAccessor { - @Shadow public abstract DynamicRegistryManager getRegistryManager(); + @Shadow public abstract RegistryAccess registryAccess(); - @Shadow private ClientWorld world; + @Shadow private ClientLevel level; private final @Unique Map> satellites = new HashMap<>(); private final @Unique List listeners = new ArrayList<>(); @@ -60,8 +60,8 @@ public Map> getS @Override public void addSatellite(ResourceLocation id, CelestialBody satellite) { - CelestialBody parent = satellite.parent(this.getRegistryManager()); - ((Orbitable) parent.type()).registerClientWorldHooks(this.getRegistryManager(), this.world, RegistryKey.of(Registry.WORLD_KEY, id), parent.config(), satellite.config()); + CelestialBody parent = satellite.parent(this.registryAccess()); + ((Orbitable) parent.type()).registerClientWorldHooks(this.registryAccess(), this.level, ResourceKey.create(Registry.DIMENSION_REGISTRY, id), parent.config(), satellite.config()); this.satellites.put(id, satellite); for (SatelliteListener listener : this.listeners) { listener.onSatelliteUpdated(satellite, true); diff --git a/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/DecorativePlanet.java b/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/DecorativePlanet.java index d2eae613..016c5c78 100644 --- a/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/DecorativePlanet.java +++ b/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/DecorativePlanet.java @@ -35,10 +35,10 @@ import dev.galacticraft.impl.universe.position.config.SatelliteConfig; import net.fabricmc.fabric.api.client.rendering.v1.DimensionRenderingRegistry; import net.minecraft.core.Registry; -import net.minecraft.util.registry.DynamicRegistryManager; +import net.minecraft.core.RegistryAccess; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceKey; -import net.minecraft.world.World; +import net.minecraft.world.level.Level; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -95,7 +95,7 @@ public float gravity(DecorativePlanetConfig config) { } @Override - public void registerClientWorldHooks(DynamicRegistryManager manager, World world, RegistryKey key, DecorativePlanetConfig config, SatelliteConfig satelliteConfig) { + public void registerClientWorldHooks(RegistryAccess manager, Level world, ResourceKey key, DecorativePlanetConfig config, SatelliteConfig satelliteConfig) { DimensionRenderingRegistry.registerCloudRenderer(key, GCApiDimensionEffects.NO_CLOUDS); DimensionRenderingRegistry.registerWeatherRenderer(key, GCApiDimensionEffects.NO_WEATHER); diff --git a/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/PlanetType.java b/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/PlanetType.java index ea4c1f36..590c7601 100644 --- a/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/PlanetType.java +++ b/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/PlanetType.java @@ -36,11 +36,6 @@ import dev.galacticraft.impl.universe.celestialbody.config.PlanetConfig; import dev.galacticraft.impl.universe.position.config.SatelliteConfig; import net.fabricmc.fabric.api.client.rendering.v1.DimensionRenderingRegistry; -import net.minecraft.text.TranslatableText; -import net.minecraft.util.registry.DynamicRegistryManager; -import net.minecraft.util.registry.Registry; -import net.minecraft.util.registry.RegistryKey; -import net.minecraft.world.World; import net.minecraft.core.Registry; import net.minecraft.core.RegistryAccess; import net.minecraft.network.chat.Component; @@ -117,7 +112,7 @@ public int temperature(RegistryAccess access, long time, PlanetConfig config) { } @Override - public void registerClientWorldHooks(DynamicRegistryManager manager, World world, RegistryKey key, @NotNull PlanetConfig config, SatelliteConfig satelliteConfig) { + public void registerClientWorldHooks(RegistryAccess manager, Level world, ResourceKey key, @NotNull PlanetConfig config, SatelliteConfig satelliteConfig) { DimensionRenderingRegistry.registerCloudRenderer(key, GCApiDimensionEffects.NO_CLOUDS); DimensionRenderingRegistry.registerWeatherRenderer(key, GCApiDimensionEffects.NO_WEATHER); diff --git a/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/SatelliteType.java b/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/SatelliteType.java index 4747cd10..8e296891 100644 --- a/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/SatelliteType.java +++ b/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/SatelliteType.java @@ -50,6 +50,7 @@ import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; import net.minecraft.core.Holder; import net.minecraft.core.Registry; +import net.minecraft.core.RegistryAccess; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtOps; import net.minecraft.network.FriendlyByteBuf; @@ -59,31 +60,12 @@ import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; -import net.minecraft.server.level.progress.ChunkProgressListener; import net.minecraft.tags.TagKey; -import net.minecraft.util.valueproviders.UniformInt; -import net.minecraft.world.level.ChunkPos; +import net.minecraft.util.valueproviders.ConstantInt; import net.minecraft.world.level.Level; -import net.minecraft.world.level.biome.BiomeManager; -import net.minecraft.world.level.border.BorderChangeListener; -import net.minecraft.world.level.chunk.ChunkStatus; import net.minecraft.world.level.dimension.DimensionType; import net.minecraft.world.level.dimension.LevelStem; import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate; -import net.minecraft.world.level.storage.DerivedLevelData; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.server.world.ServerWorld; -import net.minecraft.structure.Structure; -import net.minecraft.tag.TagKey; -import net.minecraft.text.Text; -import net.minecraft.text.TranslatableText; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; -import net.minecraft.util.registry.RegistryEntry; -import net.minecraft.util.registry.RegistryKey; -import net.minecraft.world.World; -import net.minecraft.world.dimension.DimensionOptions; -import net.minecraft.world.dimension.DimensionType; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -96,21 +78,21 @@ public class SatelliteType extends CelestialBodyType implements Satellite, Landable { public static final SatelliteType INSTANCE = new SatelliteType(SatelliteConfig.CODEC); private static final PlayerRemover PLAYER_REMOVER = (server, player) -> { - CelestialBody> satellite = CelestialBody.getByDimension(server.getRegistryManager(), player.getWorld().getRegistryKey()).orElse(null); + CelestialBody> satellite = CelestialBody.getByDimension(server.registryAccess(), player.getLevel().dimension()).orElse(null); if (satellite != null) { - CelestialBody parent = satellite.parent(server.getRegistryManager()); + CelestialBody parent = satellite.parent(server.registryAccess()); if (parent != null) { if (parent.type() instanceof Landable landable) { - ServerWorld world = server.getWorld(landable.world(parent.config())); - player.teleport(world, player.getX(), world.getTopY() * 2, player.getZ(), player.getYaw(), player.getPitch()); - player.setVelocity((world.random.nextDouble() - 0.5) * 10.0, world.random.nextDouble() * 12.5, (world.random.nextDouble() - 0.5) * 10.0); + ServerLevel level = server.getLevel(landable.world(parent.config())); + player.teleportTo(level, player.getX(), level.getMaxBuildHeight() * 2, player.getZ(), player.getYRot(), player.getXRot()); + player.setDeltaMovement((level.random.nextDouble() - 0.5) * 10.0, level.random.nextDouble() * 12.5, (level.random.nextDouble() - 0.5) * 10.0); return; } } } - ServerWorld overworld = server.getOverworld(); - player.teleport(overworld, 0, 1000, 0, player.getYaw(), player.getPitch()); - player.setVelocity((overworld.random.nextDouble() - 0.5) * 10.0, overworld.random.nextDouble() * 20.0, (overworld.random.nextDouble() - 0.5) * 10.0); + ServerLevel overworld = server.overworld(); + player.teleportTo(overworld, 0, 1000, 0, player.getYRot(), player.getXRot()); + player.setDeltaMovement((overworld.random.nextDouble() - 0.5) * 10.0, overworld.random.nextDouble() * 20.0, (overworld.random.nextDouble() - 0.5) * 10.0); }; private static final GasComposition EMPTY_GAS_COMPOSITION = new GasComposition.Builder().build(); private static final Component NAME = Component.translatable("ui.galacticraft-api.satellite.name"); @@ -121,18 +103,18 @@ protected SatelliteType(Codec codec) { } @ApiStatus.Experimental - public static CelestialBody registerSatellite(@NotNull MinecraftServer server, @NotNull ServerPlayerEntity player, @NotNull CelestialBody parent, @NotNull Structure structure) { - Identifier identifier = Objects.requireNonNull(server.getRegistryManager().get(AddonRegistry.CELESTIAL_BODY_KEY).getId(parent)); - Identifier id = new Identifier(identifier.getNamespace(), "sat_" + identifier.getPath() + "_" + player.getGameProfile().getName().toLowerCase(Locale.ROOT)); - DimensionType type = DimensionType.create(OptionalLong.empty(), true, false, false, true, 1, false, false, false, false, false, 0, 256, 256, new TagKey<>(Registry.BLOCK_KEY, new Identifier(Constant.MOD_ID, "infiniburn_space")), new Identifier(Constant.MOD_ID, "space_sky"), 0); - DimensionOptions options = new DimensionOptions(RegistryEntry.of(type), new SatelliteChunkGenerator(server.getRegistryManager().get(Registry.STRUCTURE_SET_KEY), RegistryEntry.of(GcApiBiomes.SPACE), structure)); - SatelliteOwnershipData ownershipData = SatelliteOwnershipData.create(player.getUuid(), player.getEntityName(), new LinkedList<>(), false); + public static CelestialBody registerSpaceStation(@NotNull MinecraftServer server, @NotNull ServerPlayer player, @NotNull CelestialBody parent, @NotNull StructureTemplate structure) { + ResourceLocation identifier = Objects.requireNonNull(server.registryAccess().registryOrThrow(AddonRegistry.CELESTIAL_BODY_KEY).getKey(parent)); + ResourceLocation id = new ResourceLocation(identifier.getNamespace(), "sat_" + identifier.getPath() + "_" + player.getGameProfile().getName().toLowerCase(Locale.ROOT)); + DimensionType type = new DimensionType(OptionalLong.empty(), true, false, false, true, 1, false, false, 0, 256, 256, TagKey.create(Registry.BLOCK_REGISTRY, new ResourceLocation(Constant.MOD_ID, "infiniburn_space")), new ResourceLocation(Constant.MOD_ID, "space_sky"), 1, new DimensionType.MonsterSettings(false, false, ConstantInt.of(-1), 0)); + LevelStem options = new LevelStem(Holder.direct(type), new SatelliteChunkGenerator(server.registryAccess().registryOrThrow(Registry.STRUCTURE_SET_REGISTRY), Holder.direct(GcApiBiomes.SPACE), structure)); + SatelliteOwnershipData ownershipData = SatelliteOwnershipData.create(player.getUUID(), player.getScoreboardName(), new LinkedList<>(), false); CelestialPosition position = new CelestialPosition<>(OrbitalCelestialPositionType.INSTANCE, new OrbitalCelestialPositionConfig(1550, 10.0f, 0.0F, false)); - CelestialDisplay display = new CelestialDisplay<>(IconCelestialDisplayType.INSTANCE, new IconCelestialDisplayConfig(new Identifier(Constant.MOD_ID, "satellite"), 0, 0, 16, 16, 1)); - RegistryKey key = RegistryKey.of(Registry.WORLD_KEY, id); - RegistryKey key2 = RegistryKey.of(Registry.DIMENSION_TYPE_KEY, id); - assert server.getWorld(key) == null : "World already registered?!"; - assert server.getRegistryManager().get(Registry.DIMENSION_TYPE_KEY).get(key2) == null : "Dimension Type already registered?!"; + CelestialDisplay display = new CelestialDisplay<>(IconCelestialDisplayType.INSTANCE, new IconCelestialDisplayConfig(new ResourceLocation(Constant.MOD_ID, "satellite"), 0, 0, 16, 16, 1)); + ResourceKey key = ResourceKey.create(Registry.DIMENSION_REGISTRY, id); + ResourceKey key2 = ResourceKey.create(Registry.DIMENSION_TYPE_REGISTRY, id); + assert server.getLevel(key) == null : "Level already registered?!"; + assert server.registryAccess().registryOrThrow(Registry.DIMENSION_TYPE_REGISTRY).get(key2) == null : "Dimension Type already registered?!"; return create(id, server, parent, position, display, options, ownershipData, player.getGameProfile().getName() + "'s Space Station"); } @@ -143,8 +125,8 @@ public static CelestialBody create(ResourceLocat throw new IllegalArgumentException("Parent must be orbitable!"); } - Constant.LOGGER.debug("Attempting to create a world dynamically ({})", id); - if (!((DynamicLevelRegistry) server).addDynamicLevel(id, options, options.getDimensionTypeSupplier().value())) { + Constant.LOGGER.debug("Attempting to create a level dynamically ({})", id); + if (!((DynamicLevelRegistry) server).addDynamicLevel(id, options, options.typeHolder().value())) { throw new RuntimeException("Failed to create dynamic level!"); } @@ -161,12 +143,12 @@ public static CelestialBody create(ResourceLocat } @ApiStatus.Experimental - public static boolean removeSatellite(@NotNull MinecraftServer server, Identifier id) { + public static boolean removeSatellite(@NotNull MinecraftServer server, ResourceLocation id) { if (((DynamicLevelRegistry) server).removeDynamicLevel(id, PLAYER_REMOVER)) { ((SatelliteAccessor) server).removeSatellite(id); - for (ServerPlayerEntity player : server.getPlayerManager().getPlayerList()) { - ServerPlayNetworking.send(player, new Identifier(Constant.MOD_ID, "remove_satellite"), new PacketByteBuf(Unpooled.buffer()).writeIdentifier(id)); + for (ServerPlayer player : server.getPlayerList().getPlayers()) { + ServerPlayNetworking.send(player, new ResourceLocation(Constant.MOD_ID, "remove_satellite"), new FriendlyByteBuf(Unpooled.buffer()).writeResourceLocation(id)); } return true; } else { @@ -240,13 +222,8 @@ public int accessWeight(@NotNull SatelliteConfig config) { } @Override - public int temperature(@NotNull SatelliteConfig config) { - return 121; - } - - @Override - public int nightTemperature(@NotNull SatelliteConfig config) { - return -157; + public int temperature(RegistryAccess access, long time, SatelliteConfig config) { + return time % 24000 < 12000 ? 395 : 116; //todo: temperature providers? } @Override From e08d91e036f32fe423d74dcd6fb2e1d1e66943c8 Mon Sep 17 00:00:00 2001 From: marcus8448 Date: Mon, 8 Aug 2022 09:37:57 -0700 Subject: [PATCH 05/12] chore: update to 1.19.2 --- .github/workflows/publish.yml | 2 +- build.gradle.kts | 4 ++-- gradle.properties | 6 +++--- .../celestialbody/type/SatelliteType.java | 16 ++++++++-------- .../position/config/SatelliteConfig.java | 11 ++--------- 5 files changed, 16 insertions(+), 23 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index e89e42fa..b1dd367e 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -24,7 +24,7 @@ jobs: - name: Publish uses: gradle/gradle-build-action@v2 with: - arguments: :lib:publish + arguments: publish env: SNAPSHOT: ${{ env.release.prerelease }} NEXUS_REPOSITORY_URL: ${{ env.release.prerelease == 'true' && secrets.NEXUS_SNAPSHOT_URL || secrets.NEXUS_RELEASE_URL }} diff --git a/build.gradle.kts b/build.gradle.kts index a17dd7de..46c03b66 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -39,7 +39,7 @@ val minecraft = project.property("minecraft.version").toString() val loader = project.property("loader.version").toString() val fabric = project.property("fabric.version").toString() val machinelib = project.property("machinelib.version").toString() -val dynworlds = project.property("dynworlds.version").toString() +val dyndims = project.property("dyndims.version").toString() group = modGroup version ="$modVersion+$minecraft" @@ -120,7 +120,7 @@ dependencies { } modImplementation("dev.galacticraft:MachineLib:$machinelib") - modImplementation("dev.galacticraft:dynworlds:$dynworlds") + modImplementation("dev.galacticraft:dyndims:$dyndims") modRuntimeOnly("net.fabricmc.fabric-api:fabric-api:$fabric") "gametestImplementation"(sourceSets.main.get().output) "gametestImplementation"(sourceSets.main.get().compileClasspath) diff --git a/gradle.properties b/gradle.properties index cc5ee78b..47582828 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ org.gradle.jvmargs=-Xmx3G # Mod Information mod.id=galacticraft-api mod.name=GalacticraftAPI -mod.version=0.4.0-prealpha.23 +mod.version=0.4.0-prealpha.24 mod.group=dev.galacticraft # Minecraft and Fabric Loader @@ -12,5 +12,5 @@ loader.version=0.14.9 # Mod Dependencies fabric.version=0.59.0+1.19.2 -machinelib.version=0.1.0+1.19.1-pre2 -dynworlds.version=0.2.0+1.18.2 +machinelib.version=0.1.0+1.19.2 +dyndims.version=0.3.0 diff --git a/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/SatelliteType.java b/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/SatelliteType.java index 9248f6ac..0ac857f9 100644 --- a/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/SatelliteType.java +++ b/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/SatelliteType.java @@ -36,8 +36,8 @@ import dev.galacticraft.api.universe.display.CelestialDisplay; import dev.galacticraft.api.universe.galaxy.Galaxy; import dev.galacticraft.api.universe.position.CelestialPosition; -import dev.galacticraft.dynworlds.api.DynamicLevelRegistry; -import dev.galacticraft.dynworlds.api.PlayerRemover; +import dev.galacticraft.dyndims.api.DynamicLevelRegistry; +import dev.galacticraft.dyndims.api.PlayerRemover; import dev.galacticraft.impl.Constant; import dev.galacticraft.impl.internal.world.gen.SatelliteChunkGenerator; import dev.galacticraft.impl.internal.world.gen.biome.GcApiBiomes; @@ -63,6 +63,7 @@ import net.minecraft.tags.TagKey; import net.minecraft.util.valueproviders.ConstantInt; import net.minecraft.world.level.Level; +import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.dimension.DimensionType; import net.minecraft.world.level.dimension.LevelStem; import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate; @@ -107,7 +108,6 @@ public static CelestialBody registerSpaceStation ResourceLocation identifier = Objects.requireNonNull(server.registryAccess().registryOrThrow(AddonRegistry.CELESTIAL_BODY_KEY).getKey(parent)); ResourceLocation id = new ResourceLocation(identifier.getNamespace(), "sat_" + identifier.getPath() + "_" + player.getGameProfile().getName().toLowerCase(Locale.ROOT)); DimensionType type = new DimensionType(OptionalLong.empty(), true, false, false, true, 1, false, false, 0, 256, 256, TagKey.create(Registry.BLOCK_REGISTRY, new ResourceLocation(Constant.MOD_ID, "infiniburn_space")), new ResourceLocation(Constant.MOD_ID, "space_sky"), 1, new DimensionType.MonsterSettings(false, false, ConstantInt.of(-1), 0)); - LevelStem options = new LevelStem(Holder.direct(type), new SatelliteChunkGenerator(server.registryAccess().registryOrThrow(Registry.STRUCTURE_SET_REGISTRY), Holder.direct(GcApiBiomes.SPACE), structure)); SatelliteOwnershipData ownershipData = SatelliteOwnershipData.create(player.getUUID(), player.getScoreboardName(), new LinkedList<>(), false); CelestialPosition position = new CelestialPosition<>(OrbitalCelestialPositionType.INSTANCE, new OrbitalCelestialPositionConfig(1550, 10.0f, 0.0F, false)); CelestialDisplay display = new CelestialDisplay<>(IconCelestialDisplayType.INSTANCE, new IconCelestialDisplayConfig(new ResourceLocation(Constant.MOD_ID, "satellite"), 0, 0, 16, 16, 1)); @@ -115,22 +115,22 @@ public static CelestialBody registerSpaceStation ResourceKey key2 = ResourceKey.create(Registry.DIMENSION_TYPE_REGISTRY, id); assert server.getLevel(key) == null : "Level already registered?!"; assert server.registryAccess().registryOrThrow(Registry.DIMENSION_TYPE_REGISTRY).get(key2) == null : "Dimension Type already registered?!"; - return create(id, server, parent, position, display, options, ownershipData, player.getGameProfile().getName() + "'s Space Station"); + return create(id, server, parent, position, display, new SatelliteChunkGenerator(server.registryAccess().registryOrThrow(Registry.STRUCTURE_SET_REGISTRY), Holder.direct(GcApiBiomes.SPACE), structure), type, ownershipData, player.getGameProfile().getName() + "'s Space Station"); } @ApiStatus.Experimental public static CelestialBody create(ResourceLocation id, @NotNull MinecraftServer server, CelestialBody parent, CelestialPosition position, CelestialDisplay display, - LevelStem options, SatelliteOwnershipData ownershipData, String name) { + ChunkGenerator chunkGenerator, DimensionType type, SatelliteOwnershipData ownershipData, String name) { if (!(parent.type() instanceof Orbitable)) { throw new IllegalArgumentException("Parent must be orbitable!"); } Constant.LOGGER.debug("Attempting to create a level dynamically ({})", id); - if (!((DynamicLevelRegistry) server).addDynamicLevel(id, options, options.typeHolder().value())) { + if (!((DynamicLevelRegistry) server).addDynamicDimension(id, chunkGenerator, type)) { throw new RuntimeException("Failed to create dynamic level!"); } - SatelliteConfig config = new SatelliteConfig(ResourceKey.create(AddonRegistry.CELESTIAL_BODY_KEY, server.registryAccess().registryOrThrow(AddonRegistry.CELESTIAL_BODY_KEY).getKey(parent)), parent.galaxy(), position, display, ownershipData, ResourceKey.create(Registry.DIMENSION_REGISTRY, id), EMPTY_GAS_COMPOSITION, 0.0f, parent.type() instanceof Landable ? ((Landable) parent.type()).accessWeight(parent.config()) : 1, options); + SatelliteConfig config = new SatelliteConfig(ResourceKey.create(AddonRegistry.CELESTIAL_BODY_KEY, Objects.requireNonNull(server.registryAccess().registryOrThrow(AddonRegistry.CELESTIAL_BODY_KEY).getKey(parent))), parent.galaxy(), position, display, ownershipData, ResourceKey.create(Registry.DIMENSION_REGISTRY, id), EMPTY_GAS_COMPOSITION, 0.0f, parent.type() instanceof Landable ? ((Landable) parent.type()).accessWeight(parent.config()) : 1); config.customName(Component.translatable(name)); CelestialBody satellite = INSTANCE.configure(config); ((SatelliteAccessor) server).addSatellite(id, satellite); @@ -144,7 +144,7 @@ public static CelestialBody create(ResourceLocat @ApiStatus.Experimental public static boolean removeSatellite(@NotNull MinecraftServer server, ResourceLocation id) { - if (((DynamicLevelRegistry) server).removeDynamicLevel(id, PLAYER_REMOVER)) { + if (((DynamicLevelRegistry) server).removeDynamicDimension(id, PLAYER_REMOVER)) { ((SatelliteAccessor) server).removeSatellite(id); for (ServerPlayer player : server.getPlayerList().getPlayers()) { diff --git a/src/main/java/dev/galacticraft/impl/universe/position/config/SatelliteConfig.java b/src/main/java/dev/galacticraft/impl/universe/position/config/SatelliteConfig.java index cd8c756a..f9a49c48 100644 --- a/src/main/java/dev/galacticraft/impl/universe/position/config/SatelliteConfig.java +++ b/src/main/java/dev/galacticraft/impl/universe/position/config/SatelliteConfig.java @@ -50,8 +50,7 @@ public final class SatelliteConfig implements CelestialBodyConfig { ResourceLocation.CODEC.fieldOf("world").xmap(id -> ResourceKey.create(Registry.DIMENSION_REGISTRY, id), ResourceKey::location).forGetter(SatelliteConfig::world), GasComposition.CODEC.fieldOf("atmosphere").forGetter(SatelliteConfig::atmosphere), Codec.FLOAT.fieldOf("gravity").forGetter(SatelliteConfig::gravity), - Codec.INT.fieldOf("accessWeight").forGetter(SatelliteConfig::accessWeight), - LevelStem.CODEC.fieldOf("dimension_options").forGetter(SatelliteConfig::dimensionOptions) + Codec.INT.fieldOf("accessWeight").forGetter(SatelliteConfig::accessWeight) ).apply(instance, SatelliteConfig::new)); private final ResourceKey> parent; @@ -63,10 +62,9 @@ public final class SatelliteConfig implements CelestialBodyConfig { private final GasComposition atmosphere; private final float gravity; private final int accessWeight; - private final LevelStem dimensionOptions; private Component customName = Component.empty(); - public SatelliteConfig(ResourceKey> parent, ResourceKey galaxy, CelestialPosition position, CelestialDisplay display, SatelliteOwnershipData ownershipData, ResourceKey world, GasComposition atmosphere, float gravity, int accessWeight, LevelStem dimensionOptions) { + public SatelliteConfig(ResourceKey> parent, ResourceKey galaxy, CelestialPosition position, CelestialDisplay display, SatelliteOwnershipData ownershipData, ResourceKey world, GasComposition atmosphere, float gravity, int accessWeight) { this.parent = parent; this.galaxy = galaxy; this.position = position; @@ -76,7 +74,6 @@ public SatelliteConfig(ResourceKey> parent, ResourceKey> parent() {return parent;} @@ -101,10 +98,6 @@ public SatelliteConfig(ResourceKey> parent, ResourceKey Date: Thu, 11 Aug 2022 00:40:58 -0700 Subject: [PATCH 06/12] chore: satellite -> space station update to dynamic dimensions 0.4.0-SNAPSHOT --- build.gradle.kts | 6 ++ gradle.properties | 2 +- .../api/accessor/SatelliteAccessor.java | 8 +-- .../accessor/ClientSatelliteAccessor.java | 6 +- .../galacticraft/api/satellite/Satellite.java | 2 +- .../celestialbody/satellite/Orbitable.java | 6 +- .../client/fabric/GalacticraftAPIClient.java | 6 +- .../impl/internal/command/GCApiCommands.java | 56 +++++++-------- .../internal/mixin/MinecraftServerMixin.java | 16 ++--- .../internal/mixin/PlayerManagerMixin.java | 4 +- .../client/ClientPlayNetworkHandlerMixin.java | 12 ++-- .../celestialbody/type/DecorativePlanet.java | 4 +- .../celestialbody/type/PlanetType.java | 5 +- ...telliteType.java => SpaceStationType.java} | 69 +++++++++---------- ...iteConfig.java => SpaceStationConfig.java} | 31 ++++----- .../assets/galacticraft-api/lang/en_us.json | 3 +- 16 files changed, 121 insertions(+), 115 deletions(-) rename src/main/java/dev/galacticraft/impl/universe/celestialbody/type/{SatelliteType.java => SpaceStationType.java} (72%) rename src/main/java/dev/galacticraft/impl/universe/position/config/{SatelliteConfig.java => SpaceStationConfig.java} (84%) diff --git a/build.gradle.kts b/build.gradle.kts index 46c03b66..41a0b3a4 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -96,6 +96,12 @@ repositories { includeGroup("dev.galacticraft") } } + maven("https://maven.galacticraft.net/repository/maven-snapshots/") { + name = "Galacticraft Repository" + content { + includeVersionByRegex("dev.galacticraft", ".*", ".*-SNAPSHOT") + } + } } dependencies { diff --git a/gradle.properties b/gradle.properties index 47582828..5722325a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,4 +13,4 @@ loader.version=0.14.9 # Mod Dependencies fabric.version=0.59.0+1.19.2 machinelib.version=0.1.0+1.19.2 -dyndims.version=0.3.0 +dyndims.version=0.4.0-SNAPSHOT diff --git a/src/main/java/dev/galacticraft/api/accessor/SatelliteAccessor.java b/src/main/java/dev/galacticraft/api/accessor/SatelliteAccessor.java index 5fb183b8..4e50853c 100644 --- a/src/main/java/dev/galacticraft/api/accessor/SatelliteAccessor.java +++ b/src/main/java/dev/galacticraft/api/accessor/SatelliteAccessor.java @@ -23,15 +23,15 @@ package dev.galacticraft.api.accessor; import dev.galacticraft.api.universe.celestialbody.CelestialBody; -import dev.galacticraft.impl.universe.celestialbody.type.SatelliteType; -import dev.galacticraft.impl.universe.position.config.SatelliteConfig; +import dev.galacticraft.impl.universe.celestialbody.type.SpaceStationType; +import dev.galacticraft.impl.universe.position.config.SpaceStationConfig; import java.util.Map; import net.minecraft.resources.ResourceLocation; public interface SatelliteAccessor { - Map> getSatellites(); + Map> getSatellites(); - void addSatellite(ResourceLocation id, CelestialBody satellite); + void addSatellite(ResourceLocation id, CelestialBody satellite); void removeSatellite(ResourceLocation id); } diff --git a/src/main/java/dev/galacticraft/api/client/accessor/ClientSatelliteAccessor.java b/src/main/java/dev/galacticraft/api/client/accessor/ClientSatelliteAccessor.java index f7a0326f..2853c031 100644 --- a/src/main/java/dev/galacticraft/api/client/accessor/ClientSatelliteAccessor.java +++ b/src/main/java/dev/galacticraft/api/client/accessor/ClientSatelliteAccessor.java @@ -24,8 +24,8 @@ import dev.galacticraft.api.accessor.SatelliteAccessor; import dev.galacticraft.api.universe.celestialbody.CelestialBody; -import dev.galacticraft.impl.universe.celestialbody.type.SatelliteType; -import dev.galacticraft.impl.universe.position.config.SatelliteConfig; +import dev.galacticraft.impl.universe.celestialbody.type.SpaceStationType; +import dev.galacticraft.impl.universe.position.config.SpaceStationConfig; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; @@ -37,6 +37,6 @@ public interface ClientSatelliteAccessor extends SatelliteAccessor { @FunctionalInterface interface SatelliteListener { - void onSatelliteUpdated(CelestialBody satellite, boolean added); + void onSatelliteUpdated(CelestialBody satellite, boolean added); } } diff --git a/src/main/java/dev/galacticraft/api/satellite/Satellite.java b/src/main/java/dev/galacticraft/api/satellite/Satellite.java index 5b196a8a..7e22519e 100644 --- a/src/main/java/dev/galacticraft/api/satellite/Satellite.java +++ b/src/main/java/dev/galacticraft/api/satellite/Satellite.java @@ -43,7 +43,7 @@ public interface Satellite { /** * Returns the custom name of this satellite - * By default it is {@code 's satellite} + * By default it is {@code [Player Name]'s satellite} * * @param config the satellite configuration to be queried * @return the custom name of this satellite diff --git a/src/main/java/dev/galacticraft/api/universe/celestialbody/satellite/Orbitable.java b/src/main/java/dev/galacticraft/api/universe/celestialbody/satellite/Orbitable.java index 1d79f4ca..84192cbd 100644 --- a/src/main/java/dev/galacticraft/api/universe/celestialbody/satellite/Orbitable.java +++ b/src/main/java/dev/galacticraft/api/universe/celestialbody/satellite/Orbitable.java @@ -24,7 +24,7 @@ import dev.galacticraft.api.satellite.SpaceStationRecipe; import dev.galacticraft.api.universe.celestialbody.CelestialBodyConfig; -import dev.galacticraft.impl.universe.position.config.SatelliteConfig; +import dev.galacticraft.impl.universe.position.config.SpaceStationConfig; import net.minecraft.core.RegistryAccess; import net.minecraft.resources.ResourceKey; import net.minecraft.world.level.Level; @@ -52,7 +52,7 @@ public interface Orbitable { * @param world * @param key the {@link ResourceKey} of the satellite's dimension * @param config the celestial body configuration - * @param satelliteConfig + * @param spaceStationConfig */ - void registerClientWorldHooks(RegistryAccess manager, /*Client*/Level world, ResourceKey key, C config, SatelliteConfig satelliteConfig); + void registerClientWorldHooks(RegistryAccess manager, /*Client*/Level world, ResourceKey key, C config, SpaceStationConfig spaceStationConfig); } diff --git a/src/main/java/dev/galacticraft/impl/internal/client/fabric/GalacticraftAPIClient.java b/src/main/java/dev/galacticraft/impl/internal/client/fabric/GalacticraftAPIClient.java index c36ee92d..c15e1ffe 100644 --- a/src/main/java/dev/galacticraft/impl/internal/client/fabric/GalacticraftAPIClient.java +++ b/src/main/java/dev/galacticraft/impl/internal/client/fabric/GalacticraftAPIClient.java @@ -28,8 +28,8 @@ import dev.galacticraft.api.universe.celestialbody.CelestialBody; import dev.galacticraft.impl.Constant; import dev.galacticraft.impl.internal.accessor.ChunkOxygenSyncer; -import dev.galacticraft.impl.universe.celestialbody.type.SatelliteType; -import dev.galacticraft.impl.universe.position.config.SatelliteConfig; +import dev.galacticraft.impl.universe.celestialbody.type.SpaceStationType; +import dev.galacticraft.impl.universe.position.config.SpaceStationConfig; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; @@ -54,7 +54,7 @@ public void onInitializeClient() { client.execute(() -> ((ClientResearchAccessor) Objects.requireNonNull(client.player)).readChanges(buf)); }); ClientPlayNetworking.registerGlobalReceiver(new ResourceLocation(Constant.MOD_ID, "add_satellite"), (client, networkHandler, buffer, sender) -> { - ((SatelliteAccessor) networkHandler).addSatellite(buffer.readResourceLocation(), new CelestialBody<>(SatelliteType.INSTANCE, SatelliteConfig.CODEC.decode(RegistryOps.create(NbtOps.INSTANCE, networkHandler.registryAccess()), buffer.readNbt()).get().orThrow().getFirst())); + ((SatelliteAccessor) networkHandler).addSatellite(buffer.readResourceLocation(), new CelestialBody<>(SpaceStationType.INSTANCE, SpaceStationConfig.CODEC.decode(RegistryOps.create(NbtOps.INSTANCE, networkHandler.registryAccess()), buffer.readNbt()).get().orThrow().getFirst())); }); ClientPlayNetworking.registerGlobalReceiver(new ResourceLocation(Constant.MOD_ID, "remove_satellite"), (client, networkHandler, buffer, sender) -> { FriendlyByteBuf buf = new FriendlyByteBuf(buffer.copy()); diff --git a/src/main/java/dev/galacticraft/impl/internal/command/GCApiCommands.java b/src/main/java/dev/galacticraft/impl/internal/command/GCApiCommands.java index 15ba360a..3baa09f8 100644 --- a/src/main/java/dev/galacticraft/impl/internal/command/GCApiCommands.java +++ b/src/main/java/dev/galacticraft/impl/internal/command/GCApiCommands.java @@ -30,10 +30,11 @@ import dev.galacticraft.api.registry.AddonRegistry; import dev.galacticraft.impl.Constant; import dev.galacticraft.impl.command.argument.RegistryArgumentType; -import dev.galacticraft.impl.universe.celestialbody.type.SatelliteType; +import dev.galacticraft.impl.universe.celestialbody.type.SpaceStationType; import dev.galacticraft.impl.command.argument.serializer.RegistryArgumentTypeSerializer; import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback; import net.fabricmc.fabric.mixin.command.ArgumentTypesAccessor; +import net.fabricmc.loader.api.FabricLoader; import net.minecraft.commands.CommandSourceStack; import net.minecraft.commands.Commands; import net.minecraft.commands.arguments.ResourceLocationArgument; @@ -55,23 +56,24 @@ public static void register() { RegistryArgumentTypeSerializer serializer = new RegistryArgumentTypeSerializer(); ArgumentTypesAccessor.fabric_getClassMap().put( RegistryArgumentType.class, serializer); CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, commandSelection) -> { - dispatcher.register(Commands.literal(Constant.MOD_ID + ":debug") + if (FabricLoader.getInstance().isDevelopmentEnvironment()) { + dispatcher.register(Commands.literal(Constant.MOD_ID + ":debug") .requires(serverCommandSource -> serverCommandSource.hasPermission(2)).then(Commands.literal("registry").then(Commands.argument("registry", RegistryArgumentType.create()) - .then(Commands.literal("dump_ids").executes(GCApiCommands::dumpRegistries)) - .then(Commands.literal("get") - .then(Commands.argument("id", ResourceLocationArgument.id()) - .executes(GCApiCommands::getRegistryValue))) - .then(Commands.literal("get_raw") - .then(Commands.argument("id", IntegerArgumentType.integer()) - .executes(GCApiCommands::getRegistryValueFromRawId))) - .then(Commands.literal("to_raw") - .then(Commands.argument("id", ResourceLocationArgument.id()) - .executes(GCApiCommands::getRegistryRawId))) - .then(Commands.literal("dump_values") - .then(Commands.argument("id", ResourceLocationArgument.id()) - .executes(GCApiCommands::dumpRegistryValues)))))); - - dispatcher.register(Commands.literal(Constant.MOD_ID + ":oxygen").requires(source -> source.hasPermission(3)) + .then(Commands.literal("dump_ids").executes(GCApiCommands::dumpRegistries)) + .then(Commands.literal("get") + .then(Commands.argument("id", ResourceLocationArgument.id()) + .executes(GCApiCommands::getRegistryValue))) + .then(Commands.literal("get_raw") + .then(Commands.argument("id", IntegerArgumentType.integer()) + .executes(GCApiCommands::getRegistryValueFromRawId))) + .then(Commands.literal("to_raw") + .then(Commands.argument("id", ResourceLocationArgument.id()) + .executes(GCApiCommands::getRegistryRawId))) + .then(Commands.literal("dump_values") + .then(Commands.argument("id", ResourceLocationArgument.id()) + .executes(GCApiCommands::dumpRegistryValues)))))); + } + dispatcher.register(Commands.literal("oxygen").requires(source -> source.hasPermission(2)) .then(Commands.literal("get").then(Commands.argument("start_pos", BlockPosArgument.blockPos()) .executes(GCApiCommands::getOxygen) .then(Commands.argument("end_pos", BlockPosArgument.blockPos()) @@ -84,32 +86,32 @@ public static void register() { .then(Commands.argument("oxygen", BoolArgumentType.bool()) .executes(GCApiCommands::setOxygenArea)))))); - dispatcher.register(Commands.literal(Constant.MOD_ID + ":satellite").requires(source -> source.hasPermission(3)) + dispatcher.register(Commands.literal("space_station").requires(source -> source.hasPermission(2)) .then(Commands.literal("add").then(Commands.argument("world", ResourceLocationArgument.id()) - .executes(GCApiCommands::addSatellite) + .executes(GCApiCommands::addSpaceStation) .then(Commands.argument("structure", ResourceLocationArgument.id()) - .executes(GCApiCommands::addSatelliteStructured)))) + .executes(GCApiCommands::addSpaceStationStructured)))) .then(Commands.literal("remove").then(Commands.argument("id", ResourceLocationArgument.id()) - .executes(GCApiCommands::removeSatellite)))); + .executes(GCApiCommands::removeSpaceStation)))); }); } - private static int removeSatellite(@NotNull CommandContext ctx) throws CommandSyntaxException { - if (SatelliteType.removeSatellite(ctx.getSource().getServer(), ResourceLocationArgument.getId(ctx, "id"))) { + private static int removeSpaceStation(@NotNull CommandContext ctx) { + if (SpaceStationType.removeSatellite(ctx.getSource().getServer(), ResourceLocationArgument.getId(ctx, "id"))) { return 1; } else { return 0; } } - private static int addSatelliteStructured(@NotNull CommandContext ctx) throws CommandSyntaxException { + private static int addSpaceStationStructured(@NotNull CommandContext ctx) { StructureTemplate structure = ctx.getSource().getServer().getStructureManager().get(ResourceLocationArgument.getId(ctx, "structure")).orElseThrow(); - SatelliteType.registerSpaceStation(ctx.getSource().getServer(), ctx.getSource().getPlayer(), Objects.requireNonNull(ctx.getSource().registryAccess().registryOrThrow(AddonRegistry.CELESTIAL_BODY_KEY).get(ResourceLocationArgument.getId(ctx, "world"))), structure); + SpaceStationType.registerSpaceStation(ctx.getSource().getServer(), ctx.getSource().getPlayer(), Objects.requireNonNull(ctx.getSource().registryAccess().registryOrThrow(AddonRegistry.CELESTIAL_BODY_KEY).get(ResourceLocationArgument.getId(ctx, "world"))), structure); return 1; } - private static int addSatellite(@NotNull CommandContext ctx) throws CommandSyntaxException { - SatelliteType.registerSpaceStation(ctx.getSource().getServer(), ctx.getSource().getPlayer(), Objects.requireNonNull(ctx.getSource().registryAccess().registryOrThrow(AddonRegistry.CELESTIAL_BODY_KEY).get(ResourceLocationArgument.getId(ctx, "world"))), new StructureTemplate()); + private static int addSpaceStation(@NotNull CommandContext ctx) { + SpaceStationType.registerSpaceStation(ctx.getSource().getServer(), ctx.getSource().getPlayer(), Objects.requireNonNull(ctx.getSource().registryAccess().registryOrThrow(AddonRegistry.CELESTIAL_BODY_KEY).get(ResourceLocationArgument.getId(ctx, "world"))), new StructureTemplate()); return 1; } diff --git a/src/main/java/dev/galacticraft/impl/internal/mixin/MinecraftServerMixin.java b/src/main/java/dev/galacticraft/impl/internal/mixin/MinecraftServerMixin.java index b3320e1a..3ab5ccb6 100644 --- a/src/main/java/dev/galacticraft/impl/internal/mixin/MinecraftServerMixin.java +++ b/src/main/java/dev/galacticraft/impl/internal/mixin/MinecraftServerMixin.java @@ -26,8 +26,8 @@ import dev.galacticraft.api.accessor.SatelliteAccessor; import dev.galacticraft.api.universe.celestialbody.CelestialBody; import dev.galacticraft.impl.Constant; -import dev.galacticraft.impl.universe.celestialbody.type.SatelliteType; -import dev.galacticraft.impl.universe.position.config.SatelliteConfig; +import dev.galacticraft.impl.universe.celestialbody.type.SpaceStationType; +import dev.galacticraft.impl.universe.position.config.SpaceStationConfig; import net.fabricmc.fabric.api.util.NbtType; import net.minecraft.core.RegistryAccess; import net.minecraft.nbt.*; @@ -53,19 +53,19 @@ @Mixin(MinecraftServer.class) public abstract class MinecraftServerMixin implements SatelliteAccessor { - @Unique private final Map> satellites = new HashMap<>(); + @Unique private final Map> satellites = new HashMap<>(); @Shadow @Final protected LevelStorageSource.LevelStorageAccess storageSource; @Shadow public abstract RegistryAccess.Frozen registryAccess(); @Override - public @Unmodifiable Map> getSatellites() { + public @Unmodifiable Map> getSatellites() { return ImmutableMap.copyOf(this.satellites); } @Override - public void addSatellite(ResourceLocation id, CelestialBody satellite) { + public void addSatellite(ResourceLocation id, CelestialBody satellite) { this.satellites.put(id, satellite); } @@ -78,8 +78,8 @@ public void removeSatellite(ResourceLocation id) { private void galacticraft_saveSatellites(boolean suppressLogs, boolean bl, boolean bl2, CallbackInfoReturnable cir) { Path path = this.storageSource.getLevelPath(LevelResource.ROOT); ListTag nbt = new ListTag(); - for (Map.Entry> entry : this.satellites.entrySet()) { - CompoundTag compound = (CompoundTag) SatelliteConfig.CODEC.encode(entry.getValue().config(), NbtOps.INSTANCE, new CompoundTag()).get().orThrow(); + for (Map.Entry> entry : this.satellites.entrySet()) { + CompoundTag compound = (CompoundTag) SpaceStationConfig.CODEC.encode(entry.getValue().config(), NbtOps.INSTANCE, new CompoundTag()).get().orThrow(); compound.putString("id", entry.getKey().toString()); nbt.add(compound); } @@ -101,7 +101,7 @@ private void galacticraft_loadSatellites(CallbackInfo ci) { assert nbt != null : "NBT list was null"; for (Tag compound : nbt) { assert compound instanceof CompoundTag : "Not a compound?!"; - this.satellites.put(new ResourceLocation(((CompoundTag) compound).getString("id")), new CelestialBody<>(SatelliteType.INSTANCE, SatelliteConfig.CODEC.decode(RegistryOps.create(NbtOps.INSTANCE, this.registryAccess()), compound).get().orThrow().getFirst())); + this.satellites.put(new ResourceLocation(((CompoundTag) compound).getString("id")), new CelestialBody<>(SpaceStationType.INSTANCE, SpaceStationConfig.CODEC.decode(RegistryOps.create(NbtOps.INSTANCE, this.registryAccess()), compound).get().orThrow().getFirst())); } } catch (Throwable exception) { throw new RuntimeException("Failed to read satellite data!", exception); diff --git a/src/main/java/dev/galacticraft/impl/internal/mixin/PlayerManagerMixin.java b/src/main/java/dev/galacticraft/impl/internal/mixin/PlayerManagerMixin.java index 171b2fbb..fe76e1ce 100644 --- a/src/main/java/dev/galacticraft/impl/internal/mixin/PlayerManagerMixin.java +++ b/src/main/java/dev/galacticraft/impl/internal/mixin/PlayerManagerMixin.java @@ -25,7 +25,7 @@ import dev.galacticraft.api.accessor.GearInventoryProvider; import dev.galacticraft.api.accessor.SatelliteAccessor; import dev.galacticraft.impl.Constant; -import dev.galacticraft.impl.universe.position.config.SatelliteConfig; +import dev.galacticraft.impl.universe.position.config.SpaceStationConfig; import net.fabricmc.fabric.api.networking.v1.PacketByteBufs; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtOps; @@ -66,7 +66,7 @@ private void galacticraft_syncGearInventory(Connection connection, ServerPlayer this.broadcastAll(new ClientboundCustomPayloadPacket(new ResourceLocation(Constant.MOD_ID, "gear_inv_sync"), buf)); ((SatelliteAccessor) this.getServer()).getSatellites().forEach((id, satellite) -> { - CompoundTag compound = (CompoundTag) SatelliteConfig.CODEC.encode(satellite.config(), NbtOps.INSTANCE, new CompoundTag()).get().orThrow(); + CompoundTag compound = (CompoundTag) SpaceStationConfig.CODEC.encode(satellite.config(), NbtOps.INSTANCE, new CompoundTag()).get().orThrow(); connection.send(new ClientboundCustomPayloadPacket(new ResourceLocation(Constant.MOD_ID, "add_satellite"), PacketByteBufs.create().writeResourceLocation(id).writeNbt(compound))); }); } diff --git a/src/main/java/dev/galacticraft/impl/internal/mixin/client/ClientPlayNetworkHandlerMixin.java b/src/main/java/dev/galacticraft/impl/internal/mixin/client/ClientPlayNetworkHandlerMixin.java index 1718baf0..302f4acf 100644 --- a/src/main/java/dev/galacticraft/impl/internal/mixin/client/ClientPlayNetworkHandlerMixin.java +++ b/src/main/java/dev/galacticraft/impl/internal/mixin/client/ClientPlayNetworkHandlerMixin.java @@ -25,8 +25,8 @@ import dev.galacticraft.api.client.accessor.ClientSatelliteAccessor; import dev.galacticraft.api.universe.celestialbody.CelestialBody; import dev.galacticraft.api.universe.celestialbody.satellite.Orbitable; -import dev.galacticraft.impl.universe.celestialbody.type.SatelliteType; -import dev.galacticraft.impl.universe.position.config.SatelliteConfig; +import dev.galacticraft.impl.universe.celestialbody.type.SpaceStationType; +import dev.galacticraft.impl.universe.position.config.SpaceStationConfig; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.multiplayer.ClientLevel; @@ -50,16 +50,16 @@ public abstract class ClientPlayNetworkHandlerMixin implements ClientSatelliteAc @Shadow public abstract RegistryAccess registryAccess(); @Shadow private ClientLevel level; - private final @Unique Map> satellites = new HashMap<>(); + private final @Unique Map> satellites = new HashMap<>(); private final @Unique List listeners = new ArrayList<>(); @Override - public Map> getSatellites() { + public Map> getSatellites() { return this.satellites; } @Override - public void addSatellite(ResourceLocation id, CelestialBody satellite) { + public void addSatellite(ResourceLocation id, CelestialBody satellite) { CelestialBody parent = satellite.parent(this.registryAccess()); ((Orbitable) parent.type()).registerClientWorldHooks(this.registryAccess(), this.level, ResourceKey.create(Registry.DIMENSION_REGISTRY, id), parent.config(), satellite.config()); this.satellites.put(id, satellite); @@ -70,7 +70,7 @@ public void addSatellite(ResourceLocation id, CelestialBody removed = this.satellites.remove(id); + CelestialBody removed = this.satellites.remove(id); for (SatelliteListener listener : this.listeners) { listener.onSatelliteUpdated(removed, false); } diff --git a/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/DecorativePlanet.java b/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/DecorativePlanet.java index 016c5c78..24c2ef9c 100644 --- a/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/DecorativePlanet.java +++ b/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/DecorativePlanet.java @@ -32,7 +32,7 @@ import dev.galacticraft.api.universe.position.CelestialPosition; import dev.galacticraft.impl.internal.client.GCApiDimensionEffects; import dev.galacticraft.impl.universe.celestialbody.config.DecorativePlanetConfig; -import dev.galacticraft.impl.universe.position.config.SatelliteConfig; +import dev.galacticraft.impl.universe.position.config.SpaceStationConfig; import net.fabricmc.fabric.api.client.rendering.v1.DimensionRenderingRegistry; import net.minecraft.core.Registry; import net.minecraft.core.RegistryAccess; @@ -95,7 +95,7 @@ public float gravity(DecorativePlanetConfig config) { } @Override - public void registerClientWorldHooks(RegistryAccess manager, Level world, ResourceKey key, DecorativePlanetConfig config, SatelliteConfig satelliteConfig) { + public void registerClientWorldHooks(RegistryAccess manager, Level world, ResourceKey key, DecorativePlanetConfig config, SpaceStationConfig spaceStationConfig) { DimensionRenderingRegistry.registerCloudRenderer(key, GCApiDimensionEffects.NO_CLOUDS); DimensionRenderingRegistry.registerWeatherRenderer(key, GCApiDimensionEffects.NO_WEATHER); diff --git a/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/PlanetType.java b/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/PlanetType.java index 590c7601..e5913a9c 100644 --- a/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/PlanetType.java +++ b/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/PlanetType.java @@ -25,7 +25,6 @@ import dev.galacticraft.api.gas.GasComposition; import dev.galacticraft.api.satellite.SpaceStationRecipe; import dev.galacticraft.api.universe.celestialbody.CelestialBody; -import dev.galacticraft.api.universe.celestialbody.CelestialBodyConfig; import dev.galacticraft.api.universe.celestialbody.CelestialBodyType; import dev.galacticraft.api.universe.celestialbody.landable.Landable; import dev.galacticraft.api.universe.celestialbody.satellite.Orbitable; @@ -34,7 +33,7 @@ import dev.galacticraft.api.universe.position.CelestialPosition; import dev.galacticraft.impl.internal.client.GCApiDimensionEffects; import dev.galacticraft.impl.universe.celestialbody.config.PlanetConfig; -import dev.galacticraft.impl.universe.position.config.SatelliteConfig; +import dev.galacticraft.impl.universe.position.config.SpaceStationConfig; import net.fabricmc.fabric.api.client.rendering.v1.DimensionRenderingRegistry; import net.minecraft.core.Registry; import net.minecraft.core.RegistryAccess; @@ -112,7 +111,7 @@ public int temperature(RegistryAccess access, long time, PlanetConfig config) { } @Override - public void registerClientWorldHooks(RegistryAccess manager, Level world, ResourceKey key, @NotNull PlanetConfig config, SatelliteConfig satelliteConfig) { + public void registerClientWorldHooks(RegistryAccess manager, Level world, ResourceKey key, @NotNull PlanetConfig config, SpaceStationConfig spaceStationConfig) { DimensionRenderingRegistry.registerCloudRenderer(key, GCApiDimensionEffects.NO_CLOUDS); DimensionRenderingRegistry.registerWeatherRenderer(key, GCApiDimensionEffects.NO_WEATHER); diff --git a/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/SatelliteType.java b/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/SpaceStationType.java similarity index 72% rename from src/main/java/dev/galacticraft/impl/universe/celestialbody/type/SatelliteType.java rename to src/main/java/dev/galacticraft/impl/universe/celestialbody/type/SpaceStationType.java index 0ac857f9..cf9e7558 100644 --- a/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/SatelliteType.java +++ b/src/main/java/dev/galacticraft/impl/universe/celestialbody/type/SpaceStationType.java @@ -36,7 +36,7 @@ import dev.galacticraft.api.universe.display.CelestialDisplay; import dev.galacticraft.api.universe.galaxy.Galaxy; import dev.galacticraft.api.universe.position.CelestialPosition; -import dev.galacticraft.dyndims.api.DynamicLevelRegistry; +import dev.galacticraft.dyndims.api.DynamicDimensionRegistry; import dev.galacticraft.dyndims.api.PlayerRemover; import dev.galacticraft.impl.Constant; import dev.galacticraft.impl.internal.world.gen.SatelliteChunkGenerator; @@ -44,7 +44,7 @@ import dev.galacticraft.impl.universe.display.config.IconCelestialDisplayConfig; import dev.galacticraft.impl.universe.display.type.IconCelestialDisplayType; import dev.galacticraft.impl.universe.position.config.OrbitalCelestialPositionConfig; -import dev.galacticraft.impl.universe.position.config.SatelliteConfig; +import dev.galacticraft.impl.universe.position.config.SpaceStationConfig; import dev.galacticraft.impl.universe.position.type.OrbitalCelestialPositionType; import io.netty.buffer.Unpooled; import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; @@ -65,7 +65,6 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.dimension.DimensionType; -import net.minecraft.world.level.dimension.LevelStem; import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; @@ -76,12 +75,12 @@ import java.util.Objects; import java.util.OptionalLong; -public class SatelliteType extends CelestialBodyType implements Satellite, Landable { - public static final SatelliteType INSTANCE = new SatelliteType(SatelliteConfig.CODEC); +public class SpaceStationType extends CelestialBodyType implements Satellite, Landable { + public static final SpaceStationType INSTANCE = new SpaceStationType(SpaceStationConfig.CODEC); private static final PlayerRemover PLAYER_REMOVER = (server, player) -> { - CelestialBody> satellite = CelestialBody.getByDimension(server.registryAccess(), player.getLevel().dimension()).orElse(null); - if (satellite != null) { - CelestialBody parent = satellite.parent(server.registryAccess()); + CelestialBody> spaceStation = CelestialBody.getByDimension(server.registryAccess(), player.getLevel().dimension()).orElse(null); + if (spaceStation != null) { + CelestialBody parent = spaceStation.parent(server.registryAccess()); if (parent != null) { if (parent.type() instanceof Landable landable) { ServerLevel level = server.getLevel(landable.world(parent.config())); @@ -96,18 +95,18 @@ public class SatelliteType extends CelestialBodyType implements player.setDeltaMovement((overworld.random.nextDouble() - 0.5) * 10.0, overworld.random.nextDouble() * 20.0, (overworld.random.nextDouble() - 0.5) * 10.0); }; private static final GasComposition EMPTY_GAS_COMPOSITION = new GasComposition.Builder().build(); - private static final Component NAME = Component.translatable("ui.galacticraft-api.satellite.name"); - private static final Component DESCRIPTION = Component.translatable("ui.galacticraft-api.satellite.description"); + private static final Component NAME = Component.translatable("ui.galacticraft-api.space_station.name"); + private static final Component DESCRIPTION = Component.translatable("ui.galacticraft-api.space_station.description"); - protected SatelliteType(Codec codec) { + protected SpaceStationType(Codec codec) { super(codec); } @ApiStatus.Experimental - public static CelestialBody registerSpaceStation(@NotNull MinecraftServer server, @NotNull ServerPlayer player, @NotNull CelestialBody parent, @NotNull StructureTemplate structure) { + public static CelestialBody registerSpaceStation(@NotNull MinecraftServer server, @NotNull ServerPlayer player, @NotNull CelestialBody parent, @NotNull StructureTemplate structure) { ResourceLocation identifier = Objects.requireNonNull(server.registryAccess().registryOrThrow(AddonRegistry.CELESTIAL_BODY_KEY).getKey(parent)); ResourceLocation id = new ResourceLocation(identifier.getNamespace(), "sat_" + identifier.getPath() + "_" + player.getGameProfile().getName().toLowerCase(Locale.ROOT)); - DimensionType type = new DimensionType(OptionalLong.empty(), true, false, false, true, 1, false, false, 0, 256, 256, TagKey.create(Registry.BLOCK_REGISTRY, new ResourceLocation(Constant.MOD_ID, "infiniburn_space")), new ResourceLocation(Constant.MOD_ID, "space_sky"), 1, new DimensionType.MonsterSettings(false, false, ConstantInt.of(-1), 0)); + DimensionType type = new DimensionType(OptionalLong.empty(), true, false, false, true, 1, false, false, 0, 256, 256, TagKey.create(Registry.BLOCK_REGISTRY, new ResourceLocation(Constant.MOD_ID, "infiniburn_space")), new ResourceLocation(Constant.MOD_ID, "space_sky"), 1, new DimensionType.MonsterSettings(false, false, ConstantInt.of(0), 0)); SatelliteOwnershipData ownershipData = SatelliteOwnershipData.create(player.getUUID(), player.getScoreboardName(), new LinkedList<>(), false); CelestialPosition position = new CelestialPosition<>(OrbitalCelestialPositionType.INSTANCE, new OrbitalCelestialPositionConfig(1550, 10.0f, 0.0F, false)); CelestialDisplay display = new CelestialDisplay<>(IconCelestialDisplayType.INSTANCE, new IconCelestialDisplayConfig(new ResourceLocation(Constant.MOD_ID, "satellite"), 0, 0, 16, 16, 1)); @@ -119,24 +118,24 @@ public static CelestialBody registerSpaceStation } @ApiStatus.Experimental - public static CelestialBody create(ResourceLocation id, @NotNull MinecraftServer server, CelestialBody parent, CelestialPosition position, CelestialDisplay display, - ChunkGenerator chunkGenerator, DimensionType type, SatelliteOwnershipData ownershipData, String name) { + public static CelestialBody create(ResourceLocation id, @NotNull MinecraftServer server, CelestialBody parent, CelestialPosition position, CelestialDisplay display, + ChunkGenerator chunkGenerator, DimensionType type, SatelliteOwnershipData ownershipData, String name) { if (!(parent.type() instanceof Orbitable)) { throw new IllegalArgumentException("Parent must be orbitable!"); } Constant.LOGGER.debug("Attempting to create a level dynamically ({})", id); - if (!((DynamicLevelRegistry) server).addDynamicDimension(id, chunkGenerator, type)) { + if (!((DynamicDimensionRegistry) server).addDynamicDimension(id, chunkGenerator, type)) { throw new RuntimeException("Failed to create dynamic level!"); } - SatelliteConfig config = new SatelliteConfig(ResourceKey.create(AddonRegistry.CELESTIAL_BODY_KEY, Objects.requireNonNull(server.registryAccess().registryOrThrow(AddonRegistry.CELESTIAL_BODY_KEY).getKey(parent))), parent.galaxy(), position, display, ownershipData, ResourceKey.create(Registry.DIMENSION_REGISTRY, id), EMPTY_GAS_COMPOSITION, 0.0f, parent.type() instanceof Landable ? ((Landable) parent.type()).accessWeight(parent.config()) : 1); + SpaceStationConfig config = new SpaceStationConfig(ResourceKey.create(AddonRegistry.CELESTIAL_BODY_KEY, Objects.requireNonNull(server.registryAccess().registryOrThrow(AddonRegistry.CELESTIAL_BODY_KEY).getKey(parent))), parent.galaxy(), position, display, ownershipData, ResourceKey.create(Registry.DIMENSION_REGISTRY, id), EMPTY_GAS_COMPOSITION, 0.0f, parent.type() instanceof Landable ? ((Landable) parent.type()).accessWeight(parent.config()) : 1); config.customName(Component.translatable(name)); - CelestialBody satellite = INSTANCE.configure(config); + CelestialBody satellite = INSTANCE.configure(config); ((SatelliteAccessor) server).addSatellite(id, satellite); for (ServerPlayer player : server.getPlayerList().getPlayers()) { - CompoundTag compound = (CompoundTag) SatelliteConfig.CODEC.encode(satellite.config(), NbtOps.INSTANCE, new CompoundTag()).get().orThrow(); + CompoundTag compound = (CompoundTag) SpaceStationConfig.CODEC.encode(satellite.config(), NbtOps.INSTANCE, new CompoundTag()).get().orThrow(); ServerPlayNetworking.send(player, new ResourceLocation(Constant.MOD_ID, "add_satellite"), new FriendlyByteBuf(Unpooled.buffer()).writeResourceLocation(id).writeNbt(compound)); } return satellite; @@ -144,7 +143,7 @@ public static CelestialBody create(ResourceLocat @ApiStatus.Experimental public static boolean removeSatellite(@NotNull MinecraftServer server, ResourceLocation id) { - if (((DynamicLevelRegistry) server).removeDynamicDimension(id, PLAYER_REMOVER)) { + if (((DynamicDimensionRegistry) server).removeDynamicDimension(id, PLAYER_REMOVER)) { ((SatelliteAccessor) server).removeSatellite(id); for (ServerPlayer player : server.getPlayerList().getPlayers()) { @@ -157,77 +156,77 @@ public static boolean removeSatellite(@NotNull MinecraftServer server, ResourceL } @Override - public @NotNull Component name(SatelliteConfig config) { + public @NotNull Component name(SpaceStationConfig config) { return NAME; } @Override - public @Nullable CelestialBody parent(@NotNull Registry> registry, @NotNull SatelliteConfig config) { + public @Nullable CelestialBody parent(@NotNull Registry> registry, @NotNull SpaceStationConfig config) { return registry.get(config.parent()); } @Override - public @NotNull ResourceKey galaxy(@NotNull SatelliteConfig config) { + public @NotNull ResourceKey galaxy(@NotNull SpaceStationConfig config) { return config.galaxy(); } @Override - public @NotNull Component description(SatelliteConfig config) { + public @NotNull Component description(SpaceStationConfig config) { return DESCRIPTION; } @Override - public @NotNull CelestialPosition position(@NotNull SatelliteConfig config) { + public @NotNull CelestialPosition position(@NotNull SpaceStationConfig config) { return config.position(); } @Override - public @NotNull CelestialDisplay display(@NotNull SatelliteConfig config) { + public @NotNull CelestialDisplay display(@NotNull SpaceStationConfig config) { return config.display(); } @Override - public SatelliteOwnershipData ownershipData(@NotNull SatelliteConfig config) { + public SatelliteOwnershipData ownershipData(@NotNull SpaceStationConfig config) { return config.ownershipData(); } @Override - public void setCustomName(@NotNull Component text, @NotNull SatelliteConfig config) { + public void setCustomName(@NotNull Component text, @NotNull SpaceStationConfig config) { config.customName(text); } @Override - public @NotNull Component getCustomName(@NotNull SatelliteConfig config) { + public @NotNull Component getCustomName(@NotNull SpaceStationConfig config) { return config.customName(); } @Override - public @NotNull ResourceKey world(@NotNull SatelliteConfig config) { + public @NotNull ResourceKey world(@NotNull SpaceStationConfig config) { return config.world(); } @Override - public @NotNull GasComposition atmosphere(@NotNull SatelliteConfig config) { + public @NotNull GasComposition atmosphere(@NotNull SpaceStationConfig config) { return config.atmosphere(); } @Override - public float gravity(@NotNull SatelliteConfig config) { + public float gravity(@NotNull SpaceStationConfig config) { return config.gravity(); } @Override - public int accessWeight(@NotNull SatelliteConfig config) { + public int accessWeight(@NotNull SpaceStationConfig config) { return config.accessWeight(); } @Override - public CelestialBody configure(SatelliteConfig config) { + public CelestialBody configure(SpaceStationConfig config) { return new CelestialBody<>(this, config); } @Override - public int temperature(RegistryAccess access, long time, SatelliteConfig config) { + public int temperature(RegistryAccess access, long time, SpaceStationConfig config) { return time % 24000 < 12000 ? 121 : -157; //todo: gradual temperature change } } diff --git a/src/main/java/dev/galacticraft/impl/universe/position/config/SatelliteConfig.java b/src/main/java/dev/galacticraft/impl/universe/position/config/SpaceStationConfig.java similarity index 84% rename from src/main/java/dev/galacticraft/impl/universe/position/config/SatelliteConfig.java rename to src/main/java/dev/galacticraft/impl/universe/position/config/SpaceStationConfig.java index f9a49c48..0a4bb853 100644 --- a/src/main/java/dev/galacticraft/impl/universe/position/config/SatelliteConfig.java +++ b/src/main/java/dev/galacticraft/impl/universe/position/config/SpaceStationConfig.java @@ -38,20 +38,19 @@ import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.Level; -import net.minecraft.world.level.dimension.LevelStem; - -public final class SatelliteConfig implements CelestialBodyConfig { - public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( - ResourceLocation.CODEC.fieldOf("parent").xmap(id -> ResourceKey.create(AddonRegistry.CELESTIAL_BODY_KEY, id), ResourceKey::location).forGetter(SatelliteConfig::parent), - ResourceLocation.CODEC.fieldOf("galaxy").xmap(id -> ResourceKey.create(AddonRegistry.GALAXY_KEY, id), ResourceKey::location).forGetter(SatelliteConfig::galaxy), - CelestialPosition.CODEC.fieldOf("position").forGetter(SatelliteConfig::position), - CelestialDisplay.CODEC.fieldOf("display").forGetter(SatelliteConfig::display), - SatelliteOwnershipData.CODEC.fieldOf("ownership_data").forGetter(SatelliteConfig::ownershipData), - ResourceLocation.CODEC.fieldOf("world").xmap(id -> ResourceKey.create(Registry.DIMENSION_REGISTRY, id), ResourceKey::location).forGetter(SatelliteConfig::world), - GasComposition.CODEC.fieldOf("atmosphere").forGetter(SatelliteConfig::atmosphere), - Codec.FLOAT.fieldOf("gravity").forGetter(SatelliteConfig::gravity), - Codec.INT.fieldOf("accessWeight").forGetter(SatelliteConfig::accessWeight) - ).apply(instance, SatelliteConfig::new)); + +public final class SpaceStationConfig implements CelestialBodyConfig { + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( + ResourceLocation.CODEC.fieldOf("parent").xmap(id -> ResourceKey.create(AddonRegistry.CELESTIAL_BODY_KEY, id), ResourceKey::location).forGetter(SpaceStationConfig::parent), + ResourceLocation.CODEC.fieldOf("galaxy").xmap(id -> ResourceKey.create(AddonRegistry.GALAXY_KEY, id), ResourceKey::location).forGetter(SpaceStationConfig::galaxy), + CelestialPosition.CODEC.fieldOf("position").forGetter(SpaceStationConfig::position), + CelestialDisplay.CODEC.fieldOf("display").forGetter(SpaceStationConfig::display), + SatelliteOwnershipData.CODEC.fieldOf("ownership_data").forGetter(SpaceStationConfig::ownershipData), + ResourceLocation.CODEC.fieldOf("world").xmap(id -> ResourceKey.create(Registry.DIMENSION_REGISTRY, id), ResourceKey::location).forGetter(SpaceStationConfig::world), + GasComposition.CODEC.fieldOf("atmosphere").forGetter(SpaceStationConfig::atmosphere), + Codec.FLOAT.fieldOf("gravity").forGetter(SpaceStationConfig::gravity), + Codec.INT.fieldOf("accessWeight").forGetter(SpaceStationConfig::accessWeight) + ).apply(instance, SpaceStationConfig::new)); private final ResourceKey> parent; private final ResourceKey galaxy; @@ -64,7 +63,7 @@ public final class SatelliteConfig implements CelestialBodyConfig { private final int accessWeight; private Component customName = Component.empty(); - public SatelliteConfig(ResourceKey> parent, ResourceKey galaxy, CelestialPosition position, CelestialDisplay display, SatelliteOwnershipData ownershipData, ResourceKey world, GasComposition atmosphere, float gravity, int accessWeight) { + public SpaceStationConfig(ResourceKey> parent, ResourceKey galaxy, CelestialPosition position, CelestialDisplay display, SatelliteOwnershipData ownershipData, ResourceKey world, GasComposition atmosphere, float gravity, int accessWeight) { this.parent = parent; this.galaxy = galaxy; this.position = position; @@ -102,7 +101,7 @@ public SatelliteConfig(ResourceKey> parent, ResourceKey Date: Thu, 11 Aug 2022 21:31:44 -0700 Subject: [PATCH 07/12] fix: generate sky on client thread --- .../client/GCApiDimensionEffects.java | 101 ++++++++++-------- 1 file changed, 54 insertions(+), 47 deletions(-) diff --git a/src/main/java/dev/galacticraft/impl/internal/client/GCApiDimensionEffects.java b/src/main/java/dev/galacticraft/impl/internal/client/GCApiDimensionEffects.java index f731e10f..063967de 100644 --- a/src/main/java/dev/galacticraft/impl/internal/client/GCApiDimensionEffects.java +++ b/src/main/java/dev/galacticraft/impl/internal/client/GCApiDimensionEffects.java @@ -33,6 +33,7 @@ import net.minecraft.client.renderer.GameRenderer; import net.minecraft.util.Mth; import net.minecraft.world.level.Level; +import org.jetbrains.annotations.NotNull; import java.util.Random; @@ -45,67 +46,23 @@ public static DimensionRenderingRegistry.SkyRenderer createSpaceStationRenderer( } private static class SatelliteSkyRenderer implements DimensionRenderingRegistry.SkyRenderer { - private final VertexBuffer starBuffer = new VertexBuffer(); private final float starSize; private final float planetSize; private final CelestialDisplay starDisplay; private final CelestialDisplay planetDisplay; + private VertexBuffer starBuffer = null; public SatelliteSkyRenderer(float starSize, float planetSize, CelestialDisplay starDisplay, CelestialDisplay planetDisplay) { this.starSize = starSize; this.planetSize = planetSize; this.starDisplay = starDisplay; this.planetDisplay = planetDisplay; - final Random random = new Random(27893L); - final BufferBuilder buffer = Tesselator.getInstance().getBuilder(); - RenderSystem.setShader(GameRenderer::getPositionShader); - buffer.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION); - for (int i = 0; i < 12000; ++i) { - double j = random.nextFloat() * 2.0F - 1.0F; - double k = random.nextFloat() * 2.0F - 1.0F; - double l = random.nextFloat() * 2.0F - 1.0F; - double m = 0.15F + random.nextFloat() * 0.1F; - double n = j * j + k * k + l * l; - - if (n < 1.0D && n > 0.01D) { - n = 1.0D / Math.sqrt(n); - j *= n; - k *= n; - l *= n; - double o = j * 100.0D; - double p = k * 100.0D; - double q = l * 100.0D; - double r = Math.atan2(j, l); - double s = Math.sin(r); - double t = Math.cos(r); - double u = Math.atan2(Math.sqrt(j * j + l * l), k); - double v = Math.sin(u); - double w = Math.cos(u); - double x = random.nextDouble() * Math.PI * 2.0D; - double y = Math.sin(x); - double z = Math.cos(x); - - for (int a = 0; a < 4; ++a) { - double b = 0.0D; - double c = ((a & 2) - 1) * m; - double d = ((a + 1 & 2) - 1) * m; - double e = c * z - d * y; - double f = d * z + c * y; - double g = e * v + b * w; - double h = b * v - e * w; - double aa = h * s - f * t; - double ab = f * s + h * t; - buffer.vertex((o + aa) * (i > 6000 ? -1 : 1), (p + g) * (i > 6000 ? -1 : 1), (q + ab) * (i > 6000 ? -1 : 1)).endVertex(); - } - } - } - starBuffer.bind(); - starBuffer.upload(buffer.end()); - VertexBuffer.unbind(); } @Override public void render(WorldRenderContext context) { + if (this.starBuffer == null) this.generateStarBuffer(context); + context.profiler().push("moon_sky_render"); RenderSystem.disableTexture(); RenderSystem.disableBlend(); @@ -156,6 +113,56 @@ public void render(WorldRenderContext context) { context.profiler().pop(); } + private void generateStarBuffer(@NotNull WorldRenderContext context) { + final Random random = new Random(context.world().dimension().location().hashCode()); + final BufferBuilder buffer = Tesselator.getInstance().getBuilder(); + RenderSystem.setShader(GameRenderer::getPositionShader); + buffer.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION); + for (int i = 0; i < 12000; ++i) { + double j = random.nextFloat() * 2.0F - 1.0F; + double k = random.nextFloat() * 2.0F - 1.0F; + double l = random.nextFloat() * 2.0F - 1.0F; + double m = 0.15F + random.nextFloat() * 0.1F; + double n = j * j + k * k + l * l; + + if (n < 1.0D && n > 0.01D) { + n = 1.0D / Math.sqrt(n); + j *= n; + k *= n; + l *= n; + double o = j * 100.0D; + double p = k * 100.0D; + double q = l * 100.0D; + double r = Math.atan2(j, l); + double s = Math.sin(r); + double t = Math.cos(r); + double u = Math.atan2(Math.sqrt(j * j + l * l), k); + double v = Math.sin(u); + double w = Math.cos(u); + double x = random.nextDouble() * Math.PI * 2.0D; + double y = Math.sin(x); + double z = Math.cos(x); + + for (int a = 0; a < 4; ++a) { + double b = 0.0D; + double c = ((a & 2) - 1) * m; + double d = ((a + 1 & 2) - 1) * m; + double e = c * z - d * y; + double f = d * z + c * y; + double g = e * v + b * w; + double h = b * v - e * w; + double aa = h * s - f * t; + double ab = f * s + h * t; + buffer.vertex((o + aa) * (i > 6000 ? -1 : 1), (p + g) * (i > 6000 ? -1 : 1), (q + ab) * (i > 6000 ? -1 : 1)).endVertex(); + } + } + } + this.starBuffer = new VertexBuffer(); + this.starBuffer.bind(); + this.starBuffer.upload(buffer.end()); + VertexBuffer.unbind(); + } + private float getStarBrightness(Level world, float delta) { final float skyAngle = world.getSunAngle(delta); float brightness = 1.0F - (Mth.cos((float) (skyAngle * Math.PI * 2.0D) * 2.0F + 0.25F)); From 4581b1bcf1730ba0ae554efa9117cec08576c560 Mon Sep 17 00:00:00 2001 From: marcus8448 Date: Thu, 11 Aug 2022 21:43:48 -0700 Subject: [PATCH 08/12] change: profile buffer generation --- .../impl/internal/client/GCApiDimensionEffects.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/dev/galacticraft/impl/internal/client/GCApiDimensionEffects.java b/src/main/java/dev/galacticraft/impl/internal/client/GCApiDimensionEffects.java index 063967de..b17d8d77 100644 --- a/src/main/java/dev/galacticraft/impl/internal/client/GCApiDimensionEffects.java +++ b/src/main/java/dev/galacticraft/impl/internal/client/GCApiDimensionEffects.java @@ -61,9 +61,9 @@ public SatelliteSkyRenderer(float starSize, float planetSize, CelestialDisplay Date: Thu, 11 Aug 2022 21:52:34 -0700 Subject: [PATCH 09/12] fix: make gradlew executable --- gradlew | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 gradlew diff --git a/gradlew b/gradlew old mode 100644 new mode 100755 From fdb7ccad3104105b618e1acfdcf0b02c48558946 Mon Sep 17 00:00:00 2001 From: alpha Date: Wed, 17 Aug 2022 18:14:43 -0500 Subject: [PATCH 10/12] feat: use interface injection --- build.gradle.kts | 2 +- src/main/resources/fabric.mod.json | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 43cb3f81..96340e47 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -25,7 +25,7 @@ import java.time.format.DateTimeFormatter plugins { java `maven-publish` - id("fabric-loom") version "0.12-SNAPSHOT" + id("fabric-loom") version "0.13-SNAPSHOT" id("org.cadixdev.licenser") version "0.6.1" id("io.github.juuxel.loom-quiltflower") version("1.7.3") } diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index a80b19ff..01f6d0b8 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -52,6 +52,10 @@ "galacticraft": "*" }, "custom": { + "loom:injected_interfaces": { + "net/minecraft/class_634": ["dev.galacticraft.api.client.accessor.ClientSatelliteAccessor"], + "net/minecraft/class_1140": ["dev.galacticraft.impl.accessor.SoundSystemAccessor"] + }, "modmenu": { "badges": [ "library" ], "parent": "galacticraft" From e128a2a90becf35d6a490b37653b49354b92186e Mon Sep 17 00:00:00 2001 From: alpha Date: Mon, 22 Aug 2022 00:04:24 -0500 Subject: [PATCH 11/12] feat: some more interface injection --- .../api/accessor/GearInventoryProvider.java | 24 ++++++++++++++----- .../impl/accessor/SoundSystemAccessor.java | 4 +++- .../accessor/ClientResearchAccessor.java | 4 +++- .../AbstractClientPlayerEntityMixin.java | 6 ++--- .../mixin/client/MinecraftClientMixin.java | 5 ++-- src/main/resources/fabric.mod.json | 7 +++++- 6 files changed, 35 insertions(+), 15 deletions(-) diff --git a/src/main/java/dev/galacticraft/api/accessor/GearInventoryProvider.java b/src/main/java/dev/galacticraft/api/accessor/GearInventoryProvider.java index 4b3f1cb1..e461a0a3 100644 --- a/src/main/java/dev/galacticraft/api/accessor/GearInventoryProvider.java +++ b/src/main/java/dev/galacticraft/api/accessor/GearInventoryProvider.java @@ -29,15 +29,27 @@ * @author TeamGalacticraft */ public interface GearInventoryProvider { - Container getGearInv(); + default Container getGearInv() { + throw new RuntimeException("This should not happen, you need to override this!"); + } - Container getOxygenTanks(); + default Container getOxygenTanks() { + throw new RuntimeException("This should not happen, you need to override this!"); + } - Container getThermalArmor(); + default Container getThermalArmor() { + throw new RuntimeException("This should not happen, you need to override this!"); + } - Container getAccessories(); + default Container getAccessories() { + throw new RuntimeException("This should not happen, you need to override this!"); + } - void writeGearToNbt(CompoundTag tag); + default void writeGearToNbt(CompoundTag tag) { + throw new RuntimeException("This should not happen, you need to override this!"); + } - void readGearFromNbt(CompoundTag tag); + default void readGearFromNbt(CompoundTag tag) { + throw new RuntimeException("This should not happen, you need to override this!"); + } } diff --git a/src/main/java/dev/galacticraft/impl/accessor/SoundSystemAccessor.java b/src/main/java/dev/galacticraft/impl/accessor/SoundSystemAccessor.java index 3f4f7632..b8a63714 100644 --- a/src/main/java/dev/galacticraft/impl/accessor/SoundSystemAccessor.java +++ b/src/main/java/dev/galacticraft/impl/accessor/SoundSystemAccessor.java @@ -29,5 +29,7 @@ */ @ApiStatus.Internal public interface SoundSystemAccessor { - void updateAtmosphericVolumeMultiplier(float multiplier); + default void updateAtmosphericVolumeMultiplier(float multiplier) { + throw new RuntimeException("This should not happen, you need to override this!"); + } } diff --git a/src/main/java/dev/galacticraft/impl/client/accessor/ClientResearchAccessor.java b/src/main/java/dev/galacticraft/impl/client/accessor/ClientResearchAccessor.java index e7fb07b5..bb94f754 100644 --- a/src/main/java/dev/galacticraft/impl/client/accessor/ClientResearchAccessor.java +++ b/src/main/java/dev/galacticraft/impl/client/accessor/ClientResearchAccessor.java @@ -31,5 +31,7 @@ @Environment(EnvType.CLIENT) @ApiStatus.Internal public interface ClientResearchAccessor extends ResearchAccessor { - void readChanges(FriendlyByteBuf buf); + default void readChanges(FriendlyByteBuf buf) { + throw new RuntimeException("This should not happen, you need to override this!"); + } } diff --git a/src/main/java/dev/galacticraft/impl/internal/mixin/client/AbstractClientPlayerEntityMixin.java b/src/main/java/dev/galacticraft/impl/internal/mixin/client/AbstractClientPlayerEntityMixin.java index c11a816d..40c3166c 100644 --- a/src/main/java/dev/galacticraft/impl/internal/mixin/client/AbstractClientPlayerEntityMixin.java +++ b/src/main/java/dev/galacticraft/impl/internal/mixin/client/AbstractClientPlayerEntityMixin.java @@ -66,16 +66,16 @@ private SimpleContainer galacticraft_createGearInventory() { for (int i = 0; i < inventory.getContainerSize(); i++) { ItemStack stack = inventory.getItem(i); if (stack.getItem() instanceof Accessory accessory && accessory.enablesHearing()) { - ((SoundSystemAccessor) ((SoundManagerAccessor) Minecraft.getInstance().getSoundManager()).getSoundSystem()) + ((SoundManagerAccessor) Minecraft.getInstance().getSoundManager()).getSoundSystem() .updateAtmosphericVolumeMultiplier(1.0f); return; } else { - ((SoundSystemAccessor) ((SoundManagerAccessor) Minecraft.getInstance().getSoundManager()).getSoundSystem()) + ((SoundManagerAccessor) Minecraft.getInstance().getSoundManager()).getSoundSystem() .updateAtmosphericVolumeMultiplier(pressure); } } } else { - ((SoundSystemAccessor) ((SoundManagerAccessor) Minecraft.getInstance().getSoundManager()).getSoundSystem()).updateAtmosphericVolumeMultiplier(pressure); + ((SoundManagerAccessor) Minecraft.getInstance().getSoundManager()).getSoundSystem().updateAtmosphericVolumeMultiplier(pressure); } }); return inv; diff --git a/src/main/java/dev/galacticraft/impl/internal/mixin/client/MinecraftClientMixin.java b/src/main/java/dev/galacticraft/impl/internal/mixin/client/MinecraftClientMixin.java index 4dffd505..875d186b 100644 --- a/src/main/java/dev/galacticraft/impl/internal/mixin/client/MinecraftClientMixin.java +++ b/src/main/java/dev/galacticraft/impl/internal/mixin/client/MinecraftClientMixin.java @@ -22,7 +22,6 @@ package dev.galacticraft.impl.internal.mixin.client; -import dev.galacticraft.impl.accessor.SoundSystemAccessor; import dev.galacticraft.api.universe.celestialbody.CelestialBody; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; @@ -47,9 +46,9 @@ public abstract class MinecraftClientMixin { @Inject(method = "setLevel", at = @At("RETURN")) private void galacticraft_updateSoundMultiplier(ClientLevel world, CallbackInfo ci) { if (world != null) { - ((SoundSystemAccessor) ((SoundManagerAccessor) this.getSoundManager()).getSoundSystem()).updateAtmosphericVolumeMultiplier(CelestialBody.getByDimension(world).map(body -> body.atmosphere().pressure()).orElse(1.0f)); + ((SoundManagerAccessor) this.getSoundManager()).getSoundSystem().updateAtmosphericVolumeMultiplier(CelestialBody.getByDimension(world).map(body -> body.atmosphere().pressure()).orElse(1.0f)); } else { - ((SoundSystemAccessor) ((SoundManagerAccessor) this.getSoundManager()).getSoundSystem()).updateAtmosphericVolumeMultiplier(1.0f); + ((SoundManagerAccessor) this.getSoundManager()).getSoundSystem().updateAtmosphericVolumeMultiplier(1.0f); } } } diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 01f6d0b8..26083edf 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -54,7 +54,12 @@ "custom": { "loom:injected_interfaces": { "net/minecraft/class_634": ["dev.galacticraft.api.client.accessor.ClientSatelliteAccessor"], - "net/minecraft/class_1140": ["dev.galacticraft.impl.accessor.SoundSystemAccessor"] + "net/minecraft/class_742": [ + "dev.galacticraft.api.accessor.GearInventoryProvider", + "dev.galacticraft.impl.client.accessor.ClientResearchAccessor" + ], + "net/minecraft/class_1140": ["dev.galacticraft.impl.accessor.SoundSystemAccessor"], + "net/minecraft/class_1309": ["dev.galacticraft.api.accessor.GearInventoryProvider"] }, "modmenu": { "badges": [ "library" ], From d2fcf3bc3b29bdeb1e5e7d3f832c2f0efc0fbc55 Mon Sep 17 00:00:00 2001 From: alpha Date: Mon, 22 Aug 2022 00:12:11 -0500 Subject: [PATCH 12/12] fix: make RocketDataImpl use lowercase keys --- build.gradle.kts | 18 +---------- .../impl/rocket/RocketDataImpl.java | 32 +++++++++---------- 2 files changed, 17 insertions(+), 33 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 96340e47..7e4dcd08 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -112,25 +112,9 @@ dependencies { mappings(loom.officialMojangMappings()) modImplementation("net.fabricmc:fabric-loader:$loader") - listOf( - "fabric-api-base", - "fabric-api-lookup-api-v1", - "fabric-command-api-v2", - "fabric-convention-tags-v1", - "fabric-gametest-api-v1", - "fabric-lifecycle-events-v1", - "fabric-networking-api-v1", - "fabric-registry-sync-v0", - "fabric-renderer-api-v1", - "fabric-resource-loader-v0", - "fabric-transfer-api-v1" - ).forEach { - modImplementation(fabricApi.module(it, fabric)) - } - modImplementation("dev.galacticraft:MachineLib:$machinelib") modImplementation("dev.galacticraft:dyndims:$dyndims") - modRuntimeOnly("net.fabricmc.fabric-api:fabric-api:$fabric") + modImplementation("net.fabricmc.fabric-api:fabric-api:$fabric") } tasks.processResources { diff --git a/src/main/java/dev/galacticraft/impl/rocket/RocketDataImpl.java b/src/main/java/dev/galacticraft/impl/rocket/RocketDataImpl.java index f05a1d3a..8875b227 100644 --- a/src/main/java/dev/galacticraft/impl/rocket/RocketDataImpl.java +++ b/src/main/java/dev/galacticraft/impl/rocket/RocketDataImpl.java @@ -46,15 +46,15 @@ public record RocketDataImpl(int color, ResourceLocation cone, ResourceLocation public static final RocketDataImpl EMPTY = new RocketDataImpl(0xffffffff, new ResourceLocation(Constant.MOD_ID, "invalid"), new ResourceLocation(Constant.MOD_ID, "invalid"), new ResourceLocation(Constant.MOD_ID, "invalid"), new ResourceLocation(Constant.MOD_ID, "invalid"), new ResourceLocation(Constant.MOD_ID, "invalid"), new ResourceLocation(Constant.MOD_ID, "invalid")); public static RocketDataImpl fromNbt(@NotNull CompoundTag nbt) { - if (nbt.getBoolean("Empty")) return empty(); + if (nbt.getBoolean("empty")) return empty(); return new RocketDataImpl( - nbt.getInt("Color"), - new ResourceLocation(nbt.getString("Cone")), - new ResourceLocation(nbt.getString("Body")), - new ResourceLocation(nbt.getString("Fin")), - new ResourceLocation(nbt.getString("Booster")), - new ResourceLocation(nbt.getString("Bottom")), - new ResourceLocation(nbt.getString("Upgrade")) + nbt.getInt("color"), + new ResourceLocation(nbt.getString("cone")), + new ResourceLocation(nbt.getString("body")), + new ResourceLocation(nbt.getString("fin")), + new ResourceLocation(nbt.getString("booster")), + new ResourceLocation(nbt.getString("bottom")), + new ResourceLocation(nbt.getString("upgrade")) ); } @@ -66,16 +66,16 @@ public static RocketDataImpl empty() { @Override public @NotNull CompoundTag toNbt(@NotNull CompoundTag nbt) { if (this.isEmpty()) { - nbt.putBoolean("Empty", true); + nbt.putBoolean("empty", true); return nbt; } - nbt.putInt("Color", this.color()); - nbt.putString("Cone", this.cone().toString()); - nbt.putString("Body", this.body().toString()); - nbt.putString("Fin", this.fin().toString()); - nbt.putString("Booster", this.booster().toString()); - nbt.putString("Bottom", this.bottom().toString()); - nbt.putString("Upgrade", this.upgrade().toString()); + nbt.putInt("color", this.color()); + nbt.putString("cone", this.cone().toString()); + nbt.putString("body", this.body().toString()); + nbt.putString("fin", this.fin().toString()); + nbt.putString("booster", this.booster().toString()); + nbt.putString("bottom", this.bottom().toString()); + nbt.putString("upgrade", this.upgrade().toString()); return nbt; }