fix(LitematicConverter): Properties can be absent if it's empty

This commit is contained in:
iceBear67 committed 2025-09-19 12:06:35 +08:00
1 parent 3b552a678d
commit c38af011a6
4 files changed
+16 -8

No files matched your search

+1 -1
View File
@@ -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
@@ -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<Entity> owner, CallbackInfo ci) {
isPlayer = LazyEntityReference.resolve(owner, $().getWorld(), Entity.class) instanceof PlayerEntity;
}
/**
* @reason Implement the logic correctly.
* @author icybear
@@ -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);
}
}
}
@@ -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<String>();
for (String key : properties.getKeys()) {