Finish up new generators
This commit is contained in:
parent
0934239e0c
commit
54a605de5b
@ -14,7 +14,6 @@ import java.util.Random;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import java.util.function.BiConsumer;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@ -482,7 +481,7 @@ public class UtilPlayer
|
||||
public static List<Player> getNearby(Location loc, double maxDist, boolean onlySurvival)
|
||||
{
|
||||
maxDist *= maxDist;
|
||||
LinkedList<Player> nearbyMap = new LinkedList<Player>();
|
||||
LinkedList<Player> nearbyMap = new LinkedList<>();
|
||||
|
||||
for (Player cur : loc.getWorld().getPlayers())
|
||||
{
|
||||
|
@ -4,11 +4,13 @@ import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Color;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.block.BlockState;
|
||||
@ -20,50 +22,32 @@ import org.bukkit.entity.Egg;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Snowball;
|
||||
import org.bukkit.entity.TNTPrimed;
|
||||
import org.bukkit.entity.Zombie;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.block.BlockBreakEvent;
|
||||
import org.bukkit.event.block.BlockBurnEvent;
|
||||
import org.bukkit.event.block.BlockFadeEvent;
|
||||
import org.bukkit.event.block.BlockPhysicsEvent;
|
||||
import org.bukkit.event.block.BlockPlaceEvent;
|
||||
import org.bukkit.event.block.BlockSpreadEvent;
|
||||
import org.bukkit.event.block.LeavesDecayEvent;
|
||||
import org.bukkit.event.entity.EntityChangeBlockEvent;
|
||||
import org.bukkit.event.entity.EntityCombustEvent;
|
||||
import org.bukkit.event.entity.EntityDeathEvent;
|
||||
import org.bukkit.event.entity.EntityTargetLivingEntityEvent;
|
||||
import org.bukkit.event.entity.ExplosionPrimeEvent;
|
||||
import org.bukkit.event.entity.ItemDespawnEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.event.player.PlayerPickupItemEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.EnchantmentStorageMeta;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.F;
|
||||
import mineplex.core.common.util.MapUtil;
|
||||
import mineplex.core.common.util.NautHashMap;
|
||||
import mineplex.core.common.util.UtilAction;
|
||||
import mineplex.core.common.util.UtilAlg;
|
||||
import mineplex.core.common.util.UtilEnt;
|
||||
import mineplex.core.common.util.UtilEvent;
|
||||
import mineplex.core.common.util.UtilInv;
|
||||
import mineplex.core.common.util.UtilItem;
|
||||
import mineplex.core.common.util.UtilMath;
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
import mineplex.core.explosion.ExplosionEvent;
|
||||
import mineplex.core.loot.ChestLoot;
|
||||
import mineplex.core.loot.RandomItem;
|
||||
import mineplex.core.recharge.Recharge;
|
||||
import mineplex.core.titles.tracks.standard.LuckyTrack;
|
||||
import mineplex.core.titles.tracks.standard.UnluckyTrack;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import mineplex.minecraft.game.core.combat.CombatComponent;
|
||||
import mineplex.minecraft.game.core.combat.event.CombatDeathEvent;
|
||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||
|
||||
import nautilus.game.arcade.ArcadeManager;
|
||||
@ -80,9 +64,14 @@ import nautilus.game.arcade.game.games.skywars.kits.KitIce;
|
||||
import nautilus.game.arcade.game.games.skywars.kits.KitMetal;
|
||||
import nautilus.game.arcade.game.games.skywars.modes.kits.KitElementalist;
|
||||
import nautilus.game.arcade.game.games.skywars.module.ZombieGuardianModule;
|
||||
import nautilus.game.arcade.game.modules.EXPForKillsModule;
|
||||
import nautilus.game.arcade.game.modules.EnderPearlModule;
|
||||
import nautilus.game.arcade.game.modules.MapCrumbleModule;
|
||||
import nautilus.game.arcade.game.modules.ThrowableTNTModule;
|
||||
import nautilus.game.arcade.game.modules.compass.CompassModule;
|
||||
import nautilus.game.arcade.game.modules.generator.Generator;
|
||||
import nautilus.game.arcade.game.modules.generator.GeneratorModule;
|
||||
import nautilus.game.arcade.game.modules.generator.GeneratorType;
|
||||
import nautilus.game.arcade.kit.Kit;
|
||||
import nautilus.game.arcade.ore.OreHider;
|
||||
|
||||
@ -162,10 +151,6 @@ public abstract class Skywars extends Game
|
||||
|
||||
HideTeamSheep = true;
|
||||
|
||||
new CompassModule()
|
||||
.setGiveCompassToAlive(true)
|
||||
.register(this);
|
||||
|
||||
GameTimeout = 1500000L;
|
||||
|
||||
DeathDropItems = true;
|
||||
@ -205,9 +190,16 @@ public abstract class Skywars extends Game
|
||||
|
||||
};
|
||||
|
||||
new CompassModule()
|
||||
.setGiveCompassToAlive(true)
|
||||
.register(this);
|
||||
|
||||
new EnderPearlModule()
|
||||
.register(this);
|
||||
|
||||
new EXPForKillsModule()
|
||||
.register(this);
|
||||
|
||||
setAlreadyAnnounced(false);
|
||||
setupBookEnchantments();
|
||||
setupPlayerLoot();
|
||||
@ -218,7 +210,6 @@ public abstract class Skywars extends Game
|
||||
@Override
|
||||
public void ParseData()
|
||||
{
|
||||
parseCreateZombieSpawns();
|
||||
parseCreateMiddleChests();
|
||||
parseCreateConnectorChests();
|
||||
parseCreatePlayerChests();
|
||||
@ -232,6 +223,22 @@ public abstract class Skywars extends Game
|
||||
.addSpawns(WorldData.GetDataLocs("RED"))
|
||||
.register(this);
|
||||
|
||||
ThrowableTNTModule tntModule = new ThrowableTNTModule()
|
||||
.setThrowAndDrop(true)
|
||||
.setThrowStrength(1.4);
|
||||
tntModule.register(this);
|
||||
|
||||
ItemStack tntItem = tntModule.getTntItem().clone();
|
||||
tntItem.setAmount(2);
|
||||
|
||||
new GeneratorModule()
|
||||
.addGenerator(new Generator
|
||||
(
|
||||
new GeneratorType(tntItem, TimeUnit.SECONDS.toMillis(30), "Throwable TNT", ChatColor.RED, Color.RED, true),
|
||||
WorldData.GetDataLocs("LIME").get(0)
|
||||
))
|
||||
.register(this);
|
||||
|
||||
for (Location oreLoc : WorldData.GetCustomLocs("56"))
|
||||
{
|
||||
oreLoc.getBlock().setType(Material.STONE);
|
||||
@ -243,11 +250,11 @@ public abstract class Skywars extends Game
|
||||
MapUtil.QuickChangeBlockAt(loc, Material.AIR);
|
||||
}
|
||||
|
||||
// TNT
|
||||
for (Location loc : WorldData.GetDataLocs("LIME"))
|
||||
{
|
||||
_tntGen = new TNTGenerator(this, loc);
|
||||
}
|
||||
// // TNT
|
||||
// for (Location loc : WorldData.GetDataLocs("LIME"))
|
||||
// {
|
||||
// _tntGen = new TNTGenerator(this, loc);
|
||||
// }
|
||||
|
||||
// // Register Blocks
|
||||
// for (int y = WorldData.MinY; y < WorldData.MaxY; y++)
|
||||
@ -520,66 +527,6 @@ public abstract class Skywars extends Game
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onPlayerPickupItem(PlayerPickupItemEvent e)
|
||||
{
|
||||
ItemStack is = e.getItem().getItemStack();
|
||||
Player player = e.getPlayer();
|
||||
if (is.getType() == Material.TNT)
|
||||
{
|
||||
e.setCancelled(true);
|
||||
_tntGen.pickup(player, e.getItem());
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onPlayerInteractTNT(PlayerInteractEvent e)
|
||||
{
|
||||
if (!IsLive())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = e.getPlayer();
|
||||
|
||||
if (!IsAlive(player))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!UtilInv.IsItem(player.getItemInHand(), Material.TNT, (byte) 0))
|
||||
{
|
||||
return;
|
||||
}
|
||||
e.setCancelled(true);
|
||||
|
||||
UtilInv.remove(player, Material.TNT, (byte) 0, 1);
|
||||
UtilInv.Update(player);
|
||||
|
||||
TNTPrimed tnt = (TNTPrimed) player.getWorld().spawn(player.getEyeLocation().add(player.getLocation().getDirection()), TNTPrimed.class);
|
||||
|
||||
tnt.setFuseTicks(60);
|
||||
if (UtilEvent.isAction(e, UtilEvent.ActionType.L))
|
||||
{
|
||||
UtilAction.velocity(tnt, player.getLocation().getDirection(), 1.75D, false, 0.0D, 0.1D, 10.0D, false);
|
||||
player.playSound(player.getLocation(), Sound.GHAST_FIREBALL, 3.0F, 1.0F);
|
||||
}
|
||||
|
||||
_tntMap.put(tnt, player);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onUpdateTNTCannon(UpdateEvent e)
|
||||
{
|
||||
if (!IsLive())
|
||||
return;
|
||||
|
||||
if (e.getType() == UpdateType.FAST)
|
||||
{
|
||||
_tntGen.update();
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onBlockBurn(BlockBurnEvent event)
|
||||
{
|
||||
@ -608,23 +555,14 @@ public abstract class Skywars extends Game
|
||||
public void onBlockPlaceAdd(BlockPlaceEvent event)
|
||||
{
|
||||
Material material = event.getBlock().getType();
|
||||
_worldBlocks.add(event.getBlock());
|
||||
|
||||
if (material == Material.CHEST || material == Material.PISTON_BASE || material == Material.PISTON_STICKY_BASE || material == Material.HOPPER)
|
||||
{
|
||||
event.getPlayer().sendMessage(F.main("Game", "You cannot place this block."));
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onBlockPhysics(BlockPhysicsEvent event)
|
||||
{
|
||||
if (IsLive() && event.getBlock().getWorld().equals(WorldData.World))
|
||||
{
|
||||
_worldBlocks.add(event.getBlock());
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR)
|
||||
public void onBlockBreakBonusDrops(BlockBreakEvent event)
|
||||
{
|
||||
@ -1103,80 +1041,15 @@ public abstract class Skywars extends Game
|
||||
public void onExplosion(ExplosionEvent event)
|
||||
{
|
||||
_oreHider.Explosion(event);
|
||||
|
||||
event.GetBlocks().removeIf(block -> block.getType() == Material.CHEST || block.getType() == Material.ANVIL);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onEntityChangeBlock(EntityChangeBlockEvent event)
|
||||
{
|
||||
if (event.getBlock().getType() == Material.ANVIL)
|
||||
{
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onBlockBreakOreReveal(BlockBreakEvent event)
|
||||
{
|
||||
_oreHider.BlockBreak(event);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onExplosionPrime(ExplosionPrimeEvent event)
|
||||
{
|
||||
Player player = _tntMap.get(event.getEntity());
|
||||
if (player != null)
|
||||
{
|
||||
for (Player other : UtilPlayer.getNearby(event.getEntity().getLocation(), 14))
|
||||
{
|
||||
Manager.GetCondition().Factory().Explosion("Throwing TNT", other, player, 50, 0.1, false, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onCombatDeathEventLevels(CombatDeathEvent event)
|
||||
{
|
||||
Game game = Manager.GetGame();
|
||||
if (game == null)
|
||||
return;
|
||||
|
||||
if (!(event.GetEvent().getEntity() instanceof Player))
|
||||
return;
|
||||
|
||||
Player killed = (Player) event.GetEvent().getEntity();
|
||||
|
||||
if (event.GetLog().GetKiller() != null)
|
||||
{
|
||||
Player killer = UtilPlayer.searchExact(event.GetLog().GetKiller().GetName());
|
||||
|
||||
if (killer != null && !killer.equals(killed))
|
||||
{
|
||||
// Kill
|
||||
killer.giveExpLevels(2);
|
||||
|
||||
killer.playSound(killer.getLocation(), Sound.LEVEL_UP, 1f, 1f);
|
||||
}
|
||||
}
|
||||
|
||||
for (CombatComponent log : event.GetLog().GetAttackers())
|
||||
{
|
||||
if (event.GetLog().GetKiller() != null && log.equals(event.GetLog().GetKiller()))
|
||||
continue;
|
||||
|
||||
Player assist = UtilPlayer.searchExact(log.GetName());
|
||||
|
||||
// Assist
|
||||
if (assist != null)
|
||||
{
|
||||
assist.giveExpLevels(1);
|
||||
assist.playSound(assist.getLocation(), Sound.ORB_PICKUP, 1f, 1f);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public double GetKillsGems(Player killer, Player killed, boolean assist)
|
||||
{
|
||||
|
@ -118,29 +118,29 @@ public class SoloSkywars extends Skywars
|
||||
}
|
||||
}
|
||||
|
||||
if (IsLive())
|
||||
{
|
||||
Scoreboard.writeNewLine();
|
||||
Scoreboard.write(C.cYellow + C.Bold + "Time");
|
||||
Scoreboard.write(UtilTime.convertString(System.currentTimeMillis() - GetStateTime(), 0, TimeUnit.FIT));
|
||||
|
||||
Scoreboard.writeNewLine();
|
||||
Scoreboard.write((this.getTnTGen().active() ? C.cGreen : C.cRed) + C.Bold + "TNT Spawn");
|
||||
Scoreboard.write(this.getTnTGen().getScoreboardInfo());
|
||||
|
||||
Scoreboard.writeNewLine();
|
||||
|
||||
if (UtilTime.elapsed(GetStateTime(), this.getCrumbleTime()))
|
||||
{
|
||||
Scoreboard.write(C.cRed + C.Bold + "Map Crumble");
|
||||
Scoreboard.write("Active");
|
||||
}
|
||||
else
|
||||
{
|
||||
Scoreboard.write(C.cGreen + C.Bold + "Map Crumble");
|
||||
Scoreboard.write(UtilTime.convertString(this.getCrumbleTime() - (System.currentTimeMillis() - GetStateTime()), 0, TimeUnit.FIT));
|
||||
}
|
||||
}
|
||||
// if (IsLive())
|
||||
// {
|
||||
// Scoreboard.writeNewLine();
|
||||
// Scoreboard.write(C.cYellow + C.Bold + "Time");
|
||||
// Scoreboard.write(UtilTime.convertString(System.currentTimeMillis() - GetStateTime(), 0, TimeUnit.FIT));
|
||||
//
|
||||
// Scoreboard.writeNewLine();
|
||||
// Scoreboard.write((this.getTnTGen().active() ? C.cGreen : C.cRed) + C.Bold + "TNT Spawn");
|
||||
// Scoreboard.write(this.getTnTGen().getScoreboardInfo());
|
||||
//
|
||||
// Scoreboard.writeNewLine();
|
||||
//
|
||||
// if (UtilTime.elapsed(GetStateTime(), this.getCrumbleTime()))
|
||||
// {
|
||||
// Scoreboard.write(C.cRed + C.Bold + "Map Crumble");
|
||||
// Scoreboard.write("Active");
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// Scoreboard.write(C.cGreen + C.Bold + "Map Crumble");
|
||||
// Scoreboard.write(UtilTime.convertString(this.getCrumbleTime() - (System.currentTimeMillis() - GetStateTime()), 0, TimeUnit.FIT));
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
|
||||
|
@ -46,6 +46,13 @@ public class ZombieGuardianModule extends Module
|
||||
_zombies = new HashMap<>();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cleanup()
|
||||
{
|
||||
_zombies.clear();
|
||||
_spawns.clear();
|
||||
}
|
||||
|
||||
public ZombieGuardianModule addSpawns(List<Location> spawns)
|
||||
{
|
||||
_spawns.addAll(spawns);
|
||||
|
@ -0,0 +1,69 @@
|
||||
package nautilus.game.arcade.game.modules;
|
||||
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
import mineplex.minecraft.game.core.combat.CombatComponent;
|
||||
import mineplex.minecraft.game.core.combat.event.CombatDeathEvent;
|
||||
|
||||
/**
|
||||
* A legacy module that awards players enchanting levels when they kill or assist on killing another player.
|
||||
*/
|
||||
public class EXPForKillsModule extends Module
|
||||
{
|
||||
|
||||
private final int _levelsForKill, _levelsForAssist;
|
||||
|
||||
public EXPForKillsModule()
|
||||
{
|
||||
this(2, 1);
|
||||
}
|
||||
|
||||
public EXPForKillsModule(int levelsForKill, int levelsForAssist)
|
||||
{
|
||||
_levelsForKill = levelsForKill;
|
||||
_levelsForAssist = levelsForAssist;
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onCombatDeathEventLevels(CombatDeathEvent event)
|
||||
{
|
||||
if (!(event.GetEvent().getEntity() instanceof Player))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Player killed = (Player) event.GetEvent().getEntity();
|
||||
|
||||
if (event.GetLog().GetKiller() != null)
|
||||
{
|
||||
Player killer = UtilPlayer.searchExact(event.GetLog().GetKiller().GetName());
|
||||
|
||||
if (killer != null && !killer.equals(killed))
|
||||
{
|
||||
// Kill
|
||||
killer.giveExpLevels(_levelsForKill);
|
||||
killer.playSound(killer.getLocation(), Sound.LEVEL_UP, 1f, 1f);
|
||||
}
|
||||
}
|
||||
|
||||
for (CombatComponent log : event.GetLog().GetAttackers())
|
||||
{
|
||||
if (event.GetLog().GetKiller() != null && log.equals(event.GetLog().GetKiller()))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
Player assist = UtilPlayer.searchExact(log.GetName());
|
||||
|
||||
// Assist
|
||||
if (assist != null)
|
||||
{
|
||||
assist.giveExpLevels(_levelsForAssist);
|
||||
assist.playSound(assist.getLocation(), Sound.ORB_PICKUP, 1f, 1f);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -74,6 +74,12 @@ public class MapCrumbleModule extends Module
|
||||
}, 1, 2);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cleanup()
|
||||
{
|
||||
_worldBlocks.clear();
|
||||
}
|
||||
|
||||
public MapCrumbleModule setEnabled(boolean enabled)
|
||||
{
|
||||
_enabled = enabled;
|
||||
|
@ -0,0 +1,100 @@
|
||||
package nautilus.game.arcade.game.modules;
|
||||
|
||||
import org.bukkit.Effect;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.TNTPrimed;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.block.Action;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.UtilAction;
|
||||
import mineplex.core.common.util.UtilEvent;
|
||||
import mineplex.core.common.util.UtilEvent.ActionType;
|
||||
import mineplex.core.common.util.UtilInv;
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
import mineplex.core.itemstack.ItemBuilder;
|
||||
|
||||
public class ThrowableTNTModule extends Module
|
||||
{
|
||||
|
||||
private ItemStack _tntItem;
|
||||
private int _fuseTicks = 60;
|
||||
private boolean _throwAndDrop;
|
||||
private double _throwStrength = 1.3;
|
||||
|
||||
@Override
|
||||
protected void setup()
|
||||
{
|
||||
ItemBuilder builder = new ItemBuilder(Material.TNT);
|
||||
|
||||
if (_throwAndDrop)
|
||||
{
|
||||
builder.setTitle(C.cYellowB + "Left Click - Throw" + C.cWhite + " / " + C.cYellowB + " Right Click - Drop");
|
||||
}
|
||||
else
|
||||
{
|
||||
builder.setTitle(C.cYellowB + "Throwable TNT");
|
||||
}
|
||||
|
||||
_tntItem = builder.build();
|
||||
}
|
||||
|
||||
public ThrowableTNTModule setFuseTicks(int fuseTicks)
|
||||
{
|
||||
_fuseTicks = fuseTicks;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ThrowableTNTModule setThrowAndDrop(boolean throwAndDrop)
|
||||
{
|
||||
_throwAndDrop = throwAndDrop;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ThrowableTNTModule setThrowStrength(double throwStrength)
|
||||
{
|
||||
_throwStrength = throwStrength;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ItemStack getTntItem()
|
||||
{
|
||||
return _tntItem;
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void playerThrowTNT(PlayerInteractEvent event)
|
||||
{
|
||||
if (event.getAction() == Action.PHYSICAL || !getGame().IsLive())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = event.getPlayer();
|
||||
ItemStack itemStack = player.getItemInHand();
|
||||
|
||||
if (UtilPlayer.isSpectator(player) || itemStack == null || itemStack.getType() != Material.TNT)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
player.setItemInHand(UtilInv.decrement(itemStack));
|
||||
event.setCancelled(true);
|
||||
|
||||
Location location = player.getEyeLocation();
|
||||
location.add(location.getDirection());
|
||||
|
||||
TNTPrimed tntPrimed = location.getWorld().spawn(location, TNTPrimed.class);
|
||||
tntPrimed.setFuseTicks(_fuseTicks);
|
||||
|
||||
if (!_throwAndDrop || UtilEvent.isAction(event, ActionType.L))
|
||||
{
|
||||
UtilAction.velocity(tntPrimed, location.getDirection(), _throwStrength, false, 0, 0.3, 1, false);
|
||||
player.playEffect(location, Effect.GHAST_SHOOT, 0);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,5 +1,114 @@
|
||||
package nautilus.game.arcade.game.modules.generator;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.entity.ArmorStand;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
import mineplex.core.common.util.UtilTime;
|
||||
|
||||
public class Generator
|
||||
{
|
||||
|
||||
private static final int COLLECT_RADIUS = 2;
|
||||
private static final float ROTATION_DELTA_YAW = 10;
|
||||
|
||||
private final GeneratorType _type;
|
||||
private final Location _location;
|
||||
private final Block _block;
|
||||
|
||||
private ArmorStand _holder;
|
||||
private long _lastCollect;
|
||||
private boolean _colourTick = true;
|
||||
|
||||
public Generator(GeneratorType type, Location location)
|
||||
{
|
||||
_type = type;
|
||||
_location = location.clone().subtract(0, 0.5, 0);
|
||||
_block = location.getBlock().getRelative(BlockFace.DOWN);
|
||||
}
|
||||
|
||||
public void checkCollect()
|
||||
{
|
||||
if (_holder == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
List<Player> nearby = UtilPlayer.getNearby(_location, COLLECT_RADIUS);
|
||||
|
||||
if (nearby.isEmpty())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = nearby.get(0);
|
||||
_type.collect(this, player);
|
||||
_holder.remove();
|
||||
_holder = null;
|
||||
_lastCollect = System.currentTimeMillis();
|
||||
}
|
||||
|
||||
public void checkSpawn()
|
||||
{
|
||||
if (_holder != null || !UtilTime.elapsed(_lastCollect, _type.getSpawnRate()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_holder = _type.spawnHolder(this);
|
||||
}
|
||||
|
||||
public void animateHolder()
|
||||
{
|
||||
if (_holder == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Location location = _holder.getLocation();
|
||||
|
||||
((CraftEntity) _holder).getHandle().setPositionRotation(location.getX(), location.getY(), location.getZ(), location.getYaw() + ROTATION_DELTA_YAW, location.getPitch());
|
||||
}
|
||||
|
||||
public void updateName()
|
||||
{
|
||||
if (_holder == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!_holder.isCustomNameVisible())
|
||||
{
|
||||
_holder.setCustomNameVisible(true);
|
||||
}
|
||||
|
||||
if (_type.isFlashName())
|
||||
{
|
||||
_colourTick = !_colourTick;
|
||||
}
|
||||
|
||||
_holder.setCustomName((_colourTick ? _type.getColour() + C.Bold : C.cWhiteB) + _type.getName());
|
||||
}
|
||||
|
||||
public ArmorStand getHolder()
|
||||
{
|
||||
return _holder;
|
||||
}
|
||||
|
||||
public Location getLocation()
|
||||
{
|
||||
return _location;
|
||||
}
|
||||
|
||||
public Block getBlock()
|
||||
{
|
||||
return _block;
|
||||
}
|
||||
}
|
||||
|
@ -1,12 +1,92 @@
|
||||
package nautilus.game.arcade.game.modules.generator;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.ArmorStand;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.player.PlayerArmorStandManipulateEvent;
|
||||
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||
|
||||
import nautilus.game.arcade.game.modules.Module;
|
||||
|
||||
public class GeneratorModule extends Module
|
||||
{
|
||||
|
||||
private final Set<Generator> _generators;
|
||||
|
||||
public GeneratorModule()
|
||||
{
|
||||
_generators = new HashSet<>();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cleanup()
|
||||
{
|
||||
_generators.clear();
|
||||
}
|
||||
|
||||
public GeneratorModule addGenerator(Generator generator)
|
||||
{
|
||||
_generators.add(generator);
|
||||
return this;
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void update(UpdateEvent event)
|
||||
{
|
||||
if (!getGame().IsLive())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.getType() == UpdateType.FAST)
|
||||
{
|
||||
getGame().CreatureAllowOverride = true;
|
||||
|
||||
for (Generator generator : _generators)
|
||||
{
|
||||
generator.checkSpawn();
|
||||
generator.checkCollect();
|
||||
generator.updateName();
|
||||
}
|
||||
|
||||
getGame().CreatureAllowOverride = false;
|
||||
}
|
||||
else if (event.getType() == UpdateType.TICK)
|
||||
{
|
||||
for (Generator generator : _generators)
|
||||
{
|
||||
generator.animateHolder();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void armourStandManipulate(PlayerArmorStandManipulateEvent event)
|
||||
{
|
||||
for (Generator generator: _generators)
|
||||
{
|
||||
if (generator.getHolder().equals(event.getRightClicked()))
|
||||
{
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void armourStandDamage(CustomDamageEvent event)
|
||||
{
|
||||
for (Generator generator: _generators)
|
||||
{
|
||||
if (generator.getHolder().equals(event.GetDamageeEntity()))
|
||||
{
|
||||
event.SetCancelled("Generator Holder");
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -5,22 +5,30 @@ import org.bukkit.Color;
|
||||
import org.bukkit.FireworkEffect;
|
||||
import org.bukkit.FireworkEffect.Type;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.ArmorStand;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import mineplex.core.common.util.MapUtil;
|
||||
import mineplex.core.common.util.UtilEnt;
|
||||
import mineplex.core.common.util.UtilFirework;
|
||||
|
||||
public class GeneratorType
|
||||
{
|
||||
|
||||
private final ItemStack _itemStack;
|
||||
private final long _spawnRate;
|
||||
private final String _name;
|
||||
private final ChatColor _colour;
|
||||
private final boolean _flashName;
|
||||
private final FireworkEffect _effect;
|
||||
|
||||
public GeneratorType(ItemStack itemStack, ChatColor chatColour, Color bukkitColour, boolean flashName)
|
||||
public GeneratorType(ItemStack itemStack, long spawnRate, String name, ChatColor chatColour, Color bukkitColour, boolean flashName)
|
||||
{
|
||||
_itemStack = itemStack;
|
||||
_spawnRate = spawnRate;
|
||||
_name = name;
|
||||
_colour = chatColour;
|
||||
_flashName = flashName;
|
||||
_effect = FireworkEffect.builder()
|
||||
@ -29,10 +37,34 @@ public class GeneratorType
|
||||
.build();
|
||||
}
|
||||
|
||||
final void collect(Generator generator)
|
||||
final void collect(Generator generator, Player player)
|
||||
{
|
||||
Location location =
|
||||
UtilFirework.playFirework(ge, _effect);
|
||||
playEffect(generator);
|
||||
MapUtil.QuickChangeBlockAt(generator.getBlock().getLocation(), Material.IRON_BLOCK);
|
||||
collect(player);
|
||||
}
|
||||
|
||||
final ArmorStand spawnHolder(Generator generator)
|
||||
{
|
||||
Location location = generator.getLocation();
|
||||
ArmorStand holder = location.getWorld().spawn(location, ArmorStand.class);
|
||||
|
||||
holder.setGravity(false);
|
||||
holder.setVisible(false);
|
||||
holder.setHelmet(_itemStack);
|
||||
holder.setRemoveWhenFarAway(false);
|
||||
UtilEnt.setTickWhenFarAway(holder, true);
|
||||
|
||||
playEffect(generator);
|
||||
MapUtil.QuickChangeBlockAt(generator.getBlock().getLocation(), Material.GOLD_BLOCK);
|
||||
|
||||
return holder;
|
||||
}
|
||||
|
||||
private void playEffect(Generator generator)
|
||||
{
|
||||
Location location = generator.getLocation();
|
||||
UtilFirework.playFirework(location, _effect);
|
||||
}
|
||||
|
||||
public void collect(Player player)
|
||||
@ -40,4 +72,23 @@ public class GeneratorType
|
||||
player.getInventory().addItem(_itemStack);
|
||||
}
|
||||
|
||||
public String getName()
|
||||
{
|
||||
return _name;
|
||||
}
|
||||
|
||||
public long getSpawnRate()
|
||||
{
|
||||
return _spawnRate;
|
||||
}
|
||||
|
||||
public ChatColor getColour()
|
||||
{
|
||||
return _colour;
|
||||
}
|
||||
|
||||
public boolean isFlashName()
|
||||
{
|
||||
return _flashName;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user