Simple ladder system as we dont have one
Add This Class LadderActions.java
package com.elvarg.game.entity.impl.object;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import com.elvarg.game.definition.ObjectDefinition;
import com.elvarg.game.entity.impl.player.Player;
import com.elvarg.game.model.Animation;
import com.elvarg.game.model.Position;
import com.elvarg.game.task.Task;
import com.elvarg.game.task.TaskManager;
/**
* Handles player clicking ladders
*
* @author CodeForLife
*/
public class LadderActions {
/**
* checks if we have a ladder to climb
* based on the clicked object.
*
* @param player
* @param object
* @param def
* @param position
* @return
*/
public static boolean climbLadder(Player player, GameObject object, ObjectDefinition def, Position pos) {
String direction = (def.interactions[0].equals("Climb-up")) ? "up" : "down";
player.getMovementQueue().reset();
if(player.getClickDelay().elapsed(1000)) {
player.getClickDelay().reset();
if ((Math.abs(player.getPosition().getX() - pos.getX()) <= 1) && (Math.abs(player.getPosition().getX() - pos.getX()) >= -1) && (Math.abs(player.getPosition().getY() - pos.getY()) <= 1) && (Math.abs(player.getPosition().getY() - pos.getY()) >= -1)) {
for(int i = 0; i < Ladder.values().length; i++) {
Optional<Ladder> ladder = Ladder.get(object.getId());
if(ladder.isPresent()) {
if(ladder.get().getLadderX() == object.getPosition().getX()) {
if(ladder.get().getLadderY() == object.getPosition().getY()) {
if(ladder.get().getWorking() == true) {
performMovement(player, ladder, direction);
return true;
} else {
player.getPacketSender().sendMessage("This ladder curretly under construction");
return false;
}
}
}
}
}
if(direction.equals("down") && player.getPosition().getZ() == 0) {
player.getPacketSender().sendMessage("This ladder is missing enum data in LadderActions.java");
} else {
performMovement(player, null, direction);
return true;
}
}
player.getPacketSender().sendMessage("I can't reach that!");
return false;
}
return false;
}
public static boolean performMovement(Player player, Optional<Ladder> ladder, String direction) {
player.performAnimation(new Animation((direction.equals("up")) ? (828) : (827)));
TaskManager.submit(new Task(2) {
@Override
public void execute() {
player.getPacketSender().sendMessage("You climb " + direction + " the ladder.");
player.moveTo((ladder == null) ? (new Position(player.getPosition().getX(),player.getPosition().getY(),
(direction.equals("up")) ? (player.getPosition().getZ() + 1) : (player.getPosition().getZ() - 1))):
(new Position(ladder.get().getNewX(),ladder.get().getNewY(), 0)));
stop();
}
});
return false;
}
public enum Ladder {
SLAYER_DUNGEON(new LadderDefinition[]{new LadderDefinition(10, Optional.empty())}, 2397, 4726, 3500, 3500, false);
private final LadderDefinition[] ladders;
private final int ladderX;
private final int ladderY;
private final int newX;
private final Boolean work;
private final int newY;
Ladder(LadderDefinition[] ladders, int obx, int obY, int neX, int neY, Boolean work) {
this.ladders = ladders;
this.ladderX = obx;
this.ladderY = obY;
this.newX = neX;
this.newY = neY;
this.work = work;
}
private static Map<Integer, Ladder> map = new HashMap<Integer, Ladder>();
static {
for(Ladder ladder : Ladder.values()) {
for(LadderDefinition def : ladder.getLadders()) {
map.put(def.getObjectId(), ladder);
}
}
}
public static Optional<Ladder> get(int objectId) {
Ladder ladder = map.get(objectId);
if(ladder != null)
return Optional.of(ladder);
return Optional.empty();
}
public LadderDefinition[] getLadders() {
return ladders;
}
public int getLadderX() {
return ladderX;
}
public int getLadderY() {
return ladderY;
}
public int getNewX() {
return newX;
}
public int getNewY() {
return newY;
}
public Boolean getWorking() {
return work;
}
}
/**
* Represents a ladder's definition.
* @author CodeForLife
*/
public static final class LadderDefinition {
/**
* The ladders's object id.
*/
private final int objectId;
public LadderDefinition(int objectId, Optional<Integer> replacement) {
this.objectId = objectId;
}
public int getObjectId() {
return objectId;
}
}
}
Then Add This bit to ObjectActionPacketListener.java
if (def.getName().contains("Ladder")) {
if (LadderActions.climbLadder(player, object.get(), def, position))
return;
}
works great however could be done better than that i know that but im still learning all these new methods