Code cleanup
This commit is contained in:
parent
18eaf84fc3
commit
e4e625dbfc
@ -157,7 +157,7 @@ import mineplex.core.gadget.gadgets.item.ItemPaintballGun;
|
|||||||
import mineplex.core.gadget.gadgets.item.ItemPaintbrush;
|
import mineplex.core.gadget.gadgets.item.ItemPaintbrush;
|
||||||
import mineplex.core.gadget.gadgets.item.ItemPartyPopper;
|
import mineplex.core.gadget.gadgets.item.ItemPartyPopper;
|
||||||
import mineplex.core.gadget.gadgets.item.ItemSnowball;
|
import mineplex.core.gadget.gadgets.item.ItemSnowball;
|
||||||
import mineplex.core.gadget.gadgets.item.ItemSwortal;
|
import mineplex.core.gadget.gadgets.item.ItemSortal;
|
||||||
import mineplex.core.gadget.gadgets.item.ItemTNT;
|
import mineplex.core.gadget.gadgets.item.ItemTNT;
|
||||||
import mineplex.core.gadget.gadgets.item.ItemTrampoline;
|
import mineplex.core.gadget.gadgets.item.ItemTrampoline;
|
||||||
import mineplex.core.gadget.gadgets.kitselector.HalloweenKitSelector;
|
import mineplex.core.gadget.gadgets.kitselector.HalloweenKitSelector;
|
||||||
@ -584,7 +584,7 @@ public class GadgetManager extends MiniPlugin
|
|||||||
addGadget(new ItemConnect4(this));
|
addGadget(new ItemConnect4(this));
|
||||||
addGadget(new ItemMaryPoppins(this));
|
addGadget(new ItemMaryPoppins(this));
|
||||||
addGadget(new ItemClacker(this));
|
addGadget(new ItemClacker(this));
|
||||||
addGadget(new ItemSwortal(this));
|
addGadget(new ItemSortal(this));
|
||||||
|
|
||||||
// Costume
|
// Costume
|
||||||
addGadget(new OutfitRaveSuitHelmet(this));
|
addGadget(new OutfitRaveSuitHelmet(this));
|
||||||
|
@ -3,7 +3,10 @@ package mineplex.core.gadget.gadgets.item;
|
|||||||
import java.time.Month;
|
import java.time.Month;
|
||||||
import java.time.YearMonth;
|
import java.time.YearMonth;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
@ -31,7 +34,7 @@ import mineplex.core.gadget.GadgetManager;
|
|||||||
import mineplex.core.gadget.types.ItemGadget;
|
import mineplex.core.gadget.types.ItemGadget;
|
||||||
import mineplex.core.gadget.util.CostConstants;
|
import mineplex.core.gadget.util.CostConstants;
|
||||||
|
|
||||||
public class ItemSwortal extends ItemGadget
|
public class ItemSortal extends ItemGadget
|
||||||
{
|
{
|
||||||
|
|
||||||
private static final Material[] SWORD_TYPES =
|
private static final Material[] SWORD_TYPES =
|
||||||
@ -40,13 +43,22 @@ public class ItemSwortal extends ItemGadget
|
|||||||
Material.IRON_SWORD,
|
Material.IRON_SWORD,
|
||||||
Material.DIAMOND_SWORD
|
Material.DIAMOND_SWORD
|
||||||
};
|
};
|
||||||
|
private static final double DIST_FACTOR_TICK = 0.5;
|
||||||
|
private static final double DELTA_THETA = Math.PI / 10;
|
||||||
|
private static final int EXPLOSION_RADIUS = 8;
|
||||||
|
private static final int PARTICLE_RATE = 5;
|
||||||
|
private static final int MAX_SWORD_TICKS = 150;
|
||||||
|
|
||||||
public ItemSwortal(GadgetManager manager)
|
private final Set<Sortal> _sortals;
|
||||||
|
|
||||||
|
public ItemSortal(GadgetManager manager)
|
||||||
{
|
{
|
||||||
super(manager, "Swortal", new String[]
|
super(manager, "Gate of Babylon", new String[]
|
||||||
{
|
{
|
||||||
|
|
||||||
}, CostConstants.POWERPLAY_BONUS, Material.BONE, (byte) 0, 50, null);
|
}, CostConstants.POWERPLAY_BONUS, Material.BONE, (byte) 0, TimeUnit.SECONDS.toMillis(1), null);
|
||||||
|
|
||||||
|
_sortals = new HashSet<>();
|
||||||
|
|
||||||
// Free = false;
|
// Free = false;
|
||||||
setPPCYearMonth(YearMonth.of(2018, Month.AUGUST));
|
setPPCYearMonth(YearMonth.of(2018, Month.AUGUST));
|
||||||
@ -55,12 +67,13 @@ public class ItemSwortal extends ItemGadget
|
|||||||
@Override
|
@Override
|
||||||
public void ActivateCustom(Player player)
|
public void ActivateCustom(Player player)
|
||||||
{
|
{
|
||||||
createAndFire(player.getLocation().add(0, 3, 0), 20);
|
createAndFire(player, player.getLocation().add(0, 3, 0), 20);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createAndFire(Location location, int delay)
|
private void createAndFire(Player wielder, Location location, int delay)
|
||||||
{
|
{
|
||||||
Swortal swortal = new Swortal(location);
|
Sortal sortal = new Sortal(wielder, location);
|
||||||
|
_sortals.add(sortal);
|
||||||
|
|
||||||
Manager.runSyncTimer(new BukkitRunnable()
|
Manager.runSyncTimer(new BukkitRunnable()
|
||||||
{
|
{
|
||||||
@ -69,21 +82,22 @@ public class ItemSwortal extends ItemGadget
|
|||||||
@Override
|
@Override
|
||||||
public void run()
|
public void run()
|
||||||
{
|
{
|
||||||
if (ticks % 5 == 0)
|
if (ticks % PARTICLE_RATE == 0)
|
||||||
{
|
{
|
||||||
swortal.drawParticles();
|
sortal.drawParticles();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ticks > delay)
|
if (ticks > delay)
|
||||||
{
|
{
|
||||||
swortal.throwSword();
|
sortal.throwSword();
|
||||||
}
|
}
|
||||||
|
|
||||||
ticks++;
|
ticks++;
|
||||||
|
|
||||||
if (ticks > 150 || !swortal.Sword.isValid())
|
if (sortal.shouldClean())
|
||||||
{
|
{
|
||||||
swortal.remove();
|
_sortals.remove(sortal);
|
||||||
|
sortal.remove();
|
||||||
cancel();
|
cancel();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -93,14 +107,16 @@ public class ItemSwortal extends ItemGadget
|
|||||||
@EventHandler
|
@EventHandler
|
||||||
public void command(PlayerCommandPreprocessEvent event)
|
public void command(PlayerCommandPreprocessEvent event)
|
||||||
{
|
{
|
||||||
if (!event.getMessage().equalsIgnoreCase("/gil") || !event.getPlayer().isOp())
|
Player player = event.getPlayer();
|
||||||
|
|
||||||
|
if (!event.getMessage().equalsIgnoreCase("/gil") || !player.isOp())
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
|
|
||||||
Location center = event.getPlayer().getLocation().add(0, 0.5, 0);
|
Location center = player.getLocation().add(0, 0.5, 0);
|
||||||
|
|
||||||
Manager.runSyncTimer(new BukkitRunnable()
|
Manager.runSyncTimer(new BukkitRunnable()
|
||||||
{
|
{
|
||||||
@ -115,28 +131,31 @@ public class ItemSwortal extends ItemGadget
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Location location = center.clone().add(UtilAlg.getTrajectory(UtilMath.r(360), -UtilMath.r(60) - 20).multiply(18));
|
Vector direction = UtilAlg.getTrajectory(UtilMath.r(360), -UtilMath.r(60) - 20);
|
||||||
location.setDirection(UtilAlg.getTrajectory(location, center));
|
Location location = center.clone().add(direction.multiply(18));
|
||||||
|
location.setDirection(direction.multiply(-1));
|
||||||
|
|
||||||
createAndFire(location, 80 - (i * 2) + UtilMath.r(25));
|
createAndFire(player, location, 80 - (i * 2) + UtilMath.r(25));
|
||||||
}
|
}
|
||||||
}, 20, 2);
|
}, 20, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
private class Swortal
|
private class Sortal
|
||||||
{
|
{
|
||||||
|
|
||||||
|
final Player Wielder;
|
||||||
final Location Point;
|
final Location Point;
|
||||||
final Vector Direction;
|
final Vector Direction;
|
||||||
final ArmorStand Sword;
|
final ArmorStand Sword;
|
||||||
final DustSpellColor PortalColour = new DustSpellColor(240 + UtilMath.rRange(-5, 5), 205 + UtilMath.rRange(-20, 20), UtilMath.r(5));
|
final DustSpellColor PortalColour = new DustSpellColor(240 + UtilMath.rRange(-5, 5), 205 + UtilMath.rRange(-20, 20), UtilMath.r(5));
|
||||||
final DustSpellColor SwordColour = new DustSpellColor(255, UtilMath.r(20), UtilMath.r(20));
|
final DustSpellColor SwordColour;
|
||||||
final List<Location> PortalPoints, SwordPathPoints;
|
final List<Location> PortalPoints, SwordPathPoints;
|
||||||
|
|
||||||
double DistFactor;
|
double DistFactor;
|
||||||
|
|
||||||
Swortal(Location point)
|
Sortal(Player wielder, Location point)
|
||||||
{
|
{
|
||||||
|
Wielder = wielder;
|
||||||
Point = point;
|
Point = point;
|
||||||
Direction = point.getDirection();
|
Direction = point.getDirection();
|
||||||
|
|
||||||
@ -150,6 +169,15 @@ public class ItemSwortal extends ItemGadget
|
|||||||
Sword.setVisible(false);
|
Sword.setVisible(false);
|
||||||
Sword.setRightArmPose(new EulerAngle(Math.toRadians(Point.getPitch() - 4), 0, 0));
|
Sword.setRightArmPose(new EulerAngle(Math.toRadians(Point.getPitch() - 4), 0, 0));
|
||||||
|
|
||||||
|
if (UtilPlayer.isSlimSkin(wielder.getUniqueId()))
|
||||||
|
{
|
||||||
|
SwordColour = new DustSpellColor(240 + UtilMath.r(15), UtilMath.r(20), UtilMath.r(20));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SwordColour = new DustSpellColor(0, 30 + UtilMath.r(50), 255);
|
||||||
|
}
|
||||||
|
|
||||||
PortalPoints = new ArrayList<>();
|
PortalPoints = new ArrayList<>();
|
||||||
SwordPathPoints = new ArrayList<>();
|
SwordPathPoints = new ArrayList<>();
|
||||||
createPortalPoints();
|
createPortalPoints();
|
||||||
@ -162,7 +190,7 @@ public class ItemSwortal extends ItemGadget
|
|||||||
|
|
||||||
for (double radius = 0.2; radius < 1.1; radius += 0.2)
|
for (double radius = 0.2; radius < 1.1; radius += 0.2)
|
||||||
{
|
{
|
||||||
for (double theta = 0; theta < 2 * Math.PI; theta += Math.PI / 10)
|
for (double theta = 0; theta < 2 * Math.PI; theta += DELTA_THETA)
|
||||||
{
|
{
|
||||||
Location location = Point.clone().add(Math.cos(theta) * radius, Math.sin(theta) * radius, 0);
|
Location location = Point.clone().add(Math.cos(theta) * radius, Math.sin(theta) * radius, 0);
|
||||||
Vector vector = location.toVector().subtract(pointVector);
|
Vector vector = location.toVector().subtract(pointVector);
|
||||||
@ -174,18 +202,23 @@ public class ItemSwortal extends ItemGadget
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
UtilParticle.PlayParticleToAll(ParticleType.FLAME, Point, null, 0.1F, 20, ViewDist.LONGER);
|
UtilParticle.PlayParticleToAll(ParticleType.FLAME, Point, null, 0.1F, 20, ViewDist.LONG);
|
||||||
Point.getWorld().playSound(Point, Sound.PORTAL, 1, 0.5F);
|
Point.getWorld().playSound(Point, Sound.PORTAL, 1, 0.5F);
|
||||||
}
|
}
|
||||||
|
|
||||||
void drawParticles()
|
void drawParticles()
|
||||||
{
|
{
|
||||||
PortalPoints.forEach(location -> new ColoredParticle(ParticleType.RED_DUST, PortalColour, location).display(ViewDist.LONGER));
|
PortalPoints.forEach(location -> new ColoredParticle(ParticleType.RED_DUST, PortalColour, location).display(ViewDist.LONG));
|
||||||
SwordPathPoints.forEach(location -> new ColoredParticle(ParticleType.RED_DUST, SwordColour, location).display(ViewDist.LONGER));
|
SwordPathPoints.forEach(location -> new ColoredParticle(ParticleType.RED_DUST, SwordColour, location).display(ViewDist.LONG));
|
||||||
}
|
}
|
||||||
|
|
||||||
void throwSword()
|
void throwSword()
|
||||||
{
|
{
|
||||||
|
if (shouldClean())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (DistFactor == 0)
|
if (DistFactor == 0)
|
||||||
{
|
{
|
||||||
Material material = UtilMath.randomElement(SWORD_TYPES);
|
Material material = UtilMath.randomElement(SWORD_TYPES);
|
||||||
@ -194,15 +227,28 @@ public class ItemSwortal extends ItemGadget
|
|||||||
{
|
{
|
||||||
Sword.setItemInHand(new ItemStack(material));
|
Sword.setItemInHand(new ItemStack(material));
|
||||||
}
|
}
|
||||||
|
|
||||||
Point.getWorld().playSound(Point, Sound.ZOMBIE_REMEDY, 1, 0.5F);
|
Point.getWorld().playSound(Point, Sound.ZOMBIE_REMEDY, 1, 0.5F);
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector direction = Direction.clone().multiply(DistFactor += 0.5);
|
Vector direction = Direction.clone().multiply(DistFactor += DIST_FACTOR_TICK);
|
||||||
Location newLocation = Sword.getLocation().add(Direction.clone().multiply(0.5));
|
Location newLocation = Sword.getLocation().add(Direction.clone().multiply(DIST_FACTOR_TICK));
|
||||||
|
|
||||||
if (newLocation.getBlock().getType() != Material.AIR)
|
if (newLocation.getBlock().getType() != Material.AIR)
|
||||||
{
|
{
|
||||||
explode();
|
explode(false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (Sortal sortal : _sortals)
|
||||||
|
{
|
||||||
|
if (sortal.Wielder.equals(Wielder) || sortal.shouldClean() || !hasCollided(sortal))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
explode(true);
|
||||||
|
sortal.explode(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -210,16 +256,23 @@ public class ItemSwortal extends ItemGadget
|
|||||||
SwordPathPoints.add(Point.clone().add(direction));
|
SwordPathPoints.add(Point.clone().add(direction));
|
||||||
}
|
}
|
||||||
|
|
||||||
void explode()
|
void explode(boolean swordCollision)
|
||||||
{
|
{
|
||||||
Location location = Sword.getLocation();
|
Location location = Sword.getLocation();
|
||||||
|
|
||||||
UtilParticle.PlayParticleToAll(ParticleType.HUGE_EXPLOSION, location, null, 0, 1, ViewDist.LONGER);
|
if (swordCollision)
|
||||||
location.getWorld().playSound(location, Sound.EXPLODE, 2, 0.5F);
|
|
||||||
|
|
||||||
UtilPlayer.getInRadius(location, 8).forEach((player, scale) ->
|
|
||||||
{
|
{
|
||||||
if (!Manager.selectEntity(ItemSwortal.this, player))
|
UtilParticle.PlayParticleToAll(ParticleType.FIREWORKS_SPARK, location.add(0, 1, 0), null, 0.1F, 10, ViewDist.LONG);
|
||||||
|
Point.getWorld().playSound(Point, Sound.ZOMBIE_REMEDY, 1, 0.5F);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
UtilParticle.PlayParticleToAll(ParticleType.HUGE_EXPLOSION, location.add(0, 1, 0), null, 0, 1, ViewDist.LONG);
|
||||||
|
location.getWorld().playSound(location, Sound.EXPLODE, 1.3F, 0.5F);
|
||||||
|
|
||||||
|
UtilPlayer.getInRadius(location, EXPLOSION_RADIUS).forEach((player, scale) ->
|
||||||
|
{
|
||||||
|
if (!Manager.selectEntity(ItemSortal.this, player))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -228,6 +281,7 @@ public class ItemSwortal extends ItemGadget
|
|||||||
.setY(0.8)
|
.setY(0.8)
|
||||||
.multiply(scale * 2));
|
.multiply(scale * 2));
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
remove();
|
remove();
|
||||||
}
|
}
|
||||||
@ -238,5 +292,15 @@ public class ItemSwortal extends ItemGadget
|
|||||||
PortalPoints.clear();
|
PortalPoints.clear();
|
||||||
SwordPathPoints.clear();
|
SwordPathPoints.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean shouldClean()
|
||||||
|
{
|
||||||
|
return !Sword.isValid() || Sword.getTicksLived() > MAX_SWORD_TICKS;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean hasCollided(Sortal sortal)
|
||||||
|
{
|
||||||
|
return UtilMath.offsetSquared(Sword, sortal.Sword) < 3;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user