This commit is contained in:
Sam 2018-06-30 20:42:14 +01:00 committed by Alexander Meech
parent f8fce22d06
commit 0bb7784bfb
5 changed files with 218 additions and 4 deletions

View File

@ -136,6 +136,7 @@ import mineplex.core.gadget.gadgets.item.ItemBallCatch;
import mineplex.core.gadget.gadgets.item.ItemBatGun; import mineplex.core.gadget.gadgets.item.ItemBatGun;
import mineplex.core.gadget.gadgets.item.ItemBow; import mineplex.core.gadget.gadgets.item.ItemBow;
import mineplex.core.gadget.gadgets.item.ItemCandy; import mineplex.core.gadget.gadgets.item.ItemCandy;
import mineplex.core.gadget.gadgets.item.ItemClacker;
import mineplex.core.gadget.gadgets.item.ItemCoal; import mineplex.core.gadget.gadgets.item.ItemCoal;
import mineplex.core.gadget.gadgets.item.ItemCoinBomb; import mineplex.core.gadget.gadgets.item.ItemCoinBomb;
import mineplex.core.gadget.gadgets.item.ItemConnect4; import mineplex.core.gadget.gadgets.item.ItemConnect4;
@ -569,6 +570,7 @@ public class GadgetManager extends MiniPlugin
addGadget(new ItemTrampoline(this)); addGadget(new ItemTrampoline(this));
addGadget(new ItemConnect4(this)); addGadget(new ItemConnect4(this));
addGadget(new ItemMaryPoppins(this)); addGadget(new ItemMaryPoppins(this));
addGadget(new ItemClacker(this));
// Costume // Costume
addGadget(new OutfitRaveSuitHelmet(this)); addGadget(new OutfitRaveSuitHelmet(this));

View File

@ -0,0 +1,215 @@
package mineplex.core.gadget.gadgets.item;
import java.time.Month;
import java.time.YearMonth;
import java.util.concurrent.TimeUnit;
import org.bukkit.Color;
import org.bukkit.EntityEffect;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.block.BlockFace;
import org.bukkit.entity.ArmorStand;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.util.Vector;
import mineplex.core.common.util.C;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilAction;
import mineplex.core.common.util.UtilAlg;
import mineplex.core.common.util.UtilBlock;
import mineplex.core.common.util.UtilEnt;
import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilParticle;
import mineplex.core.common.util.UtilParticle.ParticleType;
import mineplex.core.common.util.UtilParticle.ViewDist;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilShapes;
import mineplex.core.common.util.particles.ColoredParticle;
import mineplex.core.common.util.particles.DustSpellColor;
import mineplex.core.gadget.GadgetManager;
import mineplex.core.gadget.types.ItemGadget;
import mineplex.core.gadget.util.CostConstants;
import mineplex.core.itemstack.ItemBuilder;
import mineplex.core.recharge.Recharge;
public class ItemClacker extends ItemGadget
{
private static final int SWITCH_TICKS = 60, MAX_TICKS = 200;
private static final int RADIUS = 2;
private static final double DELTA_THETA = Math.PI / 13;
private static final DustSpellColor COLOUR = new DustSpellColor(Color.YELLOW);
public ItemClacker(GadgetManager manager)
{
super(manager, "Clacker Boomerang", new String[]
{
C.cGray + "A ancient fighting style involving",
C.cGray + "a pair of Clackers. It's said that a true",
C.cGray + "master of the art can turn them",
C.cGray + "into boomerangs."
}, CostConstants.POWERPLAY_BONUS, Material.STAINED_CLAY, (byte) 10, TimeUnit.SECONDS.toMillis(10), null);
setPPCYearMonth(YearMonth.of(2018, Month.JULY));
}
@Override
public void ActivateCustom(Player player)
{
Location location = player.getLocation().subtract(0, 0.5, 0);
location.add(location.getDirection());
player.sendMessage(F.main(Manager.getName(), "You threw your " + F.name(getName()) + "."));
if (Math.random() < 0.01)
{
player.sendMessage(F.main(Manager.getName(), "Is this some sort of JoJo's reference?"));
}
Clacker clacker = new Clacker(player, location);
Manager.runSyncTimer(new BukkitRunnable()
{
@Override
public void run()
{
if (clacker.update())
{
clacker.remove();
cancel();
}
}
}, 0, 1);
}
private class Clacker
{
private final Player _player;
private final Location _location;
private final ArmorStand _a, _b;
private Vector _direction;
private double _theta;
private int _ticks;
private boolean _backwards;
Clacker(Player player, Location location)
{
_player = player;
_location = location;
_direction = location.getDirection().multiply(0.5);
_a = location.getWorld().spawn(location, ArmorStand.class);
_b = location.getWorld().spawn(location, ArmorStand.class);
setupStand(_a);
setupStand(_b);
}
private void setupStand(ArmorStand stand)
{
stand.setVisible(false);
stand.setGravity(false);
stand.setHelmet(new ItemBuilder(getDisplayMaterial(), getDisplayData())
.build());
}
boolean update()
{
if (!_player.isOnline() || !_player.getWorld().equals(_location.getWorld()))
{
return true;
}
double x = RADIUS * Math.cos(_theta);
double z = RADIUS * Math.sin(_theta);
Location aLocation = _location.clone().add(x, 0, z);
Location bLocation = _location.clone().subtract(x, 0, z);
if (!_backwards && (UtilBlock.solid(aLocation.getBlock().getRelative(BlockFace.UP, 2)) || UtilBlock.solid(bLocation.getBlock().getRelative(BlockFace.UP, 2))))
{
_backwards = true;
}
UtilEnt.setPosition(_a, aLocation);
UtilEnt.setPosition(_b, bLocation);
UtilPlayer.getInRadius(_location, RADIUS + 1).forEach((player, scale) ->
{
if (_player.equals(player) || !Recharge.Instance.use(player, "Hit By " + getName(), 500, false, false))
{
return;
}
Location location = player.getLocation();
Vector direction = UtilAlg.getTrajectory(_location, location).multiply(1.5);
direction.setY(0.7 + (Math.random() / 4));
UtilAction.velocity(player, direction);
UtilParticle.PlayParticleToAll(ParticleType.FIREWORKS_SPARK, location.add(0, 1, 0), 0.6F, 0.6F, 0.6F, 0.01F, 10, ViewDist.NORMAL);
player.getWorld().playSound(location, Sound.NOTE_PLING, 1.5F, (float) (0.5 + Math.random() / 5));
player.playEffect(EntityEffect.HURT);
player.sendMessage(F.main(Manager.getName(), "You were hit by " + F.name(_player.getName()) + "'s " + F.name(getName()) + "."));
_player.sendMessage(F.main(Manager.getName(), "You hit " + F.name(player.getName()) + " with your " + F.name(getName()) + "."));
});
if (_ticks % 10 == 0)
{
_location.getWorld().playSound(_location, Sound.ENDERDRAGON_WINGS, 1.5F, 0.2F);
}
_theta += DELTA_THETA;
if (_backwards)
{
_direction.add(UtilAlg.getTrajectory(_location, _player.getLocation()).multiply(0.2));
_location.add(_direction.multiply(0.5));
_direction.normalize();
if (_ticks++ == MAX_TICKS)
{
return true;
}
else if (UtilMath.offsetSquared(_location, _player.getLocation()) < 4)
{
_player.sendMessage(F.main(Manager.getName(), "You caught your " + F.name(getName()) + "."));
return true;
}
}
else
{
_location.add(_direction);
if (_ticks++ == SWITCH_TICKS)
{
_backwards = true;
_direction = _direction.multiply(-1);
}
}
aLocation.add(0, 1.7, 0);
bLocation.add(0, 1.7, 0);
for (Location location : UtilShapes.getLinesLimitedPoints(aLocation, bLocation, RADIUS * 5))
{
new ColoredParticle(ParticleType.RED_DUST, COLOUR, location)
.display(ViewDist.LONG);
}
return false;
}
void remove()
{
_a.remove();
_b.remove();
}
}
}

View File

@ -1,7 +1,6 @@
package mineplex.core.powerplayclub; package mineplex.core.powerplayclub;
import java.time.Month; import java.time.Month;
import java.time.Year;
import java.time.YearMonth; import java.time.YearMonth;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -52,6 +51,7 @@ public class PowerPlayClubRewards
.put(YearMonth.of(2018, Month.APRIL), new UnknownSalesPackageItem("Nanny's Umbrella")) .put(YearMonth.of(2018, Month.APRIL), new UnknownSalesPackageItem("Nanny's Umbrella"))
.put(YearMonth.of(2018, Month.MAY), new UnknownSalesPackageItem("Windup")) .put(YearMonth.of(2018, Month.MAY), new UnknownSalesPackageItem("Windup"))
.put(YearMonth.of(2018, Month.JUNE), new UnknownSalesPackageItem("Chicken Taunt")) .put(YearMonth.of(2018, Month.JUNE), new UnknownSalesPackageItem("Chicken Taunt"))
.put(YearMonth.of(2018, Month.JULY), new UnknownSalesPackageItem("Clacker Boomerang"))
.build(); .build();
public interface PowerPlayClubItem public interface PowerPlayClubItem

View File

@ -1,7 +1,5 @@
package mineplex.gemhunters.loot.rewards; package mineplex.gemhunters.loot.rewards;
import com.sun.org.apache.xpath.internal.operations.Bool;
import mineplex.core.common.util.Callback;
import mineplex.core.server.util.TransactionResponse; import mineplex.core.server.util.TransactionResponse;
import mineplex.gemhunters.util.SlackRewardBot; import mineplex.gemhunters.util.SlackRewardBot;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;

View File

@ -1,6 +1,5 @@
package mineplex.gemhunters.shop.deserialisers; package mineplex.gemhunters.shop.deserialisers;
import com.sun.org.apache.xpath.internal.operations.Bool;
import mineplex.core.google.SheetObjectDeserialiser; import mineplex.core.google.SheetObjectDeserialiser;
import mineplex.gemhunters.shop.VillagerProperties; import mineplex.gemhunters.shop.VillagerProperties;