Mineplex/GOD DAMN COSMETICS/gadget/gadgets/item/ItemFreezeCannon.java
Daniel Waggner 38a20f98c2 Removed Files
These two directories contain code that was removed from the src and dependencies of the compiled files. They were removed due to being either a. unnecessary or b. a royal pain in my booty.
2021-05-23 18:13:37 -07:00

199 lines
5.7 KiB
Java

package mineplex.core.gadget.gadgets.item;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import org.bukkit.Effect;
import org.bukkit.EntityEffect;
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.entity.Entity;
import org.bukkit.entity.Item;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import mineplex.core.common.util.C;
import mineplex.core.common.util.F;
import mineplex.core.common.util.LineFormat;
import mineplex.core.common.util.UtilAction;
import mineplex.core.common.util.UtilBlock;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilServer;
import mineplex.core.common.util.UtilText;
import mineplex.core.gadget.GadgetManager;
import mineplex.core.gadget.gadgets.Ammo;
import mineplex.core.gadget.types.ItemGadget;
import mineplex.core.projectile.IThrown;
import mineplex.core.projectile.ProjectileUser;
import mineplex.core.recharge.Recharge;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
public class ItemFreezeCannon extends ItemGadget implements IThrown
{
private HashMap<Player, Long> _playerMap = new HashMap<>();
public ItemFreezeCannon(GadgetManager manager)
{
super(manager, "Freeze Cannon",
UtilText.splitLineToArray(C.cWhite + "Let someone cool off inside their very own ice cube!", LineFormat.LORE),
-1,
Material.ICE, (byte) 0, 8000, new Ammo("Freeze Cannon", "100 Ice Blocks", Material.ICE, (byte) 0, new String[]
{
C.cWhite + "100 Ice Blocks for you to launch!"
}, -1, 1));
}
@Override
public void ActivateCustom(Player player)
{
Item item = player.getWorld().dropItem(player.getEyeLocation().add(player.getLocation().getDirection()), new ItemStack(Material.ICE));
UtilAction.velocity(item, player.getLocation().getDirection(),
1, false, 0, 0.2, 10, false);
Manager.getProjectileManager().AddThrow(item, player, this, 5000, true, true, true, true,
null, 1f, 1f, null, null, 0, UpdateType.TICK, 0.5f);
//Inform
UtilPlayer.message(player, F.main("Skill", "You used " + F.skill(getName()) + "."));
//Effect
item.getWorld().playSound(item.getLocation(), Sound.EXPLODE, 0.5f, 0.5f);
}
@Override
public void Collide(LivingEntity target, Block block, ProjectileUser data)
{
if (target instanceof Player && Manager.selectEntity(this, target))
{
Player p = (Player) target;
int ticks = 4 * 20;
if(isClear(p.getLocation()))
{
Manager.getBlockRestore().add(p.getLocation().getBlock(), Material.STAINED_GLASS.getId(), (byte)5, 0, (byte)0, ticks*50);
Manager.getBlockRestore().add(p.getLocation().getBlock().getRelative(BlockFace.UP), Material.STAINED_GLASS.getId(), (byte)5, 0, (byte)0, ticks*50);
if(p.getLocation().getBlock().getRelative(BlockFace.DOWN).getType() == Material.AIR)
{
Manager.getBlockRestore().add(p.getLocation().getBlock().getRelative(BlockFace.DOWN), Material.STAINED_GLASS.getId(), (byte)5, 0, (byte)0, ticks*50);
}
p.setWalkSpeed(0);
_playerMap.put(p, System.currentTimeMillis() + (ticks * 50));
p.addPotionEffect(new PotionEffect(PotionEffectType.JUMP, ticks, 250, true, false));
p.teleport(target.getLocation().getBlock().getLocation().add(0.5, 0, 0.5));
Recharge.Instance.useForce(p, "Double Jump", ticks*50);
p.setAllowFlight(false);
p.getWorld().playSound(p.getLocation(), Sound.FIZZ, 0.25f, 0.75f);
}
//Effect
target.playEffect(EntityEffect.HURT);
}
smash(data.getThrown());
}
@EventHandler
public void onMove(PlayerMoveEvent event)
{
if(!_playerMap.containsKey(event.getPlayer())) return;
if(event.getFrom().distanceSquared(event.getTo()) > 0.3)
{
event.setCancelled(true);
}
}
public boolean isClear(Location loc)
{
Block b = loc.getBlock();
ArrayList<Block> blocks = UtilBlock.getInBoundingBox(b.getLocation().subtract(1, 0, 1), b.getLocation().add(1, 1, 1));
for(Block test : blocks)
{
if(test.getType() == Material.PORTAL) return false;
}
if(b.getType() != Material.AIR) return false;
if(b.getRelative(BlockFace.UP).getType() != Material.AIR) return false;
return true;
}
@EventHandler
public void cleanup(UpdateEvent event)
{
if(event.getType() == UpdateType.FAST)
{
for(Iterator<Player> it = _playerMap.keySet().iterator(); it.hasNext();)
{
Player p = it.next();
Long time = _playerMap.get(p);
if(time == null)
{
p.setWalkSpeed(0.2f);
p.setAllowFlight(false);
it.remove();
continue;
}
if(time < System.currentTimeMillis())
{
p.setWalkSpeed(0.2f);
p.setAllowFlight(false);
it.remove();
continue;
}
}
}
if(event.getType() == UpdateType.TICK)
{
for(Player p : _playerMap.keySet())
{
Long time = _playerMap.get(p);
if(time <= System.currentTimeMillis()) continue;
for(Player op : UtilServer.getPlayers())
{
if(op.equals(p)) continue;
op.sendBlockChange(p.getLocation(), Material.ICE, (byte) 0);
op.sendBlockChange(p.getLocation().add(0, 1, 0), Material.ICE, (byte) 0);
}
}
}
}
@Override
public void Idle(ProjectileUser data)
{
smash(data.getThrown());
}
@Override
public void Expire(ProjectileUser data)
{
smash(data.getThrown());
}
@Override
public void ChunkUnload(ProjectileUser data)
{
data.getThrown().remove();
}
public void smash(Entity ent)
{
//Effect
ent.getWorld().playEffect(ent.getLocation(), Effect.STEP_SOUND, Material.ICE);
//Remove
ent.remove();
}
}