Skip to content

Commit 7beff69

Browse files
author
yitzy299
committed
Add source world option to portal command
Signed-off-by: yitzy299 <yitzy299@users.noreply.github.com>
1 parent 0bde8df commit 7beff69

8 files changed

Lines changed: 60 additions & 21 deletions

File tree

src/main/kotlin/net/quiltservertools/interdimensional/command/CreateCommand.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package net.quiltservertools.interdimensional.command
22

3-
import com.github.quiltservertools.interdimensional.command.argument.ServerDimensionArgument
3+
import net.quiltservertools.interdimensional.command.argument.ServerDimensionArgument
44
import net.quiltservertools.interdimensional.command.InterdimensionalCommand.info
55
import net.quiltservertools.interdimensional.command.InterdimensionalCommand.success
66
import net.quiltservertools.interdimensional.command.argument.DimensionOverrideArgumentType
@@ -10,7 +10,6 @@ import com.mojang.brigadier.arguments.StringArgumentType
1010
import com.mojang.brigadier.context.CommandContext
1111
import com.mojang.brigadier.tree.LiteralCommandNode
1212
import me.lucko.fabric.api.permissions.v0.Permissions
13-
import net.minecraft.command.argument.DimensionArgumentType
1413
import net.minecraft.command.argument.IdentifierArgumentType
1514
import net.minecraft.server.command.CommandManager
1615
import net.minecraft.server.command.ServerCommandSource

src/main/kotlin/net/quiltservertools/interdimensional/command/GeneratorCommand.kt

Lines changed: 31 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,36 @@
11
package net.quiltservertools.interdimensional.command
22

3-
import net.quiltservertools.interdimensional.command.argument.GeneratorArgumentType
4-
import net.quiltservertools.interdimensional.customGenerator
5-
import net.quiltservertools.interdimensional.mixin.ChunkGeneratorAccessor
3+
import com.google.common.collect.ImmutableList
64
import com.mojang.brigadier.arguments.StringArgumentType
75
import com.mojang.brigadier.context.CommandContext
86
import com.mojang.brigadier.exceptions.CommandSyntaxException
97
import com.mojang.brigadier.tree.LiteralCommandNode
8+
import com.mojang.datafixers.util.Function3
9+
import com.mojang.datafixers.util.Pair
1010
import me.lucko.fabric.api.permissions.v0.Permissions
1111
import net.minecraft.server.command.CommandManager
1212
import net.minecraft.server.command.ServerCommandSource
1313
import net.minecraft.util.Identifier
1414
import net.minecraft.util.registry.Registry
15-
import net.minecraft.world.biome.source.*
16-
import net.minecraft.world.gen.chunk.*
15+
import net.minecraft.world.biome.Biome
16+
import net.minecraft.world.biome.Biome.MixedNoisePoint
17+
import net.minecraft.world.biome.BiomeKeys
18+
import net.minecraft.world.biome.source.FixedBiomeSource
19+
import net.minecraft.world.biome.source.MultiNoiseBiomeSource
20+
import net.minecraft.world.biome.source.MultiNoiseBiomeSource.Preset
21+
import net.minecraft.world.biome.source.TheEndBiomeSource
22+
import net.minecraft.world.biome.source.VanillaLayeredBiomeSource
23+
import net.minecraft.world.gen.chunk.FlatChunkGenerator
24+
import net.minecraft.world.gen.chunk.FlatChunkGeneratorConfig
25+
import net.minecraft.world.gen.chunk.StructureConfig
26+
import net.minecraft.world.gen.chunk.StructuresConfig
1727
import net.minecraft.world.gen.feature.StructureFeature
28+
import net.quiltservertools.interdimensional.command.argument.GeneratorArgumentType
29+
import net.quiltservertools.interdimensional.command.argument.ServerDimensionArgument
30+
import net.quiltservertools.interdimensional.customGenerator
31+
import net.quiltservertools.interdimensional.mixin.ChunkGeneratorAccessor
1832
import java.util.*
33+
import java.util.function.Supplier
1934

2035
object GeneratorCommand : Command {
2136
override fun register(): LiteralCommandNode<ServerCommandSource> {
@@ -25,15 +40,17 @@ object GeneratorCommand : Command {
2540
.suggests(GeneratorArgumentType())
2641
.executes { ctx: CommandContext<ServerCommandSource> ->
2742
updateGenerator(
28-
ctx.source,
43+
ctx,
2944
GeneratorArgumentType().rawProperties(StringArgumentType.getString(ctx, "args"))
3045
)
3146
})
3247
.build()
3348
}
3449

3550
@Throws(CommandSyntaxException::class)
36-
private fun updateGenerator(scs: ServerCommandSource, propertyMap: HashMap<String, Any>): Int {
51+
private fun updateGenerator(ctx: CommandContext<ServerCommandSource>, propertyMap: HashMap<String, Any>): Int {
52+
val scs = ctx.source
53+
3754
var generator = scs.player.customGenerator
3855
if (generator == null) generator = scs.world.chunkManager.chunkGenerator
3956
var seed = scs.world.seed
@@ -57,8 +74,13 @@ object GeneratorCommand : Command {
5774
VanillaLayeredBiomeSource(biomeSeed, false, largeBiomes, scs.registryManager.get(Registry.BIOME_KEY))
5875
scs.sendFeedback(InterdimensionalCommand.info("Set biome source to Vanilla Layered"), false)
5976
} else if (propertyMap.containsKey("multi_noise")) {
60-
biomeSource = MultiNoiseBiomeSource.method_35242(scs.registryManager.get(Registry.BIOME_KEY), biomeSeed)
61-
scs.sendFeedback(InterdimensionalCommand.error("This option is not supported yet"), false)
77+
val worldLike = ServerDimensionArgument.get(ctx, "noise_like")
78+
biomeSource = if (worldLike.chunkManager.chunkGenerator.biomeSource is MultiNoiseBiomeSource) {
79+
worldLike.chunkManager.chunkGenerator.biomeSource
80+
} else {
81+
MultiNoiseBiomeSource.method_35242(worldLike.registryManager.get(Registry.BIOME_KEY), biomeSeed)
82+
}
83+
6284
} else if (propertyMap.containsKey("the_end_biome_source")) {
6385
biomeSource = TheEndBiomeSource(scs.registryManager.get(Registry.BIOME_KEY), biomeSeed)
6486
scs.sendFeedback(InterdimensionalCommand.info("Set biome source to End Biome Source"), false)

src/main/kotlin/net/quiltservertools/interdimensional/command/PortalCommand.kt

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import net.minecraft.command.argument.DimensionArgumentType
1515
import net.minecraft.server.command.CommandManager.argument
1616
import net.minecraft.server.command.CommandManager.literal
1717
import net.minecraft.server.command.ServerCommandSource
18+
import net.minecraft.server.world.ServerWorld
1819
import net.minecraft.util.Formatting
1920
import net.minecraft.util.Identifier
2021
import net.quiltservertools.interdimensional.command.argument.PortalOptionsArgumentType
@@ -85,6 +86,12 @@ object PortalCommand : Command {
8586
val ignitionSource = PortalIgnitionSource.FIRE
8687

8788

89+
val sourceWorld = if (props.containsKey("source_world")) {
90+
props["source_world"] as Identifier
91+
} else {
92+
source.server.overworld.registryKey.value
93+
}
94+
8895
if (props.containsKey("color")) {
8996
val color = props["color"] as Formatting
9097
val red: Int = color.colorIndex shr 16 and 0xFF
@@ -95,6 +102,7 @@ object PortalCommand : Command {
95102
name,
96103
blockState.blockState.block,
97104
destination,
105+
sourceWorld,
98106
red.toByte(),
99107
green.toByte(),
100108
blue.toByte(),
@@ -108,6 +116,7 @@ object PortalCommand : Command {
108116
name,
109117
blockState.blockState.block,
110118
destination,
119+
sourceWorld,
111120
0,
112121
0,
113122
0,
@@ -117,7 +126,7 @@ object PortalCommand : Command {
117126
)
118127
}
119128

120-
source.sendFeedback(success("Created portal to $destination with frame ${blockState.blockState.block}"), false)
129+
source.sendFeedback(success("Created portal from $sourceWorld to $destination with frame ${blockState.blockState.block}"), false)
121130

122131
return 1
123132
}

src/main/kotlin/net/quiltservertools/interdimensional/command/argument/GeneratorArgumentType.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ class GeneratorArgumentType : AbstractInterdimensionalArgumentType() {
1515
criteriumSuggestors["single_biome"] =
1616
Suggestor(IdentifierArgumentType.identifier(), SuggestionProviders.ALL_BIOMES)
1717
criteriumSuggestors["vanilla_layered"] = Suggestor(BoolArgumentType.bool())
18-
//TODO make multinoise biome list
19-
criteriumSuggestors["multi_noise"] = Suggestor(BoolArgumentType.bool())
18+
19+
criteriumSuggestors["multi_noise"] = Suggestor(ServerDimensionArgument.dimension("noise_like").type)
2020
criteriumSuggestors["the_end_biome_source"] = Suggestor(BoolArgumentType.bool())
2121

2222
//Options

src/main/kotlin/net/quiltservertools/interdimensional/command/argument/PortalOptionsArgumentType.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,13 @@ package net.quiltservertools.interdimensional.command.argument
22

33
import com.mojang.brigadier.arguments.BoolArgumentType
44
import net.minecraft.command.argument.ColorArgumentType
5+
import net.minecraft.command.argument.DimensionArgumentType
56

67
class PortalOptionsArgumentType : AbstractInterdimensionalArgumentType() {
78
init {
89
criteriumSuggestors["color"] = Suggestor(ColorArgumentType.color())
9-
criteriumSuggestors["flat"] = Suggestor(BoolArgumentType.bool())
10+
//fixme criteriumSuggestors["flat"] = Suggestor(BoolArgumentType.bool())
11+
criteriumSuggestors["source_world"] = Suggestor(DimensionArgumentType.dimension())
1012

1113
criteria = criteriumSuggestors.keys
1214
}

src/main/kotlin/net/quiltservertools/interdimensional/command/argument/ServerDimensionArgument.kt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,14 @@
1-
package com.github.quiltservertools.interdimensional.command.argument
1+
package net.quiltservertools.interdimensional.command.argument
22

33
import com.mojang.brigadier.builder.RequiredArgumentBuilder
44
import com.mojang.brigadier.context.CommandContext
5-
import com.mojang.brigadier.suggestion.SuggestionsBuilder
65
import net.minecraft.command.CommandSource
76
import net.minecraft.command.argument.DimensionArgumentType
87
import net.minecraft.command.argument.IdentifierArgumentType
98
import net.minecraft.server.command.CommandManager
109
import net.minecraft.server.command.ServerCommandSource
1110
import net.minecraft.server.world.ServerWorld
1211
import net.minecraft.util.Identifier
13-
import net.minecraft.world.dimension.DimensionOptions
14-
import net.minecraft.world.gen.GeneratorOptions
1512

1613

1714
object ServerDimensionArgument {

src/main/kotlin/net/quiltservertools/interdimensional/world/Portal.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@ import net.quiltservertools.interdimensional.portals.portal.PortalIgnitionSource
44
import net.minecraft.block.Block
55
import net.minecraft.util.Identifier
66

7-
data class Portal(val name: String, val frameBlock: Block, val destination: Identifier, val r: Byte, val g: Byte, val b: Byte, val horizontal: Boolean, val source: PortalIgnitionSource)
7+
data class Portal(val name: String, val frameBlock: Block, val destination: Identifier, val sourceWorld: Identifier, val r: Byte, val g: Byte, val b: Byte, val horizontal: Boolean, val source: PortalIgnitionSource)

src/main/kotlin/net/quiltservertools/interdimensional/world/PortalManager.kt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,11 @@ object PortalManager {
2121
val g = jsonObject.get("g").asByte
2222
val b = jsonObject.get("b").asByte
2323
val flat = jsonObject.get("horizontal").asBoolean
24+
val sourceWorld = if (!jsonObject.has("source_world")) {
25+
Identifier("minecraft", "overworld")
26+
} else {
27+
Identifier(jsonObject.get("source_world").asString)
28+
}
2429

2530
// Source parsing
2631
val sourceObject = jsonObject.get("source").asJsonObject
@@ -35,7 +40,7 @@ object PortalManager {
3540
PortalIgnitionSource.FIRE
3641
}
3742

38-
val portal = Portal(name, frameBlock, destination, r, g, b, flat, ignitionSource)
43+
val portal = Portal(name, frameBlock, destination, sourceWorld, r, g, b, flat, ignitionSource)
3944
addPortal(portal)
4045
}
4146
}
@@ -51,6 +56,7 @@ object PortalManager {
5156
jsonObject.addProperty("g", portal.g)
5257
jsonObject.addProperty("b", portal.b)
5358
jsonObject.addProperty("horizontal", portal.horizontal)
59+
jsonObject.addProperty("source_world", portal.sourceWorld.toString())
5460

5561
val sourceObject = JsonObject()
5662

@@ -77,11 +83,15 @@ object PortalManager {
7783

7884
fun addPortal(portal: Portal) {
7985
val builder = CustomPortalBuilder.beginPortal()
86+
8087
builder.frameBlock(portal.frameBlock)
8188
builder.ignitionSource(portal.source)
89+
builder.returnDim(portal.sourceWorld, true)
8290
if (portal.horizontal) builder.flatPortal()
8391
builder.tintColor(portal.r.toInt(), portal.g.toInt(), portal.b.toInt())
8492
builder.destDimID(portal.destination)
93+
94+
8595
builder.registerPortal()
8696
portals.add(portal)
8797
}

0 commit comments

Comments
 (0)