diff --git a/src/main/java/jss/bugtorch/config/BugTorchConfig.java b/src/main/java/jss/bugtorch/config/BugTorchConfig.java index 6a7f61f..611c6d2 100644 --- a/src/main/java/jss/bugtorch/config/BugTorchConfig.java +++ b/src/main/java/jss/bugtorch/config/BugTorchConfig.java @@ -122,6 +122,7 @@ public class BugTorchConfig { //Mixin mod tweaks public static boolean disableCrayfishFurnitureAchievements; + public static boolean extraUtilitiesTradingPostVillageNamesNitwitFilter; public static boolean proxyLLibraryPastebin; public static float scaledExtraUtilitiesDarknessDamageMaxHealthFlat; public static float scaledExtraUtilitiesDarknessDamageMaxHealthMult; @@ -304,8 +305,9 @@ public static void loadModdedMixinConfig(File configFile) { reuseAetherIIRenderPlayer = config.getBoolean("reuseAetherIIRenderPlayer", categoryPerformance, true, "Makes Aether II reuse the same player renderer object across frames."); //Tweaks - disableCrayfishFurnitureAchievements= config.getBoolean("disableCrayfishFurnitureAchievements", categoryTweaks, false, "Disables MrCrayfish's Furniture Mod achievements."); - proxyLLibraryPastebin = config.getBoolean("proxyLLibraryPastebin", categoryTweaks, false, "Use a pastebin proxy to keep LLibrary from crashing with some regional blocks."); + disableCrayfishFurnitureAchievements = config.getBoolean("disableCrayfishFurnitureAchievements", categoryTweaks, false, "Disables MrCrayfish's Furniture Mod achievements."); + extraUtilitiesTradingPostVillageNamesNitwitFilter = config.getBoolean("extraUtilitiesTradingPostVillageNamesNitwitFilter", categoryTweaks, true, "Filters Village Names Nitwit villagers from Extra Utilities Trading Post."); + proxyLLibraryPastebin = config.getBoolean("proxyLLibraryPastebin", categoryTweaks, false, "Use a pastebin proxy to keep LLibrary from crashing with some regional blocks."); scaledExtraUtilitiesDarknessDamageMaxHealthFlat = config.getFloat("scaledExtraUtilitiesDarknessDamageMaxHealthFlat", categoryTweaks, 0f, 0f, 20000f, "Portion of max player health to remove each darkness tick.\nSet to 0 to disable."); scaledExtraUtilitiesDarknessDamageMaxHealthMult = config.getFloat("scaledExtraUtilitiesDarknessDamageMaxHealthMult", categoryTweaks, 0f, 0f, 1f, "Portion of max player health to remove each darkness tick.\nSet to 0 to disable."); diff --git a/src/main/java/jss/bugtorch/mixinplugin/BugTorchLateMixins.java b/src/main/java/jss/bugtorch/mixinplugin/BugTorchLateMixins.java index 71f19b6..9fc6517 100644 --- a/src/main/java/jss/bugtorch/mixinplugin/BugTorchLateMixins.java +++ b/src/main/java/jss/bugtorch/mixinplugin/BugTorchLateMixins.java @@ -46,9 +46,13 @@ public List getMixins(Set loadedMods) { BugTorchConfig.fixWitcheryLeavesOptifineRendering = false; } if(!loadedMods.contains("ExtraUtilities")) { + BugTorchConfig.extraUtilitiesTradingPostVillageNamesNitwitFilter = false; BugTorchConfig.scaledExtraUtilitiesDarknessDamageMaxHealthFlat = 0; BugTorchConfig.scaledExtraUtilitiesDarknessDamageMaxHealthMult = 0; } + if(!loadedMods.contains("VillageNames")) { + BugTorchConfig.extraUtilitiesTradingPostVillageNamesNitwitFilter = false; + } BugTorch.logger.info("Kicking off BugTorch late mixins."); boolean client = FMLLaunchHandler.side().isClient(); @@ -86,10 +90,12 @@ public List getMixins(Set loadedMods) { if(BugTorchConfig.disableCrayfishFurnitureAchievements) { mixins.add("crayfishfurniture.tweak.MixinFurnitureAchievements"); } + if(BugTorchConfig.extraUtilitiesTradingPostVillageNamesNitwitFilter) { + mixins.add("extrautils.tweaks.MixinTileEntityTradingPost"); + } if(BugTorchConfig.proxyLLibraryPastebin) { mixins.add("llibrary.fix.MixinWebUtils"); } - if(BugTorchConfig.scaledExtraUtilitiesDarknessDamageMaxHealthFlat > 0f || BugTorchConfig.scaledExtraUtilitiesDarknessDamageMaxHealthMult > 0f) { mixins.add("extrautils.tweaks.damage.MixinDarknessDamage"); } diff --git a/src/main/java/jss/bugtorch/mixins/late/extrautils/tweaks/MixinTileEntityTradingPost.java b/src/main/java/jss/bugtorch/mixins/late/extrautils/tweaks/MixinTileEntityTradingPost.java new file mode 100644 index 0000000..bd1e1a2 --- /dev/null +++ b/src/main/java/jss/bugtorch/mixins/late/extrautils/tweaks/MixinTileEntityTradingPost.java @@ -0,0 +1,34 @@ +package jss.bugtorch.mixins.late.extrautils.tweaks; + +import com.rwtema.extrautils.tileentity.TileEntityTradingPost; +import jss.bugtorch.modsupport.VillageNamesSupport; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.IMerchant; +import net.minecraft.entity.passive.EntityVillager; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.Vec3; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; +import org.spongepowered.asm.mixin.Shadow; + +@Mixin(value = TileEntityTradingPost.class) +public abstract class MixinTileEntityTradingPost { + + /** + * @author jss2a98aj + * @reason Filter out invalid Nitwit trades from Village Names + */ + @Overwrite(remap = false) + public boolean isValidVillager(IMerchant villager, boolean locationAlreadyChecked) { + if(!(villager instanceof EntityLiving)) { + return false; + } + EntityVillager entity = (EntityVillager)villager; + boolean mature = !entity.isChild() && entity.getProfession() != VillageNamesSupport.nitwit; + return mature && (locationAlreadyChecked || getAABB().isVecInside(Vec3.createVectorHelper(entity.posX, entity.posY, entity.posZ))); + } + + @Shadow + public AxisAlignedBB getAABB() { return null; } + +} diff --git a/src/main/java/jss/bugtorch/modsupport/VillageNamesSupport.java b/src/main/java/jss/bugtorch/modsupport/VillageNamesSupport.java index 2fc3847..63b7728 100644 --- a/src/main/java/jss/bugtorch/modsupport/VillageNamesSupport.java +++ b/src/main/java/jss/bugtorch/modsupport/VillageNamesSupport.java @@ -4,6 +4,8 @@ public class VillageNamesSupport { + public static int nitwit = 5; + public static void enableSupport() { //Tweaks if(BugTorchConfig.enableVillageNamesMetadataSensitiveTrades) {