Skip to content

Commit 0317cde

Browse files
committed
ref!: structure loader, management and conversion
1 parent 670324f commit 0317cde

File tree

8 files changed

+373
-116
lines changed

8 files changed

+373
-116
lines changed
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package com.lambda.mixin.world;
2+
3+
import com.llamalad7.mixinextras.injector.ModifyReturnValue;
4+
import net.minecraft.block.Block;
5+
import net.minecraft.nbt.NbtCompound;
6+
import net.minecraft.registry.RegistryEntryLookup;
7+
import net.minecraft.structure.StructureTemplate;
8+
import org.spongepowered.asm.mixin.Mixin;
9+
import org.spongepowered.asm.mixin.Shadow;
10+
import org.spongepowered.asm.mixin.injection.At;
11+
import org.spongepowered.asm.mixin.injection.Inject;
12+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
13+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
14+
15+
import java.util.Objects;
16+
17+
@Mixin(StructureTemplate.class)
18+
public class StructureTemplateMixin {
19+
@Shadow
20+
private String author;
21+
22+
@ModifyReturnValue(method = "getAuthor()Ljava/lang/String;", at = @At("RETURN"))
23+
public String getAuthor(String original) {
24+
return Objects.equals(original, "?") || Objects.equals(original, "") ? "Unknown" : original;
25+
}
26+
27+
@Inject(method = "writeNbt(Lnet/minecraft/nbt/NbtCompound;)Lnet/minecraft/nbt/NbtCompound;", at = @At("TAIL"))
28+
public void writeNbt(NbtCompound nbt, CallbackInfoReturnable<NbtCompound> cir) {
29+
nbt.putString("author", author);
30+
}
31+
32+
@Inject(method = "readNbt(Lnet/minecraft/registry/RegistryEntryLookup;Lnet/minecraft/nbt/NbtCompound;)V", at = @At("TAIL"))
33+
public void readNbt(RegistryEntryLookup<Block> blockLookup, NbtCompound nbt, CallbackInfo ci) {
34+
author = nbt.getString("author");
35+
}
36+
}

common/src/main/kotlin/com/lambda/command/commands/BuildCommand.kt

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,16 @@ package com.lambda.command.commands
22

33
import com.lambda.brigadier.CommandResult
44
import com.lambda.brigadier.argument.boolean
5-
import com.lambda.brigadier.argument.identifier
65
import com.lambda.brigadier.argument.literal
6+
import com.lambda.brigadier.argument.string
77
import com.lambda.brigadier.argument.value
88
import com.lambda.brigadier.executeWithResult
99
import com.lambda.brigadier.optional
1010
import com.lambda.brigadier.required
1111
import com.lambda.command.LambdaCommand
12-
import com.lambda.interaction.construction.blueprint.DynamicBlueprint.Companion.toBlueprint
13-
import com.lambda.interaction.construction.blueprint.StaticBlueprint.Companion.toBlueprint
1412
import com.lambda.interaction.construction.StructureRegistry
1513
import com.lambda.interaction.construction.blueprint.Blueprint.Companion.toStructure
14+
import com.lambda.interaction.construction.blueprint.StaticBlueprint.Companion.toBlueprint
1615
import com.lambda.task.tasks.BuildTask.Companion.build
1716
import com.lambda.threading.runSafe
1817
import com.lambda.util.Communication.info
@@ -26,10 +25,10 @@ object BuildCommand : LambdaCommand(
2625
) {
2726
override fun CommandBuilder.create() {
2827
required(literal("place")) {
29-
required(identifier("structure")) { structure ->
28+
required(string("structure")) { structure ->
3029
suggests { _, builder ->
31-
StructureRegistry.streamTemplates()
32-
.forEach { builder.suggest(it.path) }
30+
StructureRegistry
31+
.forEach { key, _ -> builder.suggest(key) }
3332

3433
builder.buildFuture()
3534
}
@@ -38,19 +37,21 @@ object BuildCommand : LambdaCommand(
3837
val id = structure().value()
3938
val path = if (pathing != null) pathing().value() else false
4039
runSafe<Unit> {
41-
StructureRegistry.loadStructure(id)?.let { template ->
42-
info("Building structure ${id.path} with dimensions ${template.size.toShortString()} by ${template.author}")
43-
template.toStructure()
44-
.move(player.blockPos)
45-
.toBlueprint()
46-
.build(pathing = path)
47-
.start(null)
40+
StructureRegistry
41+
.loadStructureByName(id)
42+
?.let { template ->
43+
info("Building structure $id with dimensions ${template.size.toShortString()} created by ${template.author}")
44+
template.toStructure()
45+
.move(player.blockPos)
46+
.toBlueprint()
47+
.build(pathing = path)
48+
.start(null)
4849

49-
return@executeWithResult CommandResult.success()
50-
}
50+
return@executeWithResult CommandResult.success()
51+
}
5152
}
5253

53-
CommandResult.failure("Structure ${id.path} not found")
54+
CommandResult.failure("Structure $id not found")
5455
}
5556
}
5657
}

common/src/main/kotlin/com/lambda/core/Loader.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import com.lambda.gui.GuiConfigurable
1010
import com.lambda.gui.HudGuiConfigurable
1111
import com.lambda.interaction.PlayerPacketManager
1212
import com.lambda.interaction.RotationManager
13+
import com.lambda.interaction.construction.StructureRegistry
1314
import com.lambda.interaction.material.ContainerManager
1415
import com.lambda.module.ModuleRegistry
1516
import com.lambda.sound.SoundRegistry
@@ -38,6 +39,7 @@ object Loader {
3839
TimerManager,
3940
PingManager,
4041
ContainerManager,
42+
StructureRegistry
4143
)
4244

4345
fun initialize() {

0 commit comments

Comments
 (0)