alright i got the interface open but i need set the attribute so i can get this to work, i can't seem to call smelt appropiately
heres the object option, where it says
Code:
Smelt smelt = Smelt.forId(smelt.getId());
thats where the error is under smelt.getId i can't seem to call it right
Code:
if(obj.getDefinition() != null) {
Smelt smelt = Smelt.forId(smelt.getId());
if(obj.getDefinition().getName().toLowerCase().contains("furnace")) {
player.getActionSender().sendChatboxInterface(311);
player.getActionSender().sendInterfaceModel(311, 4, 125, 2349);//Bronze bar.
player.getActionSender().sendInterfaceModel(311, 5, 125, 9467);//Blurite bar.
player.getActionSender().sendInterfaceModel(311, 6, 125, 2351);//Iron bar.
player.getActionSender().sendInterfaceModel(311, 7, 125, 2355);//Silver
player.getActionSender().sendInterfaceModel(311, 8, 125, 2353);//Steel bar.
player.getActionSender().sendInterfaceModel(311, 9, 125, 2357);//Gold bar.
player.getActionSender().sendInterfaceModel(311, 10, 125, 2359);//Mithril bar.
player.getActionSender().sendInterfaceModel(311, 11, 125, 2361);//Adamant bar.
player.getActionSender().sendInterfaceModel(311, 12, 125, 2363);//Rune bar
player.setInterfaceAttribute("smelting_type", Smelt);
}
}
here's the class i posted in pastebin aswell so it's easier to read http://pastebin.com/uTfqbJhZ
Code:
package org.rs2server.rs2.model.skills;
import java.util.HashMap;
import java.util.Map;
import org.rs2server.rs2.action.impl.ProductionAction;
import org.rs2server.rs2.model.Animation;
import org.rs2server.rs2.model.Graphic;
import org.rs2server.rs2.model.Item;
import org.rs2server.rs2.model.Mob;
import org.rs2server.rs2.model.Skills;
public class Smelting extends ProductionAction {
/**
* The amount of times to produce this item.
*/
private int productionCount;
private int smeltIndex;
/**
* The ingredient type.
*/
private Smelt smelt;
public Smelting(Mob mob, int productionCount, int smeltIndex, Smelt smelt) {
super(mob);
this.productionCount = productionCount;
this.smeltIndex = smeltIndex;
this.smelt = smelt;
}
public enum Smelt {
//Regret the way I did this but whatever
//BARS(1, 436, new Item(438, 1), 2349, 1, 25);
//Reward -- 1st req -- 2nd req -- amount for 2nd -- level -- exp
BARS(1, new int[] {2349, 9467, 2351, 2353, 2355, 2357, 2359, 2361, 2363}, new int[] {436, 668, 440, 442, 440, 444, 447, 449, 451},
new int[] {438, 453, 440, 442, 453, 444, 453, 453, 453}, new int[] {1, 1, 0, 0, 2, 0, 4, 6, 8}, new int[] {1, 8, 15, 20, 30, 40, 50, 70, 85},
new double[]{10, 10, 10, 10, 10, 10, 10, 10, 10});
private int index;
/**
* The bar.
*/
private int[] itemId;
/**
* The first item.
*/
private int[] firstItem;
/**
* The 2nd item.
*/
private int[] secondItem;
/**
* The amount for secondary.
*/
private int[] amount;
/**
* The level.
*/
private int[] level;
/**
* The experience.
*/
private double[] exp;
private static Map<Integer, Smelt> ores = new HashMap<>();
public static Smelt forId(int item) {
return ores.get(item);
}
/**
* Populates the map.
*/
static {
for (Smelt ore : Smelt.values()) {
ores.put(ore.index, ore);
}
}
private Smelt(int index, int[] itemId, int[] firstItem, int[] secondItem, int[] amount, int[] level, double[] exp) {
this.index = index;
this.itemId = itemId;
this.firstItem = firstItem;
this.secondItem = secondItem;
this.amount = amount;
this.level = level;
this.exp = exp;
}
/**
* Gets the index.
*
* @return The index.
*/
public int getIndex() {
return index;
}
/**
* Gets the bar id.
*
* @return The id.
*/
public int[] getId() {
return itemId;
}
public int[] getFirst() {
return firstItem;
}
/**
* Gets the second requried id.
*
* @return The required id.
*/
public int[] getSecond() {
return secondItem;
}
/**
* Gets the required level.
*
* @return The required level.
*/
public int[] getRequiredLevel() {
return level;
}
/**
* Gets the reward.
*
* @return The reward.
*/
public int[] getAmount() {
return amount;
}
/**
* Gets the exp.
*
* @return The exp.
*/
public double[] getExperience() {
return exp;
}
}
@Override
public boolean canProduce() {
return true;
}
@Override
public Animation getAnimation() {
return Animation.create(363);
}
@Override
public Item[] getConsumedItems() {
return new Item[] { new Item(smelt.getFirst()[smeltIndex]), new Item(smelt.getSecond()[smeltIndex], smelt.getAmount()[smeltIndex])};
}
@Override
public int getCycleCount() {
return 4;
}
@Override
public double getExperience() {
return smelt.getExperience()[smeltIndex];
}
@Override
public Graphic getGraphic() {
return null;
}
@Override
public String getLevelTooLowMessage() {
return "You need a " + Skills.SKILL_NAME[getSkill()] + " level of " + getRequiredLevel() + " to smelt these ores.";
}
@Override
public int getProductionCount() {
return productionCount;
}
@Override
public int getRequiredLevel() {
return smelt.getRequiredLevel()[smeltIndex];
}
@Override
public Item[] getRewards() {
return new Item[] { new Item(smelt.getId()[smeltIndex]) };
}
@Override
public int getSkill() {
return Skills.SMITHING;
}
@Override
public String getSuccessfulProductionMessage() {
return "You smelt the ores into a bar";
}
}
and here's the buttons maybe theres a better way; but i'm trying to call te interface attribute here
Code:
player.getActionQueue().addAction(new Smelting(player, productionCount, smeltIndex, (Smelt) player.getInterfaceAttribute("smelt_type")));
here's the button
Code:
case 311:
int smeltIndex = -1;
int productionCount = -1;
switch(button) {
case 16:
case 6:
case 5:
case 4:
smeltIndex = 0;
break;
case 11:
case 10:
case 9:
case 8:
smeltIndex = 1;
break;
}
switch(button) {
case 16:
case 11:
productionCount = 1;
break;
case 6:
case 10:
productionCount = 5;
break;
case 5:
case 9:
productionCount = 10;
break;
case 4:
case 8:
//player.getInterfaceState().openEnterAmountInterface(303, logIndex, -1);
//player.setInterfaceAttribute("fletching_index", logIndex);
break;
}
if(productionCount != -1) {
player.getActionQueue().addAction(new Smelting(player, productionCount, smeltIndex, (Smelt) player.getInterfaceAttribute("smelt_type")));
player.getActionSender().removeChatboxInterface();
}
break;