diff --git a/build.gradle b/build.gradle index 7784dc58..273343d0 100644 --- a/build.gradle +++ b/build.gradle @@ -45,15 +45,20 @@ compileJava { } repositories { - maven { + maven { // Mantle and JEI name 'DVS1 Maven FS' url 'http://dvs1.progwml6.com/files/maven' } + maven { // WAILA + name "Tehnut Maven FS" + url "http://tehnut.info/maven" + } } dependencies { deobfCompile "mezz.jei:jei_${config.minecraft_version}:${config.jei_version}" deobfCompile "slimeknights.mantle:Mantle:${config.minecraft_base_version}-${config.mantle_version}" + deobfCompile "mcp.mobius.waila:Hwyla:${config.hwyla_version}" } processResources { diff --git a/build.properties b/build.properties index ec2eda14..eeace175 100644 --- a/build.properties +++ b/build.properties @@ -3,6 +3,7 @@ minecraft_version=1.12.2 minecraft_base_version=1.12 forge_version=14.23.2.2624 mappings=snapshot_20171003 +mantle_version=1.3.1.+ jei_version=4.8.+ -mantle_version=1.3.1.+ \ No newline at end of file +hwyla_version=1.8.23-B38_1.12 diff --git a/src/main/java/knightminer/inspirations/Inspirations.java b/src/main/java/knightminer/inspirations/Inspirations.java index 4376d0d7..0070dfcf 100644 --- a/src/main/java/knightminer/inspirations/Inspirations.java +++ b/src/main/java/knightminer/inspirations/Inspirations.java @@ -7,6 +7,7 @@ import knightminer.inspirations.common.Config; import knightminer.inspirations.common.network.InspirationsNetwork; import knightminer.inspirations.plugins.tan.ToughAsNailsPlugin; +import knightminer.inspirations.plugins.waila.WailaPlugin; import knightminer.inspirations.recipes.InspirationsRecipes; import knightminer.inspirations.shared.InspirationsOredict; import knightminer.inspirations.shared.InspirationsShared; @@ -50,7 +51,9 @@ public class Inspirations { pulseManager.registerPulse(new InspirationsRecipes()); pulseManager.registerPulse(new InspirationsTweaks()); pulseManager.registerPulse(new InspirationsOredict()); + // plugins pulseManager.registerPulse(new ToughAsNailsPlugin()); + pulseManager.registerPulse(new WailaPlugin()); // needs to be done statically, but only the recipes module uses it if(pulseManager.isPulseLoaded(InspirationsRecipes.pulseID) && Config.enableCauldronFluids) { diff --git a/src/main/java/knightminer/inspirations/library/Util.java b/src/main/java/knightminer/inspirations/library/Util.java index 150e7428..1cea6e44 100644 --- a/src/main/java/knightminer/inspirations/library/Util.java +++ b/src/main/java/knightminer/inspirations/library/Util.java @@ -12,6 +12,7 @@ import net.minecraft.block.state.IBlockState; import net.minecraft.init.Blocks; import net.minecraft.init.Items; +import net.minecraft.item.EnumDyeColor; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.potion.Potion; @@ -179,4 +180,18 @@ public static void addPotionTooltip(PotionType potionType, List lores) { lores.add((potion.isBadEffect() ? TextFormatting.RED : TextFormatting.BLUE) + effectString); } } + + /** + * Gets the dye color for the given color int + * @param color Dye color input + * @return EnumDyeColor matching, or null for no match + */ + public static EnumDyeColor getDyeForColor(int color) { + for(EnumDyeColor dyeColor : EnumDyeColor.values()) { + if(dyeColor.colorValue == color) { + return dyeColor; + } + } + return null; + } } diff --git a/src/main/java/knightminer/inspirations/library/recipe/cauldron/ICauldronRecipe.java b/src/main/java/knightminer/inspirations/library/recipe/cauldron/ICauldronRecipe.java index 6e701f6e..3c45ed2c 100644 --- a/src/main/java/knightminer/inspirations/library/recipe/cauldron/ICauldronRecipe.java +++ b/src/main/java/knightminer/inspirations/library/recipe/cauldron/ICauldronRecipe.java @@ -171,7 +171,7 @@ public boolean isWater() { /** * Gets the color for this state - * @return color for the state, or -1 if the type is not DYE + * @return color for the state, or -1 if the type is not a dye */ public int getColor() { return color; @@ -179,7 +179,7 @@ public int getColor() { /** * Gets the potion for this state - * @return potion for this state + * @return potion for this state, or null if it is not a potion */ public PotionType getPotion() { if(this == WATER) { @@ -190,7 +190,7 @@ public PotionType getPotion() { /** * Gets the fluid for this state - * @return fluid for this state + * @return fluid for this state, or null if it is not a fluid */ public Fluid getFluid() { if(this == WATER) { diff --git a/src/main/java/knightminer/inspirations/plugins/waila/CauldronProvider.java b/src/main/java/knightminer/inspirations/plugins/waila/CauldronProvider.java new file mode 100644 index 00000000..7dcb4c1f --- /dev/null +++ b/src/main/java/knightminer/inspirations/plugins/waila/CauldronProvider.java @@ -0,0 +1,71 @@ +package knightminer.inspirations.plugins.waila; + +import java.util.List; + +import knightminer.inspirations.library.InspirationsRegistry; +import knightminer.inspirations.library.Util; +import knightminer.inspirations.library.recipe.cauldron.ICauldronRecipe.CauldronState; +import knightminer.inspirations.recipes.block.BlockEnhancedCauldron; +import knightminer.inspirations.recipes.tileentity.TileCauldron; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; +import mcp.mobius.waila.api.IWailaDataProvider; +import net.minecraft.block.state.IBlockState; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; + +public class CauldronProvider implements IWailaDataProvider { + @Override + public List getWailaBody(ItemStack itemStack, List current, IWailaDataAccessor accessor, IWailaConfigHandler config) { + if(!config.getConfig(WailaRegistrar.CONFIG_CAULDRON)) { + return current; + } + + // first, ensure it is a cauldron + IBlockState state = accessor.getBlockState(); + if(state.getBlock() instanceof BlockEnhancedCauldron) { + int level = ((BlockEnhancedCauldron)state.getBlock()).getLevel(state); + String colorString = null; + + // if we have a TE and the levels are at least 1, try fancy string + if(level > 0 && accessor.getTileEntity() instanceof TileCauldron) { + CauldronState cauldron = ((TileCauldron) accessor.getTileEntity()).getState(); + + // fluids are pretty simple, unlocalized name + if(cauldron.getFluid() != null) { + Fluid fluid = cauldron.getFluid(); + current.add(fluid.getLocalizedName(new FluidStack(fluid, 1000))); + + // likewise potions are simple + } else if(cauldron.getPotion() != null) { + current.add(Util.translate(cauldron.getPotion().getNamePrefixed("potion.effect."))); + + // dyes are a bit more work + } else if(cauldron.getColor() != -1) { + int color = cauldron.getColor(); + colorString = "#" + Integer.toHexString(color).toUpperCase(); + + // first, try a dye color + EnumDyeColor dyeColor = Util.getDyeForColor(color); + if(dyeColor != null) { + current.add(Util.translateFormatted("gui.jei.cauldron.color", Util.translate("item.fireworksCharge.%s", dyeColor.getUnlocalizedName()))); + } else { + // if not a dye color, just display as is and display the color on the next line + current.add(Util.translate("gui.inspirations.cauldron.dye")); + } + } + } + + // add bottles + current.add(Util.translateFormatted("gui.waila.inspirations.cauldron.bottles", level, InspirationsRegistry.getCauldronMax())); + + // if we were given a color string, show it + if(colorString != null && accessor.getPlayer().isSneaking()) { + current.add(Util.translateFormatted("gui.waila.inspirations.cauldron.color", colorString)); + } + } + return current; + } +} diff --git a/src/main/java/knightminer/inspirations/plugins/waila/WailaPlugin.java b/src/main/java/knightminer/inspirations/plugins/waila/WailaPlugin.java new file mode 100644 index 00000000..284c21f5 --- /dev/null +++ b/src/main/java/knightminer/inspirations/plugins/waila/WailaPlugin.java @@ -0,0 +1,17 @@ +package knightminer.inspirations.plugins.waila; + +import com.google.common.eventbus.Subscribe; + +import net.minecraftforge.fml.common.event.FMLInterModComms; +import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; +import slimeknights.mantle.pulsar.pulse.Pulse; + +@Pulse(id = "WailaPlugin", modsRequired = WailaPlugin.modid, defaultEnable = true) +public class WailaPlugin { + public static final String modid = "waila"; + + @Subscribe + public void preInit(FMLPreInitializationEvent event) { + FMLInterModComms.sendMessage(modid, "register", "knightminer.inspirations.plugins.waila.WailaRegistrar.registerWaila"); + } +} diff --git a/src/main/java/knightminer/inspirations/plugins/waila/WailaRegistrar.java b/src/main/java/knightminer/inspirations/plugins/waila/WailaRegistrar.java new file mode 100644 index 00000000..2319a066 --- /dev/null +++ b/src/main/java/knightminer/inspirations/plugins/waila/WailaRegistrar.java @@ -0,0 +1,18 @@ +package knightminer.inspirations.plugins.waila; + +import knightminer.inspirations.Inspirations; +import knightminer.inspirations.library.Util; +import knightminer.inspirations.recipes.tileentity.TileCauldron; +import mcp.mobius.waila.api.IWailaRegistrar; + +public class WailaRegistrar { + + static final String CONFIG_CAULDRON = Util.prefix("cauldron"); + public static void registerWaila(IWailaRegistrar registrar) { + // config entries + registrar.addConfig(Inspirations.modName, CONFIG_CAULDRON, true); + + // cauldron info + registrar.registerBodyProvider(new CauldronProvider(), TileCauldron.class); + } +} diff --git a/src/main/java/knightminer/inspirations/recipes/item/ItemDyedWaterBottle.java b/src/main/java/knightminer/inspirations/recipes/item/ItemDyedWaterBottle.java index 7d1609d8..a87dfb4b 100644 --- a/src/main/java/knightminer/inspirations/recipes/item/ItemDyedWaterBottle.java +++ b/src/main/java/knightminer/inspirations/recipes/item/ItemDyedWaterBottle.java @@ -1,5 +1,6 @@ package knightminer.inspirations.recipes.item; +import knightminer.inspirations.library.Util; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.init.Items; import net.minecraft.item.EnumDyeColor; @@ -42,10 +43,9 @@ public int getColor(ItemStack stack) { } public ItemStack getStackWithColor(int color) { - for(EnumDyeColor dyeColor : EnumDyeColor.values()) { - if(dyeColor.colorValue == color) { - return new ItemStack(this, 1, dyeColor.getDyeDamage()); - } + EnumDyeColor dyeColor = Util.getDyeForColor(color); + if(dyeColor != null) { + return new ItemStack(this, 1, dyeColor.getDyeDamage()); } ItemStack result = new ItemStack(this, 1, 16); diff --git a/src/main/java/knightminer/inspirations/recipes/tileentity/TileCauldron.java b/src/main/java/knightminer/inspirations/recipes/tileentity/TileCauldron.java index 8a0c252f..076a226e 100644 --- a/src/main/java/knightminer/inspirations/recipes/tileentity/TileCauldron.java +++ b/src/main/java/knightminer/inspirations/recipes/tileentity/TileCauldron.java @@ -77,6 +77,14 @@ public boolean isWater() { return state.isWater(); } + /** + * Gets the current cauldron state + * @return current state + */ + public CauldronState getState() { + return state; + } + /** * Returns the current color for tinting * @return block colors color diff --git a/src/main/resources/assets/inspirations/lang/en_us.lang b/src/main/resources/assets/inspirations/lang/en_us.lang index 3d0f9c81..24ec099e 100644 --- a/src/main/resources/assets/inspirations/lang/en_us.lang +++ b/src/main/resources/assets/inspirations/lang/en_us.lang @@ -147,6 +147,10 @@ fluid.inspirations.milk=Milk death.attack.inspirations.boiling=%s was boiled alive +# GUI +gui.inspirations.cauldron.dye=Dyed Water +gui.inspirations.cauldron.color=Color: %s + # JEI gui.jei.anvil_smashing.title=Anvil Smashing gui.jei.cauldron.title=Cauldron @@ -156,6 +160,10 @@ gui.jei.cauldron.level.empty=Empty gui.jei.cauldron.color=%s Dyed Water gui.jei.cauldron.boiling=Cauldron must be placed above fire +# WAILA +options.inspirations.cauldron=Cauldron +gui.waila.inspirations.cauldron.bottles=%s / %s bottles + ############ # Tools # ############