Code:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
public class Firemaking {
private static final int TINDERBOX = 590;
private static Map<Integer, FireData> fireDataList = new HashMap<Integer, FireData>();
private static ArrayList<Fires> fireList = new ArrayList<Fires>();
static {
for (FireData fires : FireData.values()) {
fireDataList.put(fires.getId(), fires);
}
}
public static FireData forId(int id) {
return fireDataList.get(id);
}
private static int getFlameForLog(int itemId) {
switch (itemId) {
case 7404:
return FireData.RED.getFlame();
case 7405:
return FireData.GREEN.getFlame();
case 7406:
return FireData.BLUE.getFlame();
}
return 2732;
}
public static void makeFire(final int playerId, int itemUsed, int usedWith) {
Client c = (Client) PlayerHandler.players[playerId];
if (c == null || c.getDisconnected())
return;
final int itemId = itemUsed != TINDERBOX ? itemUsed : usedWith;
if (forId(itemId) == null) {
return;
}
//make sure there not lighting a fire on top of an object
Region region = Server.getRegionManager().getRegionByLocation(
c.getLocation());
for (GameObject object : region.getGameObjects()) {
if (!object.isWalkable()
&& object.getLocation().getX() == c.getLocation().getX()
&& object.getLocation().getY() == c.getLocation().getY()
&& object.getLocation().getZ() == c.getLocation().getZ()) {
return;
}
}
if (itemUsed == forId(itemId).getId() && usedWith == TINDERBOX
|| itemUsed == TINDERBOX && usedWith == forId(itemId).getId()) {
for (int i = 0; i < fireList.size(); i++) {
if (c.getX() == fireList.get(i).getLoc().getX()
&& c.getY() == fireList.get(i).getLoc().getY()) {
c.sendMessage("You cannot light a fire here.");
return;
}
}
if (forId(itemId).getLevel() > c.playerLevel[c.playerFiremaking]) {
c.sendMessage("You need a fire making level of "
+ forId(itemId).getLevel() + " to light this.");
return;
}
c.startAnimation(733);
c.setWalkable(false);
c.getItems().deleteItem(forId(itemId).getId(),
c.getItems().getItemSlot(forId(itemId).getId()), 1);
CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() {
@Override
public void execute(CycleEventContainer container) {
Client c = (Client) PlayerHandler.players[playerId];
if (c == null || c.getDisconnected())
return;
Location fireLocation = c.getLocation();
fireList.add(new Fires(fireLocation, System
.currentTimeMillis()));
for (int j = 0; j < PlayerHandler.players.length; j++) {
if (PlayerHandler.players[j] != null) {
Client cl = (Client) PlayerHandler.players[j];
cl.getPA().object(getFlameForLog(itemId),
fireLocation.getX(), fireLocation.getY(),
-1, 10);
}
}
c.startAnimation(65535);
c.getPA().addSkillXP(forId(itemId).getXp(),
c.playerFiremaking);
c.setWalkable(true);
c.setFiremakingWalk(true);
container.stop();
CycleEventHandler.getSingleton().addEvent(c,
new CycleEvent() {
@Override
public void execute(
CycleEventContainer container) {
for (int i = 0; i < fireList.size(); i++) {
if ((System.currentTimeMillis() - fireList
.get(i).getTime()) >= (20000 - 1)) {
for (int j = 0; j < PlayerHandler.players.length; j++) {
if (PlayerHandler.players[j] != null) {
Client c = (Client) PlayerHandler.players[j];
c.getPA().object(
6951,
fireList.get(i)
.getLoc()
.getX(),
fireList.get(i)
.getLoc()
.getY(),
-1, 10);
}
}
GroundItem item = new GroundItem(
592, fireList.get(i)
.getLoc().getX(),
fireList.get(i).getLoc()
.getY(), 1, -1, 0,
"");
item.removeTicks = 40;
Server.itemHandler
.createGlobalItem(item);
fireList.remove(i);
container.stop();
break;
}
}
}
@Override
public void stop() {
}
}, 20);
}
@Override
public void stop() {
}
}, 10);
}
}
public static void clippedWalking(int id) {
Client c = (Client) PlayerHandler.players[id];
if (c == null || c.getDisconnected())
return;
Region region = Server.getRegionManager().getRegionByLocation(
c.getLocation());
// TODO implement tiles and also which direction to walk to!
for (GameObject object : region.getGameObjects()) {
if (!object.isWalkable()
&& object.getLocation().getX() == (c.getLocation().getX() - 1)
&& object.getLocation().getY() == c.getLocation().getY()
&& object.getLocation().getZ() == c.getLocation().getZ()) {
c.getPA().walkTo(1, 0);
return;
}
}
c.getPA().walkTo(-1, 0);
}
}
Code:
public enum FireData {
//TODO: this can actually be put in an array instead of an enum
NORMAL(1511, 1, 40), ACHEY(2862, 1, 40), OAK(1521, 15, 60), WILLOW(1519,
30, 90), TEAK(6333, 35, 105), MAPLE(1517, 45, 135), MAHOGANY(6332,
50, 157), YEW(1515, 60, 202), MAGIC(1513, 75, 303), RED(7404, 1,
50, 7329, 11404), GREEN(7405, 1, 50, 7330, 11405), BLUE(7406, 1,
50, 7331, 11406);
private int id, level, xp, lighter, flame;
FireData(int a, int b, int c) {
this.setId(a);
this.setLevel(b);
this.setXp(c);
}
FireData(int a, int b, int c, int d, int e) {
this.setId(a);
this.setLevel(b);
this.setXp(c);
this.setLighter(d);
this.setFlame(e);
}
public void setId(int id) {
this.id = id;
}
public int getId() {
return id;
}
public void setLevel(int level) {
this.level = level;
}
public int getLevel() {
return level;
}
public void setXp(int xp) {
this.xp = xp;
}
public int getXp() {
return xp;
}
public void setLighter(int lighter) {
this.lighter = lighter;
}
public int getLighter() {
return lighter;
}
public void setFlame(int flame) {
this.flame = flame;
}
public int getFlame() {
return flame;
}
}