From c38af011a60f4e78715fae6e17afdd775cd330fb Mon Sep 17 00:00:00 2001 From: iceBear67 Date: Fri, 19 Sep 2025 12:06:35 +0800 Subject: [PATCH] fix(LitematicConverter): Properties can be absent if it's empty --- gradle.properties | 2 +- .../mixin/common/fixes/ProjectileEntityMixin.java | 7 ++++++- .../java/io/ib67/sfcraft/module/WelcomeModule.java | 10 ++++++---- .../sfcraft/util/litematic/LitematicConverter.java | 5 +++-- 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/gradle.properties b/gradle.properties index 43e4f0d..d08d7c3 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,6 +6,6 @@ loader_version=0.16.14 # Fabric API fabric_version=0.127.0+1.21.6 # Mod Properties -mod_version=1.1 +mod_version=1.2 maven_group=io.ib67 archives_base_name=sfcraft diff --git a/src/main/java/io/ib67/sfcraft/mixin/common/fixes/ProjectileEntityMixin.java b/src/main/java/io/ib67/sfcraft/mixin/common/fixes/ProjectileEntityMixin.java index 4eb8805..2f71811 100644 --- a/src/main/java/io/ib67/sfcraft/mixin/common/fixes/ProjectileEntityMixin.java +++ b/src/main/java/io/ib67/sfcraft/mixin/common/fixes/ProjectileEntityMixin.java @@ -25,11 +25,16 @@ public class ProjectileEntityMixin { @Unique private boolean isPlayer; - @Inject(at = @At("HEAD"), method = "setOwner") + @Inject(at = @At("HEAD"), method = "setOwner(Lnet/minecraft/entity/Entity;)V") private void setOwner(@Nullable Entity owner, CallbackInfo ci) { isPlayer = owner instanceof PlayerEntity; } + @Inject(at=@At("HEAD"), method = "setOwner(Lnet/minecraft/entity/LazyEntityReference;)V") + private void setOwner(@Nullable LazyEntityReference owner, CallbackInfo ci) { + isPlayer = LazyEntityReference.resolve(owner, $().getWorld(), Entity.class) instanceof PlayerEntity; + } + /** * @reason Implement the logic correctly. * @author icybear diff --git a/src/main/java/io/ib67/sfcraft/module/WelcomeModule.java b/src/main/java/io/ib67/sfcraft/module/WelcomeModule.java index 8ec4e7e..0170ea4 100644 --- a/src/main/java/io/ib67/sfcraft/module/WelcomeModule.java +++ b/src/main/java/io/ib67/sfcraft/module/WelcomeModule.java @@ -55,9 +55,11 @@ public class WelcomeModule extends ServerModule { Files.createDirectory(announcementDir); } announcements = new HashMap<>(); - for (var ele : Files.list(announcementDir).toList()) { - if (!ele.endsWith("txt")) continue; - announcements.put("sfwelcome_"+ele.getFileName().toString().replace(".txt", ""), Files.readString(ele).replaceAll("&", "§")); + try(var lines = Files.list(announcementDir)){ + for (var ele : lines.toList()) { + if (!ele.toString().endsWith("txt")) continue; + announcements.put("sfwelcome_"+ele.getFileName().toString().replace(".txt", ""), Files.readString(ele).replaceAll("&", "§")); + } } } @@ -72,7 +74,7 @@ public class WelcomeModule extends ServerModule { for (String s : announcements.keySet()) { if (!player.getCommandTags().contains(s)) { player.addCommandTag(s); - s.lines().map(Text::of).forEach(player::sendMessage); + announcements.get(s).lines().map(Text::of).forEach(player::sendMessage); } } } diff --git a/src/main/java/io/ib67/sfcraft/util/litematic/LitematicConverter.java b/src/main/java/io/ib67/sfcraft/util/litematic/LitematicConverter.java index 2f3c3a6..53c898e 100644 --- a/src/main/java/io/ib67/sfcraft/util/litematic/LitematicConverter.java +++ b/src/main/java/io/ib67/sfcraft/util/litematic/LitematicConverter.java @@ -119,8 +119,9 @@ public class LitematicConverter implements AutoCloseable { for (int i = 0; i < paletteNbt.size(); i++) { var entry = (NbtCompound) paletteNbt.get(i); var name = new StringBuilder(entry.getString("Name").orElseThrow(() -> new IllegalStateException("Name not found"))); - var properties = entry.getCompound("Properties").orElseThrow(() -> new IllegalStateException("Properties not found")); - if (!properties.isEmpty()) { + var _properties = entry.getCompound("Properties"); + if (_properties.isPresent()) { + var properties = _properties.get(); name.append("["); var props = new ArrayList(); for (String key : properties.getKeys()) {