try { toolPart = ToolBuilder.tryBuildToolPart(patternSlot.getStack(), ListUtil.getListFrom(input1.getStack(), input2.getStack()), false); if(toolPart != null && !toolPart.get(0).isEmpty()) { TinkerCraftingEvent.ToolPartCraftingEvent.fireEvent(toolPart.get(0), player); (secondary.isEmpty() || toolPart.get(1).isEmpty() || ItemStack.areItemsEqual(secondary, toolPart.get(1)) && ItemStack.areItemStackTagsEqual(secondary, toolPart.get(1)))) { craftResult.setInventorySlotContents(0, toolPart.get(0));
/** * Builds an Itemstack of this tool with the given materials, if applicable. * * @param stacks Items to build with. Have to be in the correct order and have exact length. No nulls! * @return The built item or null if invalid input. */ @Nonnull public ItemStack buildItemFromStacks(NonNullList<ItemStack> stacks) { long itemCount = stacks.stream().filter(stack -> !stack.isEmpty()).count(); List<Material> materials = new ArrayList<>(stacks.size()); if(itemCount != requiredComponents.length) { return ItemStack.EMPTY; } // not a valid part arrangement for this tool for(int i = 0; i < itemCount; i++) { if(!validComponent(i, stacks.get(i))) { return ItemStack.EMPTY; } materials.add(TinkerUtil.getMaterialFromStack(stacks.get(i))); } return buildItem(materials); }
@Override public Optional<Match> matches(NonNullList<ItemStack> stacks) { List<ItemStack> matches = Lists.newArrayList(); Optional<Match> match = super.matches(stacks); while(match.isPresent() && matches.size() < 3) { ItemStack stack = match.get().stacks.get(0); matches.add(stack); // remove all meats of the same kind for(int i = 0; i < stacks.size(); i++) { if(stacks.get(i).getItem() == stack.getItem()) { stacks.set(i, ItemStack.EMPTY); } } match = super.matches(stacks); } if(matches.size() >= 3) { return Optional.of(new Match(matches, 1)); } return Optional.empty(); } }
@SubscribeEvent public static void onToolPartReplace(TinkerCraftingEvent.ToolPartReplaceEvent event) { ItemStack firstStack = event.getToolParts().get(0); if(firstStack.getItem() instanceof ToolPart) { if(((ToolPart) firstStack.getItem()).getMaterial(firstStack).equals(TinkerMaterials.ardite)) { event.setCanceled(true); } } } }
@Override public ItemStack repair(ItemStack repairable, NonNullList<ItemStack> repairItems) { if(repairable.getItemDamage() == 0) { // nothing to repair, full durability return ItemStack.EMPTY; } // don't accept anything that's not wheat for(ItemStack repairItem : repairItems) { if(repairItem != null && repairItem.getItem() != Items.WHEAT) { return ItemStack.EMPTY; } } ItemStack stack = repairable.copy(); int index = 0; while(stack.getItemDamage() > 0 && index < repairItems.size()) { ItemStack repairItem = repairItems.get(index); if(repairItem.getCount() > 0) { repairItem.shrink(1); //change = Math.min(change, stack.getMaxDamage() - stack.getItemDamage()); stack.setItemDamage(stack.getItemDamage() - USES_PER_WHEAT); ToolHelper.healTool(stack, USES_PER_WHEAT, null); } else { index++; } } return stack; }
if(stacks.get(i).isEmpty()) { if(length < 0) { length = i;
@Override public void onCrafting(EntityPlayer player, ItemStack output, IInventory craftMatrix) { NonNullList<ItemStack> toolPart = NonNullList.create(); try { toolPart = ToolBuilder.tryBuildToolPart(patternSlot.getStack(), ListUtil.getListFrom(input1.getStack(), input2.getStack()), true); } catch(TinkerGuiException e) { // don't need any user information at this stage } if(toolPart == null) { // undefined :I return; } ItemStack secondOutput = toolPart.get(1); ItemStack secondary = secondarySlot.getStack(); if(secondary.isEmpty()) { putStackInSlot(secondarySlot.slotNumber, secondOutput); } else if(!secondOutput.isEmpty() && ItemStack.areItemsEqual(secondary, secondOutput) && ItemStack.areItemStackTagsEqual(secondary, secondOutput)) { secondary.grow(secondOutput.getCount()); } // clean up 0 size stacks // todo: this shouldn't be needed anymore, check /*for(int i = 0; i < craftMatrix.getSizeInventory(); i++) { if(craftMatrix.getStackInSlot(i).isEmpty() != null && craftMatrix.getStackInSlot(i).stackSize == 0) { craftMatrix.setInventorySlotContents(i, null); } }*/ updateResult(); }
public static IItemHandler getFakeInv(EntityPlayer player) { ItemStackHandler ret = new ItemStackHandler(player.inventory.mainInventory.size()); for(int i = 0; i < player.inventory.mainInventory.size(); i++) { ret.setStackInSlot(i, player.inventory.mainInventory.get(i).copy()); } return ret; }
@Override public boolean hasArmorSetItem(EntityPlayer player, int i) { if(player == null || player.inventory == null || player.inventory.armorInventory == null) return false; ItemStack stack = player.inventory.armorInventory.get(3 - i); if(stack.isEmpty()) return false; switch(i) { case 0: return stack.getItem() == ModItems.manaweaveHelm; case 1: return stack.getItem() == ModItems.manaweaveChest; case 2: return stack.getItem() == ModItems.manaweaveLegs; case 3: return stack.getItem() == ModItems.manaweaveBoots; } return false; }
public boolean hasArmorSetItem(EntityPlayer player, int i) { if(player == null || player.inventory == null || player.inventory.armorInventory == null) return false; ItemStack stack = player.inventory.armorInventory.get(3 - i); if(stack.isEmpty()) return false; switch(i) { case 0: return stack.getItem() == ModItems.manasteelHelm || stack.getItem() == ModItems.manasteelHelmRevealing; case 1: return stack.getItem() == ModItems.manasteelChest; case 2: return stack.getItem() == ModItems.manasteelLegs; case 3: return stack.getItem() == ModItems.manasteelBoots; } return false; }
@Override public boolean hasArmorSetItem(EntityPlayer player, int i) { if(player == null || player.inventory == null || player.inventory.armorInventory == null) return false; ItemStack stack = player.inventory.armorInventory.get(3 - i); if(stack.isEmpty()) return false; switch(i) { case 0: return stack.getItem() == ModItems.elementiumHelm || stack.getItem() == ModItems.elementiumHelmRevealing; case 1: return stack.getItem() == ModItems.elementiumChest; case 2: return stack.getItem() == ModItems.elementiumLegs; case 3: return stack.getItem() == ModItems.elementiumBoots; } return false; }
@Override public boolean hasArmorSetItem(EntityPlayer player, int i) { if(player == null || player.inventory == null || player.inventory.armorInventory == null) return false; ItemStack stack = player.inventory.armorInventory.get(3 - i); if(stack.isEmpty()) return false; switch(i) { case 0: return stack.getItem() == ModItems.terrasteelHelm || stack.getItem() == ModItems.terrasteelHelmRevealing; case 1: return stack.getItem() == ModItems.terrasteelChest; case 2: return stack.getItem() == ModItems.terrasteelLegs; case 3: return stack.getItem() == ModItems.terrasteelBoots; } return false; }
/** * Gets the sum of all the discounts on IManaDiscountArmor items equipped * on the player passed in. This discount can vary based on what the passed tool is. */ public static float getFullDiscountForTools(EntityPlayer player, ItemStack tool) { float discount = 0F; for(int i = 0; i < player.inventory.armorInventory.size(); i++) { ItemStack armor = player.inventory.armorInventory.get(i); if(!armor.isEmpty() && armor.getItem() instanceof IManaDiscountArmor) discount += ((IManaDiscountArmor) armor.getItem()).getDiscount(armor, i, player, tool); } ManaDiscountEvent event = new ManaDiscountEvent(player, discount, tool); MinecraftForge.EVENT_BUS.post(event); discount = event.getDiscount(); return discount; } }
@Override @SideOnly(Side.CLIENT) public void renderRecipe(IGuiLexiconEntry gui, int mx, int my) { RecipeElvenTrade recipe = recipes.get(recipeAt); TextureManager render = Minecraft.getMinecraft().renderEngine; render.bindTexture(elvenTradeOverlay); GlStateManager.enableBlend(); GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); GlStateManager.color(1F, 1F, 1F, 1F); ((GuiScreen) gui).drawTexturedModalRect(gui.getLeft(), gui.getTop(), 0, 0, gui.getWidth(), gui.getHeight()); GlStateManager.disableBlend(); List<ItemStack> outputs = recipe.getOutputs(); for(int i = 0; i < outputs.size(); i++) { renderItemAtOutputPos(gui, i % 2, i / 2, outputs.get(i)); } List<Object> inputs = recipe.getInputs(); int i = 0; for(Object obj : inputs) { Object input = obj; if(input instanceof String) input = OreDictionary.getOres((String) input).get(0); renderItemAtInputPos(gui, i, (ItemStack) input); i++; } TextureAtlasSprite portalIcon = MiscellaneousIcons.INSTANCE.alfPortalTex; Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); ((GuiScreen) gui).drawTexturedModalRect(gui.getLeft() + 22, gui.getTop() + 36, portalIcon, 48, 48); }
@Override @SideOnly(Side.CLIENT) public void renderRecipe(IGuiLexiconEntry gui, int mx, int my) { T recipe = recipes.get(recipeAt); TextureManager render = Minecraft.getMinecraft().renderEngine; renderItemAtGridPos(gui, 3, 0, recipe.getOutput(), false); renderItemAtGridPos(gui, 2, 1, getMiddleStack(), false); List<Object> inputs = recipe.getInputs(); int degreePerInput = (int) (360F / inputs.size()); float currentDegree = ConfigHandler.lexiconRotatingItems ? GuiScreen.isShiftKeyDown() ? ticksElapsed : ticksElapsed + ClientTickHandler.partialTicks : 0; int inputIndex = ticksElapsed / 40; for(Object obj : inputs) { Object input = obj; if(input instanceof String) { NonNullList<ItemStack> list = OreDictionary.getOres((String) input); int size = list.size(); input = list.get(size - inputIndex % size - 1); } renderItemAtAngle(gui, currentDegree, (ItemStack) input); currentDegree += degreePerInput; } renderManaBar(gui, recipe, mx, my); render.bindTexture(petalOverlay); GlStateManager.enableBlend(); GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); GlStateManager.color(1F, 1F, 1F, 1F); ((GuiScreen) gui).drawTexturedModalRect(gui.getLeft(), gui.getTop(), 0, 0, gui.getWidth(), gui.getHeight()); GlStateManager.disableBlend(); }
@SubscribeEvent(priority = EventPriority.HIGH) public void onPlayerClone(PlayerEvent.Clone evt) { if(!evt.isWasDeath() || evt.isCanceled()) { return; } if(evt.getOriginal() == null || evt.getEntityPlayer() == null || evt.getEntityPlayer() instanceof FakePlayer) { return; } if(evt.getEntityPlayer().getEntityWorld().getGameRules().getBoolean("keepInventory")) { return; } for(int i = 0; i < evt.getOriginal().inventory.mainInventory.size(); i++) { ItemStack stack = evt.getOriginal().inventory.mainInventory.get(i); if(TinkerUtil.hasModifier(stack.getTagCompound(), this.identifier)) { evt.getEntityPlayer().inventory.addItemStackToInventory(stack); evt.getOriginal().inventory.mainInventory.set(i, ItemStack.EMPTY); } } } }
private void registerBrewAspects() { for(RecipeBrew brewRecipe : BotaniaAPI.brewRecipes) { AspectList aspects = new AspectList(); for(Object input : brewRecipe.getInputs()) { ItemStack toAdd = ItemStack.EMPTY; if(input instanceof ItemStack) { toAdd = (ItemStack) input; } else if(input instanceof String) { toAdd = OreDictionary.getOres((String) input).get(0); } AspectList ingredientAspects = AspectHelper.getObjectAspects(toAdd); for (Aspect a : ingredientAspects.getAspects()) aspects.add(a, ingredientAspects.getAmount(a)); } for(Aspect aspect : aspects.getAspects()) { aspects.reduce(aspect, aspects.getAmount(aspect) / 2); } aspects.add(ALCHEMY, 8); for(ItemStack brewContainer : brewContainers) { ItemStack brewed = brewRecipe.getOutput(brewContainer); if(!brewed.isEmpty()) { proxy.registerObjectTag(brewed, new AspectList().add(aspects)); } } } }
for(Object input : inputs) { if(input instanceof String) input = OreDictionary.getOres((String) input).get(0);
final ItemStack itemstack2 = aitemstack.get( i );