From 0b252c915d15008dc22bb575217415782aec928e Mon Sep 17 00:00:00 2001 From: Fourmisain <8464472+Fourmisain@users.noreply.github.com> Date: Wed, 2 Jun 2021 17:57:45 +0200 Subject: [PATCH 1/3] fix some (suppressed) warnings --- .../villagernames/VillagerNames.java | 24 ++++++++++--------- .../command/VillagerNameCommand.java | 10 ++++---- .../FormattingSuggestionProvider.java | 1 - .../integration/ModMenuIntegration.java | 2 +- .../mixin/VillagerBreedTaskMixin.java | 2 +- .../villagernames/util/NamesLoader.java | 19 +++++++-------- 6 files changed, 29 insertions(+), 29 deletions(-) diff --git a/src/main/java/io/github/overlordsiii/villagernames/VillagerNames.java b/src/main/java/io/github/overlordsiii/villagernames/VillagerNames.java index ff7e51a..6cc9590 100644 --- a/src/main/java/io/github/overlordsiii/villagernames/VillagerNames.java +++ b/src/main/java/io/github/overlordsiii/villagernames/VillagerNames.java @@ -5,7 +5,7 @@ import io.github.overlordsiii.villagernames.util.NamesLoader; import io.github.overlordsiii.villagernames.util.VillagerUtil; import me.sargunvohra.mcmods.autoconfig1u.AutoConfig; -import me.sargunvohra.mcmods.autoconfig1u.ConfigManager; +import me.sargunvohra.mcmods.autoconfig1u.ConfigHolder; import me.sargunvohra.mcmods.autoconfig1u.serializer.GsonConfigSerializer; import me.sargunvohra.mcmods.autoconfig1u.serializer.PartitioningSerializer; import net.fabricmc.api.ModInitializer; @@ -18,34 +18,36 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -@SuppressWarnings({"UnstableApiUsage", "unused"}) public class VillagerNames implements ModInitializer { - public static final ConfigManager CONFIG_MANAGER; + public static final ConfigHolder CONFIG_HOLDER; public static final VillagerConfig CONFIG; public static final Logger LOGGER = LogManager.getLogger(VillagerNames.class); + static { - CONFIG_MANAGER = (ConfigManager) AutoConfig.register(VillagerConfig.class, PartitioningSerializer.wrap(GsonConfigSerializer::new)); - CONFIG = AutoConfig.getConfigHolder(VillagerConfig.class).getConfig(); + CONFIG_HOLDER = AutoConfig.register(VillagerConfig.class, PartitioningSerializer.wrap(GsonConfigSerializer::new)); + CONFIG = CONFIG_HOLDER.getConfig(); } + @Override public void onInitialize() { NamesLoader.load(); + CommandRegistrationCallback.EVENT.register((commandDispatcher, dedicated) -> { VillagerNameCommand.register(commandDispatcher); if (!dedicated){ StopCommand.register(commandDispatcher); } }); + ServerEntityEvents.ENTITY_LOAD.register((entity, serverWorld) -> { - if (entity instanceof VillagerEntity){ - VillagerUtil.createVillagerNames((VillagerEntity)entity); - VillagerUtil.generalVillagerUpdate((VillagerEntity)entity); - } - else if (entity instanceof IronGolemEntity){ + if (entity instanceof VillagerEntity) { + VillagerUtil.createVillagerNames((VillagerEntity)entity); + VillagerUtil.generalVillagerUpdate((VillagerEntity)entity); + } else if (entity instanceof IronGolemEntity) { VillagerUtil.loadGolemNames((IronGolemEntity)entity); VillagerUtil.updateGolemNames((IronGolemEntity)entity); - } else if (entity instanceof WanderingTraderEntity){ + } else if (entity instanceof WanderingTraderEntity) { VillagerUtil.createWanderingTraderNames((WanderingTraderEntity)entity); VillagerUtil.updateWanderingTraderNames((WanderingTraderEntity)entity); } diff --git a/src/main/java/io/github/overlordsiii/villagernames/command/VillagerNameCommand.java b/src/main/java/io/github/overlordsiii/villagernames/command/VillagerNameCommand.java index 1436da3..384c24d 100644 --- a/src/main/java/io/github/overlordsiii/villagernames/command/VillagerNameCommand.java +++ b/src/main/java/io/github/overlordsiii/villagernames/command/VillagerNameCommand.java @@ -113,7 +113,7 @@ private static int executeSetFormatting(CommandContext ctx, new LiteralText(FormattingDummy.fromFormatting(newFormatting) .toString()).formatted(newFormatting)))) , true); - VillagerNames.CONFIG_MANAGER.save(); + VillagerNames.CONFIG_HOLDER.save(); try { broadCastConfigChangeToOps(ctx, ConfigChange.SET, VillagerGeneralConfig.class.getDeclaredField("villagerTextFormatting"), ctx.getSource().getPlayer(), null); } catch (Exception e) { @@ -134,7 +134,7 @@ private static int executeSetString(CommandContext ctx, Str "/villagername set " + literal + " " + newvalue))) .withClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND , "/villagername set " + literal))), true); - VillagerNames.CONFIG_MANAGER.save(); + VillagerNames.CONFIG_HOLDER.save(); try { broadCastConfigChangeToOps(ctx, ConfigChange.SET, VillagerGeneralConfig.class.getDeclaredField(literal), ctx.getSource().getPlayer(), null); } catch (Exception e) { @@ -163,7 +163,7 @@ private static int executeToggle(CommandContext ctx, String , "/villagername toggle " + literal)) .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT , new LiteralText("Toggle the " + literal + " rule")))), true); - VillagerNames.CONFIG_MANAGER.save(); + VillagerNames.CONFIG_HOLDER.save(); try { broadCastConfigChangeToOps(ctx, ConfigChange.TOGGLE, VillagerGeneralConfig.class.getDeclaredField(literal), ctx.getSource().getPlayer(), null); } catch (Exception e) { @@ -200,7 +200,7 @@ private static int executeAdd(CommandContext ctx, List ctx, List getModConfigScreenFactory() { - return screen -> AutoConfig.getConfigScreen(VillagerConfig.class, screen).get(); + return screen -> AutoConfig.getConfigScreen(VillagerConfig.class, screen).get(); } } diff --git a/src/main/java/io/github/overlordsiii/villagernames/mixin/VillagerBreedTaskMixin.java b/src/main/java/io/github/overlordsiii/villagernames/mixin/VillagerBreedTaskMixin.java index 3516382..6b280b4 100644 --- a/src/main/java/io/github/overlordsiii/villagernames/mixin/VillagerBreedTaskMixin.java +++ b/src/main/java/io/github/overlordsiii/villagernames/mixin/VillagerBreedTaskMixin.java @@ -19,7 +19,7 @@ public abstract class VillagerBreedTaskMixin { @Inject(method = "createChild", at = @At("TAIL"), locals = LocalCapture.CAPTURE_FAILHARD) - private void onCreateChild(ServerWorld serverWorld, VillagerEntity villagerEntity, VillagerEntity villagerEntity2, CallbackInfoReturnable cir, VillagerEntity villagerEntity3) { + private void onCreateChild(ServerWorld serverWorld, VillagerEntity villagerEntity, VillagerEntity villagerEntity2, CallbackInfoReturnable> cir, VillagerEntity villagerEntity3) { VillagerUtil.addLastNameFromBreeding(villagerEntity3, villagerEntity); if (VillagerNames.CONFIG.villagerGeneralConfig.surNames) { System.out.println("villager name for villagerEntity (parent) = " + valueOf(villagerEntity.getCustomName())); diff --git a/src/main/java/io/github/overlordsiii/villagernames/util/NamesLoader.java b/src/main/java/io/github/overlordsiii/villagernames/util/NamesLoader.java index 002028f..aaed61a 100644 --- a/src/main/java/io/github/overlordsiii/villagernames/util/NamesLoader.java +++ b/src/main/java/io/github/overlordsiii/villagernames/util/NamesLoader.java @@ -19,13 +19,12 @@ public class NamesLoader { public static void load() { if (!VillagerNames.CONFIG.villagerGeneralConfig.hasRead){ - VillagerNames.CONFIG.villagerNamesConfig.villagerNames = loadJson("villagerNames.json"); - VillagerNames.CONFIG.golemNamesConfig.golemNames = loadJson("golemNames.json"); - VillagerNames.CONFIG.sureNamesConfig.sureNames = loadJson("surnameNames.json"); - VillagerNames.CONFIG.villagerGeneralConfig.hasRead = true; - //noinspection UnstableApiUsage - VillagerNames.CONFIG_MANAGER.save(); - } if (VillagerNames.CONFIG.sureNamesConfig.sureNames.isEmpty()) { + VillagerNames.CONFIG.villagerNamesConfig.villagerNames = loadJson("villagerNames.json"); + VillagerNames.CONFIG.golemNamesConfig.golemNames = loadJson("golemNames.json"); + VillagerNames.CONFIG.sureNamesConfig.sureNames = loadJson("surnameNames.json"); + VillagerNames.CONFIG.villagerGeneralConfig.hasRead = true; + VillagerNames.CONFIG_HOLDER.save(); + } if (VillagerNames.CONFIG.sureNamesConfig.sureNames.isEmpty()) { VillagerNames.CONFIG.sureNamesConfig.sureNames = loadJson("surnameNames.json"); } if (!VillagerNames.CONFIG.golemNamesConfig.golemNames.contains("Oracle")) { loadJson("golemNames.json").forEach(s -> { @@ -56,14 +55,14 @@ private static void jsonifyTxtFile(String file) throws IOException { Path configPath = Paths.get(FabricLoader.getInstance().getConfigDir() + "/VillagerNames.json"); System.out.println(configPath); Gson gson = new GsonBuilder().setPrettyPrinting().create(); - Files.createDirectories(configPath.getParent()); - BufferedWriter writer = Files.newBufferedWriter(configPath); + Files.createDirectories(configPath.getParent()); + try (BufferedWriter writer = Files.newBufferedWriter(configPath)) { JsonArray array = new JsonArray(); strings.forEach(array::add); JsonObject object = new JsonObject(); object.add("villagerNames", array); gson.toJson(object, writer); - writer.close(); + } } } From 28a20ad14388ddfa3375a165c0dba26e60cd12fe Mon Sep 17 00:00:00 2001 From: Fourmisain <8464472+Fourmisain@users.noreply.github.com> Date: Sat, 13 Mar 2021 11:02:19 +0100 Subject: [PATCH 2/3] rewrite naming logic --- .../villagernames/VillagerNames.java | 13 +- .../mixin/VillagerBreedTaskMixin.java | 16 +- .../mixin/VillagerEntityMixin.java | 57 ++-- .../mixin/ZombieEntityMixin.java | 5 +- .../mixin/ZombieVillagerEntityMixin.java | 4 +- .../villagernames/util/VillagerUtil.java | 266 +++++++++--------- .../assets/villagernames/lang/en_us.json | 10 +- 7 files changed, 173 insertions(+), 198 deletions(-) diff --git a/src/main/java/io/github/overlordsiii/villagernames/VillagerNames.java b/src/main/java/io/github/overlordsiii/villagernames/VillagerNames.java index 6cc9590..0a57337 100644 --- a/src/main/java/io/github/overlordsiii/villagernames/VillagerNames.java +++ b/src/main/java/io/github/overlordsiii/villagernames/VillagerNames.java @@ -35,24 +35,19 @@ public void onInitialize() { CommandRegistrationCallback.EVENT.register((commandDispatcher, dedicated) -> { VillagerNameCommand.register(commandDispatcher); - if (!dedicated){ + if (!dedicated) { StopCommand.register(commandDispatcher); } }); ServerEntityEvents.ENTITY_LOAD.register((entity, serverWorld) -> { if (entity instanceof VillagerEntity) { - VillagerUtil.createVillagerNames((VillagerEntity)entity); - VillagerUtil.generalVillagerUpdate((VillagerEntity)entity); + VillagerUtil.updateVillagerName((VillagerEntity)entity); } else if (entity instanceof IronGolemEntity) { - VillagerUtil.loadGolemNames((IronGolemEntity)entity); - VillagerUtil.updateGolemNames((IronGolemEntity)entity); + VillagerUtil.updateGolemName((IronGolemEntity)entity); } else if (entity instanceof WanderingTraderEntity) { - VillagerUtil.createWanderingTraderNames((WanderingTraderEntity)entity); - VillagerUtil.updateWanderingTraderNames((WanderingTraderEntity)entity); + VillagerUtil.updateWanderingTraderName((WanderingTraderEntity)entity); } }); - } - } diff --git a/src/main/java/io/github/overlordsiii/villagernames/mixin/VillagerBreedTaskMixin.java b/src/main/java/io/github/overlordsiii/villagernames/mixin/VillagerBreedTaskMixin.java index 6b280b4..2dd7c65 100644 --- a/src/main/java/io/github/overlordsiii/villagernames/mixin/VillagerBreedTaskMixin.java +++ b/src/main/java/io/github/overlordsiii/villagernames/mixin/VillagerBreedTaskMixin.java @@ -16,20 +16,8 @@ @Mixin(VillagerBreedTask.class) public abstract class VillagerBreedTaskMixin { - @Inject(method = "createChild", - at = @At("TAIL"), - locals = LocalCapture.CAPTURE_FAILHARD) + @Inject(method = "createChild", at = @At("TAIL"), locals = LocalCapture.CAPTURE_FAILHARD) private void onCreateChild(ServerWorld serverWorld, VillagerEntity villagerEntity, VillagerEntity villagerEntity2, CallbackInfoReturnable> cir, VillagerEntity villagerEntity3) { - VillagerUtil.addLastNameFromBreeding(villagerEntity3, villagerEntity); - if (VillagerNames.CONFIG.villagerGeneralConfig.surNames) { - System.out.println("villager name for villagerEntity (parent) = " + valueOf(villagerEntity.getCustomName())); - System.out.println("villager name for villagerEntity3 (child) = " + valueOf(villagerEntity.getCustomName())); - } + VillagerUtil.inheritSurname(villagerEntity3, villagerEntity); } - - private String valueOf(Text object) { - return object == null ? "null" : object.asString(); - } - - } diff --git a/src/main/java/io/github/overlordsiii/villagernames/mixin/VillagerEntityMixin.java b/src/main/java/io/github/overlordsiii/villagernames/mixin/VillagerEntityMixin.java index 187dc4f..97518d8 100644 --- a/src/main/java/io/github/overlordsiii/villagernames/mixin/VillagerEntityMixin.java +++ b/src/main/java/io/github/overlordsiii/villagernames/mixin/VillagerEntityMixin.java @@ -6,11 +6,13 @@ import net.minecraft.entity.InteractionObserver; import net.minecraft.entity.passive.MerchantEntity; import net.minecraft.entity.passive.VillagerEntity; +import net.minecraft.nbt.CompoundTag; import net.minecraft.village.VillagerData; import net.minecraft.village.VillagerDataContainer; import net.minecraft.village.VillagerProfession; import net.minecraft.world.World; import org.apache.logging.log4j.Logger; +import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -22,42 +24,43 @@ public abstract class VillagerEntityMixin extends MerchantEntity implements InteractionObserver, VillagerDataContainer { @Shadow public abstract VillagerData getVillagerData(); + // TODO: may or may not be used, probably not though +// public String forename; +// @Nullable public String surname; + public VillagerEntityMixin(EntityType entityType, World world) { super(entityType, world); } - @Inject(method = "setVillagerData", at = @At("TAIL")) - private void changeText(VillagerData villagerData, CallbackInfo ci){ - if (villagerData.getProfession() != VillagerProfession.NONE && this.hasCustomName()) { - VillagerUtil.updateVillagerNames((VillagerEntity) (Object) this); - } - if (this.hasCustomName() && villagerData.getProfession() == VillagerProfession.NONE){ - VillagerUtil.updateLostVillagerProfessionName((VillagerEntity)(Object)this); - } + +// @Inject(method = "writeCustomDataToTag", at = @At("RETURN")) +// public void writeCustomDataToTag(CompoundTag tag, CallbackInfo ci) { +// tag.putString("forename", forename); +// tag.putString("surname", surname); +// } +// +// @Inject(method = "readCustomDataFromTag", at = @At("RETURN")) +// public void fromTag(CompoundTag tag, CallbackInfo ci) { +// forename = tag.getString("forename"); +// surname = tag.getString("surname"); +// } + + @Inject(method = "setVillagerData", at = @At("RETURN")) + private void setVillagerData(VillagerData villagerData, CallbackInfo ci) { + VillagerUtil.updateVillagerName((VillagerEntity) (Object) this); } - @SuppressWarnings("ALL") + @Redirect(method = "onDeath", at = @At(value = "INVOKE", target = "Lorg/apache/logging/log4j/Logger;info(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V")) - private void redirect(Logger logger, String message, Object p0, Object p1){ - if (VillagerNames.CONFIG.villagerGeneralConfig.turnOffVillagerConsoleSpam) { - String lol = "ha lol gottem"; - } - else{ + private void redirect(Logger logger, String message, Object p0, Object p1) { + // ha lol gottem + if (!VillagerNames.CONFIG.villagerGeneralConfig.turnOffVillagerConsoleSpam) { logger.info(message, p0, p1); } } - @SuppressWarnings("ALL") - @Inject(method = "onGrowUp", at = @At("TAIL")) - private void updateBabyText(CallbackInfo ci){ - VillagerUtil.updateGrownUpVillagerName((VillagerEntity)(Object)(this)); - } - /* - @Inject(method = "createChild", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/entity/passive/VillagerEntity;initialize(Lnet/minecraft/world/ServerWorldAccess;Lnet/minecraft/world/LocalDifficulty;Lnet/minecraft/entity/SpawnReason;Lnet/minecraft/entity/EntityData;Lnet/minecraft/nbt/CompoundTag;)Lnet/minecraft/entity/EntityData;") - , locals = LocalCapture.CAPTURE_FAILHARD) - private void onCreateChild(ServerWorld serverWorld, PassiveEntity passiveEntity, CallbackInfoReturnable cir, VillagerType villagerType3, VillagerEntity villagerEntity) { - VillagerUtil.addLastNameFromBreeding(villagerEntity, (VillagerEntity)(Object)this); + + @Inject(method = "onGrowUp", at = @At("RETURN")) + private void onGrowUp(CallbackInfo ci) { + VillagerUtil.updateVillagerName((VillagerEntity) (Object) this); } - */ } diff --git a/src/main/java/io/github/overlordsiii/villagernames/mixin/ZombieEntityMixin.java b/src/main/java/io/github/overlordsiii/villagernames/mixin/ZombieEntityMixin.java index ba9dcce..f1f509e 100644 --- a/src/main/java/io/github/overlordsiii/villagernames/mixin/ZombieEntityMixin.java +++ b/src/main/java/io/github/overlordsiii/villagernames/mixin/ZombieEntityMixin.java @@ -23,8 +23,7 @@ protected ZombieEntityMixin(EntityType entityType, Worl } @Inject(method = "onKilledOther", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/mob/ZombieVillagerEntity;initialize(Lnet/minecraft/world/ServerWorldAccess;Lnet/minecraft/world/LocalDifficulty;Lnet/minecraft/entity/SpawnReason;Lnet/minecraft/entity/EntityData;Lnet/minecraft/nbt/CompoundTag;)Lnet/minecraft/entity/EntityData;"), locals = LocalCapture.CAPTURE_FAILEXCEPTION) - private void addZombieNameTag(ServerWorld serverWorld, LivingEntity livingEntity, CallbackInfo ci, VillagerEntity villagerEntity, ZombieVillagerEntity zombieVillagerEntity){ - VillagerUtil.addZombieVillagerName(villagerEntity, zombieVillagerEntity); + private void addZombieNameTag(ServerWorld serverWorld, LivingEntity livingEntity, CallbackInfo ci, VillagerEntity villagerEntity, ZombieVillagerEntity zombieVillagerEntity) { + VillagerUtil.setZombieVillagerName(zombieVillagerEntity, villagerEntity); } - } diff --git a/src/main/java/io/github/overlordsiii/villagernames/mixin/ZombieVillagerEntityMixin.java b/src/main/java/io/github/overlordsiii/villagernames/mixin/ZombieVillagerEntityMixin.java index aa78099..6a8ef6b 100644 --- a/src/main/java/io/github/overlordsiii/villagernames/mixin/ZombieVillagerEntityMixin.java +++ b/src/main/java/io/github/overlordsiii/villagernames/mixin/ZombieVillagerEntityMixin.java @@ -22,7 +22,7 @@ public ZombieVillagerEntityMixin(EntityType entityType, } @Inject(method = "finishConversion", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/passive/VillagerEntity;initialize(Lnet/minecraft/world/ServerWorldAccess;Lnet/minecraft/world/LocalDifficulty;Lnet/minecraft/entity/SpawnReason;Lnet/minecraft/entity/EntityData;Lnet/minecraft/nbt/CompoundTag;)Lnet/minecraft/entity/EntityData;"), locals = LocalCapture.CAPTURE_FAILEXCEPTION) - private void returnOriginalVillagerName(ServerWorld world, CallbackInfo ci, VillagerEntity villagerEntity, EquipmentSlot[] var3, int var4, int var5){ - VillagerUtil.removeZombieVillagerName(villagerEntity, (ZombieVillagerEntity)(Object)this); + private void returnOriginalVillagerName(ServerWorld world, CallbackInfo ci, VillagerEntity villagerEntity, EquipmentSlot[] var3, int var4, int var5) { + VillagerUtil.transferZombieVillagerName((ZombieVillagerEntity) (Object) this, villagerEntity); } } diff --git a/src/main/java/io/github/overlordsiii/villagernames/util/VillagerUtil.java b/src/main/java/io/github/overlordsiii/villagernames/util/VillagerUtil.java index fba92e1..17f0aae 100644 --- a/src/main/java/io/github/overlordsiii/villagernames/util/VillagerUtil.java +++ b/src/main/java/io/github/overlordsiii/villagernames/util/VillagerUtil.java @@ -5,16 +5,20 @@ import java.util.ArrayList; import java.util.List; import java.util.Objects; -import java.util.Random; import io.github.overlordsiii.villagernames.config.NamesConfig; - +import net.minecraft.entity.Entity; import net.minecraft.entity.mob.ZombieVillagerEntity; import net.minecraft.entity.passive.IronGolemEntity; import net.minecraft.entity.passive.VillagerEntity; import net.minecraft.entity.passive.WanderingTraderEntity; import net.minecraft.text.LiteralText; +import net.minecraft.util.Nameable; import net.minecraft.village.VillagerProfession; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.*; public class VillagerUtil { @@ -23,10 +27,12 @@ public class VillagerUtil { private static final Random random = new Random(); - private static String upperFirstLetter(String string){ - if (string.contains(":")){ - string = string.substring(string.indexOf(":") + 1); + private static String upperFirstLetter(String string) { + int j = string.indexOf(":"); + if (j != -1) { + string = string.substring(j + 1); } + StringBuilder builder = new StringBuilder(string); builder.setCharAt(0, Character.toUpperCase(string.charAt(0))); return builder.toString(); @@ -34,6 +40,7 @@ private static String upperFirstLetter(String string){ private static String pickRandomName(NamesConfig namesConfig) { List names = namesConfig.getNameList(); + int index = random.nextInt(names.size()); if (usedUpNames.size() > names.size()/2) { usedUpNames.clear(); @@ -45,17 +52,23 @@ private static String pickRandomName(NamesConfig namesConfig) { return names.get(index); } - private static String generateRandomVillagerName(){ + private static String generateRandomVillagerName() { + String forename = pickRandomName(CONFIG.villagerNamesConfig); + if (CONFIG.villagerGeneralConfig.surNames) { + String surname = generateRandomSurname(); + if (CONFIG.villagerGeneralConfig.reverseLastNames) { - return generateRandomSurname() + " " + pickRandomName(CONFIG.villagerNamesConfig); + return surname + " " + forename; + } else { + return forename + " " + surname; } - return pickRandomName(CONFIG.villagerNamesConfig) + " " + generateRandomSurname(); } - return pickRandomName(CONFIG.villagerNamesConfig); + + return forename; } - private static String generateRandomGolemName(){ + private static String generateRandomGolemName() { return pickRandomName(CONFIG.golemNamesConfig); } @@ -63,170 +76,147 @@ private static String generateRandomSurname() { return pickRandomName(CONFIG.sureNamesConfig); } - private static void setGenericVillagerName(VillagerEntity entity, String name) { - if (CONFIG.villagerGeneralConfig.childNames) { - entity.setCustomName(entity.isBaby() ? new LiteralText(name + " the Child").formatted(CONFIG.villagerGeneralConfig.villagerTextFormatting.getFormatting()) : new LiteralText(name).formatted(CONFIG.villagerGeneralConfig.villagerTextFormatting.getFormatting())); - } - else { - entity.setCustomName(new LiteralText(name).formatted(CONFIG.villagerGeneralConfig.villagerTextFormatting.getFormatting())); - } - } + public static void updateVillagerName(VillagerEntity entity) { + String fullName; - public static void createVillagerNames(VillagerEntity entity){ - if (!entity.hasCustomName()){ - String randomName = generateRandomVillagerName(); - if (entity.getVillagerData().getProfession() != VillagerProfession.NONE && CONFIG.villagerGeneralConfig.professionNames){ - String text = VillagerProfession.NITWIT == entity.getVillagerData().getProfession() ? CONFIG.villagerGeneralConfig.nitwitText : upperFirstLetter(entity.getVillagerData().getProfession().toString()); - entity.setCustomName(new LiteralText(randomName + " the " + text).formatted(CONFIG.villagerGeneralConfig.villagerTextFormatting.getFormatting())); - entity.setCustomNameVisible(!CONFIG.villagerGeneralConfig.nameTagNames); + if (!entity.hasCustomName()) { + fullName = generateRandomVillagerName(); + } else { + fullName = parseFullName(entity); + if (CONFIG.villagerGeneralConfig.surNames) { + String surname = parseSurname(fullName); + if (surname == null) { + fullName += " " + generateRandomSurname(); + } } - else { - entity.setCustomNameVisible(!CONFIG.villagerGeneralConfig.nameTagNames); - setGenericVillagerName(entity, randomName); - } - } - entity.setCustomNameVisible(!CONFIG.villagerGeneralConfig.nameTagNames); - } - public static void loadGolemNames(IronGolemEntity entity){ - if (!entity.hasCustomName() && CONFIG.villagerGeneralConfig.golemNames) { - String name = generateRandomGolemName(); - entity.setCustomName(new LiteralText(name).formatted(CONFIG.villagerGeneralConfig.villagerTextFormatting.getFormatting())); - entity.setCustomNameVisible(!CONFIG.villagerGeneralConfig.nameTagNames); + // TODO: what if surNames were enabled and now disabled? Do we try to remove them? + // this is one thing which would be easier if fore- and surnames were stored independently + // Alternatively we could assume that a full name consists of exactly 2 tokens; with the implementation + // right now, middle names are allowed (as part of the forename) } + + String titledFullName = getTitledVillagerName(entity, fullName); + + setEntityName(entity, titledFullName); } - public static void updateVillagerNames(VillagerEntity entity){ - //should never be called, but let's do it anyway! - if (entity.getVillagerData().getProfession() == VillagerProfession.NONE) { - setGenericVillagerName(entity, generateRandomVillagerName()); - } - else { - if (!Objects.requireNonNull(entity.getCustomName()).asString().contains(" the ") && CONFIG.villagerGeneralConfig.professionNames) { - //LOGGER.info(entity.getCustomName().asString()); - entity.setCustomName(new LiteralText(Objects.requireNonNull(entity.getCustomName()).asString() + " the " + upperFirstLetter(entity.getVillagerData().getProfession().toString())).formatted(CONFIG.villagerGeneralConfig.villagerTextFormatting.getFormatting())); - // LOGGER.info(entity.getCustomName().asString()); - } + @NotNull + private static String getTitledVillagerName(VillagerEntity entity, String fullName) { + VillagerProfession profession = entity.getVillagerData().getProfession(); + + if (CONFIG.villagerGeneralConfig.childNames && entity.isBaby()) { + return fullName + " the Child"; + } else if (CONFIG.villagerGeneralConfig.professionNames && profession != VillagerProfession.NONE) { + String professionName = (profession == VillagerProfession.NITWIT ? CONFIG.villagerGeneralConfig.nitwitText : upperFirstLetter(profession.toString())); + return fullName + " the " + professionName; + } else { + return fullName; } - entity.setCustomNameVisible(!CONFIG.villagerGeneralConfig.nameTagNames); } - public static void updateLostVillagerProfessionName(VillagerEntity entity){ - if (entity.hasCustomName() && (CONFIG.villagerGeneralConfig.surNames ? secondIndexOf(entity.getCustomName().asString(), " ") != -1 : entity.getCustomName().asString().contains(" "))) { - String string = Objects.requireNonNull(entity.getCustomName()).asString(); - // LOGGER.info("Custom name inside lost Villager Name = " + string); - String realString = CONFIG.villagerGeneralConfig.professionNames ? string.substring(0, CONFIG.villagerGeneralConfig.surNames ? secondIndexOf(string, " ") : string.indexOf(" ")) : string; - // LOGGER.info("Next string = " + realString); - entity.setCustomName(new LiteralText(realString).formatted(CONFIG.villagerGeneralConfig.villagerTextFormatting.getFormatting())); + @NotNull + private static String parseFullName(Nameable entity) { + String customName = Objects.requireNonNull(entity.getCustomName()).asString(); + + int j = customName.indexOf(" the "); + if (j == -1) { + return customName; + } else { + return customName.substring(0, j); } } - public static void updateGrownUpVillagerName(VillagerEntity entity){ - if (entity.hasCustomName()) { - if (Objects.requireNonNull(entity.getCustomName()).asString().contains(" the ")) { - entity.setCustomName(new LiteralText(entity.getCustomName().asString().substring(0, CONFIG.villagerGeneralConfig.surNames ? secondIndexOf(entity.getCustomName().asString(), " "): entity.getCustomName().asString().indexOf(" "))).formatted(CONFIG.villagerGeneralConfig.villagerTextFormatting.getFormatting())); - } + @NotNull + private static String parseForename(String fullName) { + int j = fullName.lastIndexOf(' '); + if (j == -1) { + return fullName; + } else { + return fullName.substring(0, j); } } - public static void addZombieVillagerName(VillagerEntity villagerEntity, ZombieVillagerEntity zombieVillagerEntity){ - // LOGGER.info(villagerEntity.hasCustomName()); - if (villagerEntity.hasCustomName()){ - // LOGGER.info("before name = " + villagerEntity.getCustomName().asString()); - if (Objects.requireNonNull(villagerEntity.getCustomName()).asString().contains(" the ")) { - String string = villagerEntity.getCustomName().asString().substring(0, CONFIG.villagerGeneralConfig.surNames ? secondIndexOf(villagerEntity.getCustomName().asString(), " ") : villagerEntity.getCustomName().asString().indexOf(" ")); - // LOGGER.info("string = " + string); - zombieVillagerEntity.setCustomName(new LiteralText(string + " the Zombie").formatted(CONFIG.villagerGeneralConfig.villagerTextFormatting.getFormatting())); - // LOGGER.info("zombie name = " + zombieVillagerEntity.getCustomName().asString()); - } - else{ - String string = " the Zombie"; - zombieVillagerEntity.setCustomName(new LiteralText(villagerEntity.getCustomName().asString() + string).formatted(CONFIG.villagerGeneralConfig.villagerTextFormatting.getFormatting())); - } + @Nullable + private static String parseSurname(String fullName) { + int j = fullName.lastIndexOf(' '); + if (j == -1) { + return null; + } else { + return fullName.substring(j + 1); } } - public static void removeZombieVillagerName(VillagerEntity villagerEntity, ZombieVillagerEntity zombieVillagerEntity){ - if (zombieVillagerEntity.hasCustomName()){ - if (Objects.requireNonNull(zombieVillagerEntity.getCustomName()).asString().contains(" the ")){ - String name = zombieVillagerEntity.getCustomName().asString().substring(0, zombieVillagerEntity.getCustomName().asString().indexOf(" the ")); - villagerEntity.setCustomName(new LiteralText(name).formatted(CONFIG.villagerGeneralConfig.villagerTextFormatting.getFormatting())); - } - else{ - String string = " the Zombie"; - zombieVillagerEntity.setCustomName(new LiteralText(Objects.requireNonNull(villagerEntity.getCustomName()).asString() + string).formatted(CONFIG.villagerGeneralConfig.villagerTextFormatting.getFormatting())); - } + public static void inheritSurname(VillagerEntity childEntity, VillagerEntity parentEntity) { + if (CONFIG.villagerGeneralConfig.surNames) { + assert childEntity.hasCustomName(); + assert parentEntity.hasCustomName(); + + String childForename = parseForename(parseFullName(childEntity)); + String parentSurname = parseSurname(parseFullName(parentEntity)); + + assert parentSurname != null; // possible when changing surNames without a restart + + String titledFullName = getTitledVillagerName(childEntity, childForename + " " + parentSurname); + + setEntityName(childEntity, titledFullName); } } - public static void generalVillagerUpdate(VillagerEntity entity){ - if (entity.hasCustomName()){ - String namer = Objects.requireNonNull(entity.getCustomName()).asString(); - if (CONFIG.villagerGeneralConfig.surNames) { - if (entity.getVillagerData().getProfession() == VillagerProfession.NONE && !namer.contains(" ")) {//indicates that the villager does not have a profession and does not have last name - namer = namer + " " + generateRandomSurname(); - } else if (entity.getVillagerData().getProfession() != VillagerProfession.NONE && namer.charAt(namer.indexOf(" ") + 1) == 't') {//indicates they have a profession but no last name - StringBuilder builder = new StringBuilder(namer); - builder.insert(namer.indexOf(" "), " " + generateRandomSurname()); - namer = builder.toString(); - } - } - entity.setCustomName(new LiteralText(namer).formatted(CONFIG.villagerGeneralConfig.villagerTextFormatting.getFormatting())); - if (entity.isBaby() && CONFIG.villagerGeneralConfig.childNames && !entity.getCustomName().asString().contains(" the Child")){ - entity.setCustomName(new LiteralText(entity.getCustomName().asString() + " the Child").formatted(CONFIG.villagerGeneralConfig.villagerTextFormatting.getFormatting())); - } else if (entity.getVillagerData().getProfession() == VillagerProfession.NITWIT && !entity.getCustomName().asString().contains(CONFIG.villagerGeneralConfig.nitwitText)){ - if (!entity.getCustomName().asString().contains(" the ")) { - entity.setCustomName(new LiteralText(entity.getCustomName().asString() + " the ")); - } - String name = entity.getCustomName().asString().substring(0, entity.getCustomName().asString().indexOf(" the ")); - entity.setCustomName(new LiteralText(name + " the " + CONFIG.villagerGeneralConfig.nitwitText)); - } - entity.setCustomNameVisible(!CONFIG.villagerGeneralConfig.nameTagNames); - } + public static void setZombieVillagerName(ZombieVillagerEntity zombieVillagerEntity, VillagerEntity villagerEntity) { + assert villagerEntity.hasCustomName(); + + String titledFullName = parseFullName(villagerEntity) + " the Zombie"; + setEntityName(zombieVillagerEntity, titledFullName); } - public static void createWanderingTraderNames(WanderingTraderEntity entity){ - if (!entity.hasCustomName() && CONFIG.villagerGeneralConfig.wanderingTraderNames){ - entity.setCustomName(new LiteralText(generateRandomVillagerName() + " the " + CONFIG.villagerGeneralConfig.wanderingTraderText).formatted(CONFIG.villagerGeneralConfig.villagerTextFormatting.getFormatting())); - entity.setCustomNameVisible(!CONFIG.villagerGeneralConfig.nameTagNames); + public static void transferZombieVillagerName(ZombieVillagerEntity zombieVillagerEntity, VillagerEntity villagerEntity) { + // TODO: do naturally spawned zombie villagers get names? + + if (zombieVillagerEntity.hasCustomName()) { + // a freshly converted villager probably can't have a title, but just in case + String titledFullName = getTitledVillagerName(villagerEntity, parseFullName(zombieVillagerEntity)); + setEntityName(villagerEntity, titledFullName); } } - public static void updateWanderingTraderNames(WanderingTraderEntity entity){ - if (entity.hasCustomName()) { - if (entity.getCustomName().asString().contains(" the ")) { - String fullName = Objects.requireNonNull(entity.getCustomName()).asString(); - String firstName = fullName.substring(0, fullName.indexOf(" the ")); - entity.setCustomName(new LiteralText(firstName + " the " + CONFIG.villagerGeneralConfig.wanderingTraderText).formatted(CONFIG.villagerGeneralConfig.villagerTextFormatting.getFormatting())); - entity.setCustomNameVisible(!CONFIG.villagerGeneralConfig.nameTagNames); + public static void updateWanderingTraderName(WanderingTraderEntity entity) { + if (CONFIG.villagerGeneralConfig.wanderingTraderNames) { + String fullName; + if (!entity.hasCustomName()) { + fullName = generateRandomVillagerName(); + } else { + fullName = parseFullName(entity); } + String titledFullName = fullName + " the " + CONFIG.villagerGeneralConfig.wanderingTraderText; + + setEntityName(entity, titledFullName); + } else { + // TODO: what should actually happen if names are disabled and entities already have custom names? + applyFormatting(entity); } } - public static void updateGolemNames(IronGolemEntity entity){ - if (entity.hasCustomName()){ - entity.setCustomName(new LiteralText(Objects.requireNonNull(entity.getCustomName()).asString()).formatted(CONFIG.villagerGeneralConfig.villagerTextFormatting.getFormatting())); - entity.setCustomNameVisible(!CONFIG.villagerGeneralConfig.nameTagNames); + public static void updateGolemName(IronGolemEntity entity) { + if (CONFIG.villagerGeneralConfig.golemNames && !entity.hasCustomName()) { + // Note: Golems have no titles + String fullName = generateRandomGolemName(); + setEntityName(entity, fullName); + } else { + // TODO + applyFormatting(entity); } } - private static int secondIndexOf(String source, String index) { - return source.indexOf(index, source.indexOf(index) + 1); + private static void setEntityName(Entity entity, String titledFullName) { + entity.setCustomName(new LiteralText(titledFullName).formatted(CONFIG.villagerGeneralConfig.villagerTextFormatting.getFormatting())); + entity.setCustomNameVisible(!CONFIG.villagerGeneralConfig.nameTagNames); } - public static void addLastNameFromBreeding(VillagerEntity childEntity, VillagerEntity parentEntity) { - if (parentEntity.hasCustomName() && CONFIG.villagerGeneralConfig.surNames) { - String name; - if (parentEntity.getVillagerData().getProfession() == VillagerProfession.NONE) { - name = parentEntity.getCustomName().asString().substring(parentEntity.getCustomName().asString().indexOf(" ")); - } else { - name = parentEntity.getCustomName().asString().substring(secondIndexOf(parentEntity.getCustomName().asString(), " ")); - } - String fullName = pickRandomName(CONFIG.villagerNamesConfig) + name; - System.out.println(parentEntity.getCustomName().asString()); - System.out.println(fullName); - childEntity.setCustomName(new LiteralText(CONFIG.villagerGeneralConfig.childNames ? fullName + " the Child" : fullName)); + private static void applyFormatting(Entity entity) { + if (entity.hasCustomName()) { + setEntityName(entity, entity.getCustomName().asString()); } } } diff --git a/src/main/resources/assets/villagernames/lang/en_us.json b/src/main/resources/assets/villagernames/lang/en_us.json index 961f3b6..cdde38d 100644 --- a/src/main/resources/assets/villagernames/lang/en_us.json +++ b/src/main/resources/assets/villagernames/lang/en_us.json @@ -13,24 +13,24 @@ "text.autoconfig.VillagerNames.option.villagerGeneralConfig.needsOP": "Needs OP", "text.autoconfig.VillagerNames.option.villagerGeneralConfig.villagerTextFormatting": "Villager Text Formatting", "text.autoconfig.VillagerNames.option.villagerGeneralConfig.nitwitText": "Text for Nitwits", - "text.autoconfig.VillagerNames.option.villagerGeneralConfig.professionNames.@Tooltip": "Gives villagers with their profession added to it", + "text.autoconfig.VillagerNames.option.villagerGeneralConfig.professionNames.@Tooltip": "Adds the villager's profession to their name", "text.autoconfig.VillagerNames.option.villagerGeneralConfig.childNames": "Names for children", "text.autoconfig.VillagerNames.option.villagerGeneralConfig.villagerTextFormatting.@Tooltip": "Formats villager text to the following formatting", - "text.autoconfig.VillagerNames.option.villagerGeneralConfig.childNames.@Tooltip": "Gives child villagers the extra title /'the Child/'", + "text.autoconfig.VillagerNames.option.villagerGeneralConfig.childNames.@Tooltip": "Gives child villagers the extra title 'the Child'", "text.autoconfig.VillagerNames.option.villagerGeneralConfig.nitwitText.@Tooltip": "Allows you to customize the text that comes for a nitwit villager", "text.autoconfig.VillagerNames.option.villagerGeneralConfig.needsOP.@Tooltip": "Allows you to choose if the villager commands need op", "text.autoconfig.VillagerNames.option.villagerGeneralConfig.golemNames.@Tooltip": "Gives Iron Golems names as well", "text.autoconfig.VillagerNames.option.villagerGeneralConfig.turnOffVillagerConsoleSpam": "Turns off console spam for villagers", "text.autoconfig.VillagerNames.option.villagerGeneralConfig.turnOffVillagerConsoleSpam.@Tooltip": "Let's you murder/do what ever you want to villagers in peace", "text.autoconfig.VillagerNames.option.villagerGeneralConfig.wanderingTraderNames": "Names for Wandering Traders", - "text.autoconfig.VillagerNames.option.villagerGeneralConfig.wanderingTraderNames.@Tooltip": "Gives names for wandering traders", + "text.autoconfig.VillagerNames.option.villagerGeneralConfig.wanderingTraderNames.@Tooltip": "Gives wandering traders names", "text.autoconfig.VillagerNames.option.villagerGeneralConfig.wanderingTraderText": "Wandering Trader Text", "text.autoconfig.VillagerNames.option.villagerGeneralConfig.wanderingTraderText.@Tooltip": "Allows you to customize the text for the Wandering Traders", "text.autoconfig.VillagerNames.category.sureName": "Last Names", "text.autoconfig.VillagerNames.option.sureNamesConfig": "Last Names", "text.autoconfig.VillagerNames.option.sureNamesConfig.sureNames": "Last Names List", - "text.autoconfig.VillagerNames.option.villagerGeneralConfig.surNames": "Use Lastnames", - "text.autoconfig.VillagerNames.option.villagerGeneralConfig.sureNames.@Tooltip": "Gives last names to villagers. Does not work with names with spaces", + "text.autoconfig.VillagerNames.option.villagerGeneralConfig.surNames": "Use Last Names", + "text.autoconfig.VillagerNames.option.villagerGeneralConfig.surNames.@Tooltip": "Gives last names to villagers. Does not work with names with spaces", "text.autoconfig.VillagerNames.option.villagerGeneralConfig.reverseLastNames": "Reversed Last Names", "text.autoconfig.VillagerNames.option.villagerGeneralConfig.reverseLastNames.@Tooltip": "Gives Villagers last names before their first names. Needs sureNames toggled on", "text.autoconfig.VillagerNames.option.villagerGeneralConfig.nameTagNames": "Name Tag Names", From b19b41c425144150486a7d94a1ce859767902533 Mon Sep 17 00:00:00 2001 From: Fourmisain <8464472+Fourmisain@users.noreply.github.com> Date: Wed, 2 Jun 2021 18:16:05 +0200 Subject: [PATCH 3/3] don't use refmap for unobfuscated methods --- .../villagernames/mixin/ConfigBuilderImplAccessor.java | 2 +- .../villagernames/mixin/SelectionListEntryMixin.java | 2 +- .../overlordsiii/villagernames/mixin/VillagerEntityMixin.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/github/overlordsiii/villagernames/mixin/ConfigBuilderImplAccessor.java b/src/main/java/io/github/overlordsiii/villagernames/mixin/ConfigBuilderImplAccessor.java index 47f9bd9..4fa4355 100644 --- a/src/main/java/io/github/overlordsiii/villagernames/mixin/ConfigBuilderImplAccessor.java +++ b/src/main/java/io/github/overlordsiii/villagernames/mixin/ConfigBuilderImplAccessor.java @@ -9,7 +9,7 @@ import java.util.Map; @SuppressWarnings("UnstableApiUsage") -@Mixin(ConfigBuilderImpl.class) +@Mixin(value = ConfigBuilderImpl.class, remap = false) public interface ConfigBuilderImplAccessor { @Accessor("categoryMap") Map getCategoryMap(); diff --git a/src/main/java/io/github/overlordsiii/villagernames/mixin/SelectionListEntryMixin.java b/src/main/java/io/github/overlordsiii/villagernames/mixin/SelectionListEntryMixin.java index 71cbfa1..78bfd20 100644 --- a/src/main/java/io/github/overlordsiii/villagernames/mixin/SelectionListEntryMixin.java +++ b/src/main/java/io/github/overlordsiii/villagernames/mixin/SelectionListEntryMixin.java @@ -19,7 +19,7 @@ import java.util.function.Supplier; @Environment(EnvType.CLIENT) -@Mixin(value = SelectionListEntry.class) +@Mixin(value = SelectionListEntry.class, remap = false) public abstract class SelectionListEntryMixin { @Shadow private Function nameProvider; diff --git a/src/main/java/io/github/overlordsiii/villagernames/mixin/VillagerEntityMixin.java b/src/main/java/io/github/overlordsiii/villagernames/mixin/VillagerEntityMixin.java index 97518d8..2a44ecd 100644 --- a/src/main/java/io/github/overlordsiii/villagernames/mixin/VillagerEntityMixin.java +++ b/src/main/java/io/github/overlordsiii/villagernames/mixin/VillagerEntityMixin.java @@ -49,7 +49,7 @@ private void setVillagerData(VillagerData villagerData, CallbackInfo ci) { VillagerUtil.updateVillagerName((VillagerEntity) (Object) this); } - @Redirect(method = "onDeath", at = @At(value = "INVOKE", target = "Lorg/apache/logging/log4j/Logger;info(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V")) + @Redirect(method = "onDeath", at = @At(value = "INVOKE", target = "Lorg/apache/logging/log4j/Logger;info(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V"), remap = false) private void redirect(Logger logger, String message, Object p0, Object p1) { // ha lol gottem if (!VillagerNames.CONFIG.villagerGeneralConfig.turnOffVillagerConsoleSpam) {