package pneumaticCraft.common.thirdparty.igwmod; import igwmod.TextureSupplier; import igwmod.WikiUtils; import igwmod.api.IRecipeIntegrator; import igwmod.gui.GuiWiki; import igwmod.gui.IReservedSpace; import igwmod.gui.IWidget; import igwmod.gui.LocatedEntity; import igwmod.gui.LocatedStack; import igwmod.gui.LocatedString; import igwmod.gui.LocatedTexture; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Random; import net.minecraft.client.resources.I18n; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.entity.passive.EntityVillager; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import pneumaticCraft.api.recipe.PressureChamberRecipe; import pneumaticCraft.common.config.Config; import pneumaticCraft.common.recipes.PneumaticRecipeRegistry; import pneumaticCraft.lib.Textures; public class IntegratorPressureChamber implements IRecipeIntegrator{ @Override public String getCommandKey(){ return "pressureChamber"; } @Override public void onCommandInvoke(String[] arguments, List<IReservedSpace> reservedSpaces, List<LocatedString> locatedStrings, List<LocatedStack> locatedStacks, List<IWidget> locatedTextures) throws IllegalArgumentException{ if(arguments.length != 3) throw new IllegalArgumentException("Code needs 3 arguments!"); int x; try { x = Integer.parseInt(arguments[0]); } catch(NumberFormatException e) { throw new IllegalArgumentException("The first parameter (the x coordinate) contains an invalid number. Check for invalid characters!"); } int y; try { y = Integer.parseInt(arguments[1]); } catch(NumberFormatException e) { throw new IllegalArgumentException("The second parameter (the y coordinate) contains an invalid number. Check for invalid characters!"); } locatedTextures.add(new LocatedTexture(TextureSupplier.getTexture(Textures.ICON_LOCATION + "textures/wiki/pressureChamberRecipe.png"), x, y, 1 / GuiWiki.TEXT_SCALE)); //Look up the recipe if(arguments[2].equals("disenchanting")) { handleDisenchanting(x, y, locatedStacks); } else if(arguments[2].equals("villagers")) { handleVillagers(x, y, locatedTextures); } else { PressureChamberRecipe foundRecipe = null; for(PressureChamberRecipe recipe : PressureChamberRecipe.chamberRecipes) { for(ItemStack output : recipe.output) { if(WikiUtils.getNameFromStack(output).equals(arguments[2])) { foundRecipe = recipe; break; } } } if(foundRecipe == null) throw new IllegalArgumentException("No recipe found for the key " + arguments[2]); locatedStrings.add(new LocatedString(I18n.format("igwmod.pressureChamber.requiredPressure") + ":", x + 180, y + 10, 0xFF000000, false)); locatedStrings.add(new LocatedString(foundRecipe.pressure + " bar", x + 215, y + 20, 0xFF000000, false)); for(int i = 0; i < foundRecipe.input.length; i++) { LocatedStack stack = new LocatedStack(PneumaticRecipeRegistry.getSingleStack(foundRecipe.input[i]), (int)((x + 36 + i % 3 * 34) * GuiWiki.TEXT_SCALE), (int)((y + 102 - i / 3 * 34) * GuiWiki.TEXT_SCALE)); locatedStacks.add(stack); } for(int i = 0; i < foundRecipe.output.length; i++) { LocatedStack stack = new LocatedStack(foundRecipe.output[i], (int)((x + 180 + i % 3 * 36) * GuiWiki.TEXT_SCALE), (int)((y + 60 + i / 3 * 36) * GuiWiki.TEXT_SCALE)); locatedStacks.add(stack); } } } private void handleVillagers(int x, int y, List<IWidget> locatedTextures){ locatedTextures.add(new LocatedEntity(EntityVillager.class, x + 70, y + 95, 2F)); LocatedEntity locatedEntity = new LocatedEntity(EntityVillager.class, x + 215, y + 125, 2F); EntityVillager villager = (EntityVillager)locatedEntity.entity; villager.setProfession(Config.villagerMechanicID); locatedTextures.add(locatedEntity); } private void handleDisenchanting(int x, int y, List<LocatedStack> locatedStacks){ List<ItemStack> input = new ArrayList<ItemStack>(); List<ItemStack> output = new ArrayList<ItemStack>(); ItemStack enchantedItem = new ItemStack(Items.diamond_sword); EnchantmentHelper.addRandomEnchantment(new Random(), enchantedItem, 30); input.add(enchantedItem); output.add(new ItemStack(Items.diamond_sword)); Map<Integer, Integer> enchants = EnchantmentHelper.getEnchantments(enchantedItem); for(Map.Entry<Integer, Integer> enchant : enchants.entrySet()) { ItemStack enchantedBook = new ItemStack(Items.enchanted_book); Map<Integer, Integer> newMap = new HashMap<Integer, Integer>(); newMap.put(enchant.getKey(), enchant.getValue()); EnchantmentHelper.setEnchantments(newMap, enchantedBook); output.add(enchantedBook); input.add(new ItemStack(Items.book)); } for(int i = 0; i < input.size(); i++) { LocatedStack stack = new LocatedStack(input.get(i), (int)((x + 36 + i % 3 * 34) * GuiWiki.TEXT_SCALE), (int)((y + 102 - i / 3 * 34) * GuiWiki.TEXT_SCALE)); locatedStacks.add(stack); } for(int i = 0; i < output.size(); i++) { LocatedStack stack = new LocatedStack(output.get(i), (int)((x + 180 + i % 3 * 36) * GuiWiki.TEXT_SCALE), (int)((y + 60 + i / 3 * 36) * GuiWiki.TEXT_SCALE)); locatedStacks.add(stack); } } }