Skip to content

Commit

Permalink
Refactor HealthPad and ElytraPad
Browse files Browse the repository at this point in the history
  • Loading branch information
Cxom committed Dec 20, 2018
1 parent 8b950ae commit 801d1f6
Show file tree
Hide file tree
Showing 3 changed files with 85 additions and 83 deletions.
19 changes: 7 additions & 12 deletions src/com/trinoxtion/movement/MovementSystem.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,16 +24,11 @@ public void addPlayer(Player player){

};

//Both?????
private Set<MovementComponent> mcs = new HashSet<>();


private Set<MovementComponent> movementComponents = new HashSet<>();

//----------CONSTRUTCTOR---------------//
public MovementSystem(MovementComponent... mcs){

this.mcs.addAll(Arrays.asList(mcs));

public MovementSystem(MovementComponent... movementComponents){
this.movementComponents.addAll(Arrays.asList(movementComponents));
MovementPlusPlus.registerEvents(this);
}
//-------------------------------------//
Expand All @@ -53,7 +48,7 @@ public void removePlayer(UUID uuid) {
}

private void removePlayer(MovementPlayer mp){
mcs.forEach(mcs -> mcs.onQuit(mp));
movementComponents.forEach(mcs -> mcs.onQuit(mp));
mp.restore();
MovementPlusPlus.deregisterPlayer(mp.getUUID());
}
Expand All @@ -63,7 +58,7 @@ private void removePlayer(MovementPlayer mp){


public boolean hasComponent(MovementComponent movementComponent) {
return mcs.contains(movementComponent);
return movementComponents.contains(movementComponent);
}


Expand Down Expand Up @@ -96,7 +91,7 @@ public void onMovement(PlayerMoveEvent e){
if (usesThisSystem(e.getPlayer())){
MovementPlayer mp = MovementPlusPlus.getMovementPlayer(e.getPlayer());

mcs.forEach(mcs -> mcs.onMovement(e, mp));
movementComponents.forEach(mcs -> mcs.onMovement(e, mp));
}
}

Expand All @@ -113,7 +108,7 @@ public void onPlayerDeath(PlayerDeathEvent e) {
if (usesThisSystem(e.getEntity().getUniqueId())) {
MovementPlayer mp = MovementPlusPlus.getMovementPlayer(e.getEntity().getUniqueId());

mcs.forEach(mcs -> mcs.onDeath(mp));
movementComponents.forEach(mcs -> mcs.onDeath(mp));
}
}

Expand Down
88 changes: 49 additions & 39 deletions src/com/trinoxtion/movement/pads/ElytraPad.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,56 +34,66 @@ public ElytraPad(Material material, byte data, float height, float cost, boolean

public static final ElytraPad ELYTRA_PAD = new ElytraPad(Material.PINK_GLAZED_TERRACOTTA, JumpPad.STRONG_TRAMPOLINE);

private static Map<UUID, ItemStack> elytrad = new HashMap<>();

// @Deprecated
// public static void elytraPad(MovementPlayer mp){
// Player player = mp.getPlayer();
// Vector vector = player.getVelocity();
// if(player.getLocation().subtract(0, 1, 0).getBlock().getType() == ELYTRA_PAD){
// player.setVelocity(new Vector(vector.getX() * 2, 16.0/9, vector.getZ() * 2));
// if (!elytrad.containsKey(player.getUniqueId())){
// elytrad.put(player.getUniqueId(), player.getInventory().getChestplate());
// }
// player.getInventory().setChestplate(new ItemStack(Material.ELYTRA));
// mp.setJumping();
// }
// }
private static Map<UUID, ItemStack> playersWithElytra = new HashMap<>();

@Override
public void onMovement(PlayerMoveEvent event, MovementPlayer mp) {
if (event.getPlayer().isOnGround()) { reset(event.getPlayer()); }
super.onMovement(event, mp);
if (mp.isJumping() && !elytrad.containsKey(mp.getUUID())){
elytrad.put(mp.getUUID(), mp.getPlayer().getInventory().getChestplate());
mp.getPlayer().getInventory().setChestplate(new ItemStack(Material.ELYTRA));
}
public void onMovement(PlayerMoveEvent event, MovementPlayer movementPlayer) {
resetElytraIfOnGround(movementPlayer);

// We extend Jumppad, so call parent onMovement() func to initiate jumping
super.onMovement(event, movementPlayer);

giveElytraIfJumping(movementPlayer);
}

// @EventHandler(priority = EventPriority.LOW)
// public void onLand(PlayerMoveEvent e){
// if (e.getTo().getY() <= e.getFrom().getY()
// && e.getTo().clone().subtract(0, -.5, 0).getBlock().getType().isSolid()
// && !e.getPlayer().isGliding()){
// reset(e.getPlayer());
// }
// }

@Override
public void onQuit(MovementPlayer mp){
reset(mp.getPlayer());
public void onQuit(MovementPlayer movementPlayer){
resetElytra(movementPlayer);
}

@Override
public void onDeath(MovementPlayer mp){
reset(mp.getPlayer());
public void onDeath(MovementPlayer movementPlayer){
resetElytra(movementPlayer);
}

private static void giveElytraIfJumping(MovementPlayer movementPlayer) {
Player player = movementPlayer.getPlayer();
if (movementPlayer.isJumping() && !hasElytra(player)){
giveElytra(player);
}
}

private static void giveElytra(Player player) {
ItemStack chestplateToSave = player.getInventory().getChestplate();

playersWithElytra.put(player.getUniqueId(), chestplateToSave);

player.getInventory().setChestplate(new ItemStack(Material.ELYTRA));
}

private static void reset(Player player){
if (elytrad.containsKey(player.getUniqueId())){
player.getInventory().setChestplate(elytrad.get(player.getUniqueId()));
elytrad.remove(player.getUniqueId());
private static void resetElytraIfOnGround(MovementPlayer movementPlayer){
Player player = movementPlayer.getPlayer();
if (player.isOnGround()) {
resetElytra(player);
}
}

private static void resetElytra(MovementPlayer movementPlayer) {
resetElytra(movementPlayer.getPlayer());
}
private static void resetElytra(Player player){
if (hasElytra(player)){
removeElytra(player);
}
}

private static boolean hasElytra(Player player) {
return playersWithElytra.containsKey(player.getUniqueId());
}

private static void removeElytra(Player player) {
player.getInventory().setChestplate(playersWithElytra.get(player.getUniqueId()));
playersWithElytra.remove(player.getUniqueId());
}

}
61 changes: 29 additions & 32 deletions src/com/trinoxtion/movement/pads/HealthPad.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
import org.bukkit.Material;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask;

Expand All @@ -17,21 +16,18 @@ public class HealthPad extends SimplePad implements Listener {

public static final HealthPad DEFAULT = new HealthPad(Material.QUARTZ_BLOCK, (byte) 1);

//This is for cancelling, but is it necessary or just cleaned on reload regardless? How is an async task time stopped?
//TODO
@SuppressWarnings("unused")
private final BukkitTask healthTask;
private static final double DEFAULT_RATE_IN_SECONDS = 0.6;

private BukkitTask healthTask;
private final long rateInTicks;

private Set<MovementPlayer> playersOnPads = new HashSet<>();

public HealthPad(Material material){
this(material, (byte) 0);
}

public HealthPad(Material material, byte data) {
this(material, data, 0.6);
this(material, data, DEFAULT_RATE_IN_SECONDS);
}

public HealthPad(Material material, byte data, double rateInSeconds){
Expand All @@ -40,30 +36,34 @@ public HealthPad(Material material, byte data, double rateInSeconds){

MovementPlusPlus.registerEvents(this);

healthTask = new BukkitRunnable(){
public void run(){
playersOnPads.forEach(mp -> {
mp.getPlayer().setHealth(Math.min(mp.getPlayer().getHealth() + 0.5, 20));
});
}
}.runTaskTimerAsynchronously(MovementPlusPlus.getPlugin(), rateInTicks / 2, rateInTicks);
startHealthTask();
}


public void startHealthTask() {
if (healthTask == null) {
healthTask = new BukkitRunnable(){
public void run(){
doHealthPadTick();
}
}.runTaskTimerAsynchronously(MovementPlusPlus.getPlugin(), rateInTicks / 2, rateInTicks);
}
}

public void stopHealthTask() {
if (healthTask != null) {
healthTask.cancel();
healthTask = null;
}
}

private void doHealthPadTick() {
playersOnPads.forEach(this::incrementHealth);
}

// @EventHandler
// public void onPlayerMove(PlayerMoveEvent e) {
// Player player = e.getPlayer();
// Bukkit.broadcastMessage(player.getName() + " uses this component: " + usesThisComponent(player));
// if (usesThisComponent(player)){
// MovementPlayer mp = MovementPlusPlus.getMovementPlayer(player);
// if (player.getLocation().getBlock().getRelative(0, -1, 0).getType() == this.material) {
// playersOnPads.add(mp);
// Bukkit.broadcastMessage(player.getName() + " added to healthpad list");
// } else {
// playersOnPads.remove(mp);
// Bukkit.broadcastMessage(player.getName() + " removed from healthpad list");
// }
// }
// }
private void incrementHealth(MovementPlayer movementPlayer) {
movementPlayer.getPlayer().setHealth(Math.min(movementPlayer.getPlayer().getHealth() + 0.5, 20));
}

@Override
public void onMovement(PlayerMoveEvent event, MovementPlayer mp) {
Expand All @@ -72,7 +72,6 @@ public void onMovement(PlayerMoveEvent event, MovementPlayer mp) {
} else {
playersOnPads.remove(mp);
}

}

@Override
Expand All @@ -85,7 +84,5 @@ public void onDeath(MovementPlayer mp){
playersOnPads.remove(mp);
}



}

0 comments on commit 801d1f6

Please sign in to comment.