Skip to content

Commit

Permalink
Add WAILA plugin for cauldron contents
Browse files Browse the repository at this point in the history
  • Loading branch information
KnightMiner committed Jul 4, 2018
1 parent 5a3a485 commit a61676a
Show file tree
Hide file tree
Showing 11 changed files with 155 additions and 9 deletions.
7 changes: 6 additions & 1 deletion build.gradle
Expand Up @@ -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 {
Expand Down
3 changes: 2 additions & 1 deletion build.properties
Expand Up @@ -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.+
hwyla_version=1.8.23-B38_1.12
3 changes: 3 additions & 0 deletions src/main/java/knightminer/inspirations/Inspirations.java
Expand Up @@ -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;
Expand Down Expand Up @@ -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) {
Expand Down
15 changes: 15 additions & 0 deletions src/main/java/knightminer/inspirations/library/Util.java
Expand Up @@ -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;
Expand Down Expand Up @@ -179,4 +180,18 @@ public static void addPotionTooltip(PotionType potionType, List<String> 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;
}
}
Expand Up @@ -171,15 +171,15 @@ 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;
}

/**
* 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) {
Expand All @@ -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) {
Expand Down
@@ -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<String> getWailaBody(ItemStack itemStack, List<String> 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;
}
}
@@ -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");
}
}
@@ -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);
}
}
@@ -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;
Expand Down Expand Up @@ -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);
Expand Down
Expand Up @@ -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
Expand Down
8 changes: 8 additions & 0 deletions src/main/resources/assets/inspirations/lang/en_us.lang
Expand Up @@ -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
Expand All @@ -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 #
############
Expand Down

0 comments on commit a61676a

Please sign in to comment.