277 lines
7.5 KiB
Java
277 lines
7.5 KiB
Java
|
package mineplex.core.bonuses.gui;
|
||
|
|
||
|
import java.util.ArrayList;
|
||
|
|
||
|
import org.bukkit.Bukkit;
|
||
|
import org.bukkit.ChatColor;
|
||
|
import org.bukkit.Material;
|
||
|
import org.bukkit.Sound;
|
||
|
import org.bukkit.entity.Player;
|
||
|
import org.bukkit.event.EventHandler;
|
||
|
import org.bukkit.event.EventPriority;
|
||
|
import org.bukkit.event.inventory.InventoryCloseEvent;
|
||
|
import org.bukkit.inventory.ItemStack;
|
||
|
import org.bukkit.plugin.Plugin;
|
||
|
|
||
|
import mineplex.core.bonuses.BonusManager;
|
||
|
import mineplex.core.bonuses.gui.buttons.RewardButton;
|
||
|
import mineplex.core.common.util.C;
|
||
|
import mineplex.core.common.util.F;
|
||
|
import mineplex.core.common.util.UtilPlayer;
|
||
|
import mineplex.core.gui.DisplayItem;
|
||
|
import mineplex.core.gui.SimpleGui;
|
||
|
import mineplex.core.itemstack.ItemStackFactory;
|
||
|
import mineplex.core.reward.Reward;
|
||
|
import mineplex.core.reward.RewardData;
|
||
|
import mineplex.core.shop.item.ShopItem;
|
||
|
import mineplex.core.treasure.reward.RewardRarity;
|
||
|
import mineplex.core.treasure.reward.TreasureRewardManager;
|
||
|
import mineplex.core.treasure.types.CarlTreasure;
|
||
|
import mineplex.core.updater.UpdateType;
|
||
|
import mineplex.core.updater.event.UpdateEvent;
|
||
|
|
||
|
public class SpinGui extends SimpleGui
|
||
|
{
|
||
|
|
||
|
private static final int HOPPER_SLOT = 4;
|
||
|
private static final int CARL_SLOT = 22;
|
||
|
private static final int[] LINE_NUMS = { /*-27, -18,*/ -9, 9/*, 18*/};
|
||
|
private static final CarlTreasure TREASURE = new CarlTreasure();
|
||
|
|
||
|
private RewardData _rewardData;
|
||
|
private Reward _reward;
|
||
|
private BonusManager _manager;
|
||
|
private int _currentRewardIndex;
|
||
|
private int _ticksThisSwap;
|
||
|
private int _ticksPerSwap;
|
||
|
private Reward[] _rewards;
|
||
|
private boolean _stopped;
|
||
|
private boolean _rewarded;
|
||
|
private ArrayList<Integer> _ticks;
|
||
|
private int _frame;
|
||
|
private float _pitch;
|
||
|
private int _stopSpinnerAt;
|
||
|
|
||
|
public SpinGui(Plugin plugin, Player player, TreasureRewardManager rewardManager, BonusManager manager)
|
||
|
{
|
||
|
super(plugin, player, "Carl's Spinner", 27);
|
||
|
|
||
|
_manager = manager;
|
||
|
|
||
|
ShopItem carlItem = new ShopItem(Material.SKULL_ITEM, (byte) 4, "Carl's Spinner", new String[]{ChatColor.RESET + "Good Luck!"}, 1, false, false);
|
||
|
|
||
|
setItem(HOPPER_SLOT, new DisplayItem(new ItemStack(Material.HOPPER)));
|
||
|
//setItem(CARL_SLOT, new DisplayItem(carlItem));
|
||
|
|
||
|
|
||
|
_ticks = new ArrayList<>();
|
||
|
_frame = 0;
|
||
|
_pitch = 1;
|
||
|
|
||
|
|
||
|
_ticksPerSwap = 1;
|
||
|
|
||
|
for (int i = 0; i < 40; i++)
|
||
|
_ticks.add(1);
|
||
|
|
||
|
for (int i = 0; i < 20; i++)
|
||
|
_ticks.add(2);
|
||
|
|
||
|
for (int i = 0; i < 10; i++)
|
||
|
_ticks.add(4);
|
||
|
|
||
|
for (int i = 0; i < 4; i++)
|
||
|
_ticks.add(6);
|
||
|
|
||
|
for (int i = 0; i < 3; i++)
|
||
|
_ticks.add(8);
|
||
|
|
||
|
if (Math.random() > 0.5)
|
||
|
{
|
||
|
_ticks.add(12);
|
||
|
}
|
||
|
|
||
|
_stopSpinnerAt = _ticks.size();
|
||
|
|
||
|
//Create Rewards
|
||
|
_rewards = new Reward[_stopSpinnerAt + 10]; //Adding 10, so theres items to the right still.
|
||
|
for (int i = 0; i < _stopSpinnerAt + 10; i++)
|
||
|
{
|
||
|
if (i != _stopSpinnerAt + 4)
|
||
|
{
|
||
|
_rewards[i] = TREASURE.nextReward(player, true);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
_rewards[i] = TREASURE.nextReward(player, false);
|
||
|
_reward = _rewards[i];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
_reward.giveReward(player, data -> _rewardData = data);
|
||
|
}
|
||
|
|
||
|
private void tick()
|
||
|
{
|
||
|
|
||
|
if (_stopped)
|
||
|
return;
|
||
|
|
||
|
_ticksThisSwap++;
|
||
|
|
||
|
// Swap
|
||
|
if (_ticksThisSwap >= _ticksPerSwap)
|
||
|
{
|
||
|
_ticksThisSwap = 0;
|
||
|
|
||
|
if (_pitch == 1)
|
||
|
_pitch = (float) 1.5;
|
||
|
else if (_pitch == 1.5)
|
||
|
_pitch = 2;
|
||
|
else if (_pitch == 2)
|
||
|
_pitch = 1;
|
||
|
|
||
|
getPlayer().playSound(getPlayer().getEyeLocation(), Sound.NOTE_PLING, 1, _pitch);
|
||
|
|
||
|
_currentRewardIndex++;
|
||
|
|
||
|
updateGui();
|
||
|
|
||
|
// Slow
|
||
|
_ticksPerSwap = _ticks.get(_currentRewardIndex - 1);
|
||
|
|
||
|
if (_currentRewardIndex == _stopSpinnerAt)
|
||
|
_stopped = true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void updateGui()
|
||
|
{
|
||
|
for (int i = 0; i < 9; i++)
|
||
|
{
|
||
|
int index = _currentRewardIndex + i;
|
||
|
|
||
|
int slot = 9 + i;
|
||
|
RewardData data = _rewards[index].getFakeRewardData(getPlayer());
|
||
|
setItem(slot, new RewardButton(data));
|
||
|
|
||
|
// Glass Panes
|
||
|
for (int j = 0; j < LINE_NUMS.length; j++)
|
||
|
{
|
||
|
int paneSlot = slot + LINE_NUMS[j];
|
||
|
if (paneSlot == HOPPER_SLOT)
|
||
|
continue;
|
||
|
|
||
|
setItem(paneSlot, new DisplayItem(data.getRarity().getItemStack()));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@EventHandler
|
||
|
public void update(UpdateEvent event)
|
||
|
{
|
||
|
if (event.getType() != UpdateType.TICK)
|
||
|
return;
|
||
|
|
||
|
tick();
|
||
|
checkIfDone();
|
||
|
}
|
||
|
|
||
|
@EventHandler(priority = EventPriority.HIGHEST)
|
||
|
public void close(InventoryCloseEvent event)
|
||
|
{
|
||
|
if (_rewarded)
|
||
|
return;
|
||
|
|
||
|
if (event.getPlayer() != getPlayer())
|
||
|
return;
|
||
|
|
||
|
_manager.addPendingExplosion(getPlayer(), _reward);
|
||
|
|
||
|
if (_reward.getRarity() == RewardRarity.RARE)
|
||
|
{
|
||
|
Bukkit.broadcastMessage(F.main("Treasure", F.name(event.getPlayer().getName()) + " won " + C.cPurple + "Rare " + _rewardData.getFriendlyName() + C.cGray + " from Carl's Spinner."));
|
||
|
}
|
||
|
else if (_reward.getRarity() == RewardRarity.LEGENDARY)
|
||
|
{
|
||
|
Bukkit.broadcastMessage(F.main("Treasure", F.name(event.getPlayer().getName()) + " won " + C.cGreen + "Legendary " + _rewardData.getFriendlyName() + C.cGray + " from Carl's Spinner."));
|
||
|
}
|
||
|
else if (_reward.getRarity() == RewardRarity.MYTHICAL)
|
||
|
{
|
||
|
Bukkit.broadcastMessage(F.main("Treasure", F.name(event.getPlayer().getName()) + " won " + C.cRed + "Mythical " + _rewardData.getFriendlyName() + C.cGray + " from Carl's Spinner."));
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
UtilPlayer.message(getPlayer(), F.main("Carl's Spinner", "You won " + _rewardData.getRarity().getColor() + _rewardData.getFriendlyName() + C.cGray + " from Carl's Spinner."));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@EventHandler
|
||
|
public void Glass(UpdateEvent event)
|
||
|
{
|
||
|
if (event.getType() != UpdateType.FAST)
|
||
|
return;
|
||
|
|
||
|
if (!_stopped)
|
||
|
return;
|
||
|
|
||
|
if (!_rewarded)
|
||
|
return;
|
||
|
|
||
|
if (_frame == 0)
|
||
|
{
|
||
|
setItem(CARL_SLOT, new DisplayItem(_rewardData.getRarity().getItemStack()));
|
||
|
setItem(HOPPER_SLOT, new DisplayItem(_rewardData.getRarity().getItemStack()));
|
||
|
_frame++;
|
||
|
}
|
||
|
else if (_frame < 5)
|
||
|
{
|
||
|
setItem(HOPPER_SLOT + _frame, new DisplayItem(_rewardData.getRarity().getItemStack()));
|
||
|
setItem(HOPPER_SLOT - _frame, new DisplayItem(_rewardData.getRarity().getItemStack()));
|
||
|
|
||
|
setItem(CARL_SLOT + _frame, new DisplayItem(_rewardData.getRarity().getItemStack()));
|
||
|
setItem(CARL_SLOT - _frame, new DisplayItem(_rewardData.getRarity().getItemStack()));
|
||
|
|
||
|
setItem(13 + _frame, new DisplayItem(_rewardData.getRarity().getItemStack()));
|
||
|
setItem(13 - _frame, new DisplayItem(_rewardData.getRarity().getItemStack()));
|
||
|
_frame++;
|
||
|
}
|
||
|
if (_frame == 6)
|
||
|
{
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void checkIfDone()
|
||
|
{
|
||
|
if (!_stopped)
|
||
|
return;
|
||
|
|
||
|
if (_rewarded)
|
||
|
return;
|
||
|
|
||
|
_manager.addPendingExplosion(getPlayer(), _reward);
|
||
|
if (_reward.getRarity() == RewardRarity.RARE)
|
||
|
{
|
||
|
Bukkit.broadcastMessage(F.main("Treasure", F.name(getPlayer().getName()) + " won " + C.cPurple + "Rare " + _rewardData.getFriendlyName() + C.cGray + " from Carl's Spinner."));
|
||
|
}
|
||
|
else if (_reward.getRarity() == RewardRarity.LEGENDARY)
|
||
|
{
|
||
|
Bukkit.broadcastMessage(F.main("Treasure", F.name(getPlayer().getName()) + " won " + C.cGreen + "Legendary " + _rewardData.getFriendlyName() + C.cGray + " from Carl's Spinner."));
|
||
|
}
|
||
|
else if (_reward.getRarity() == RewardRarity.MYTHICAL)
|
||
|
{
|
||
|
Bukkit.broadcastMessage(F.main("Treasure", F.name(getPlayer().getName()) + " won " + C.cRed + "Mythical " + _rewardData.getFriendlyName() + C.cGray + " from Carl's Spinner."));
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
UtilPlayer.message(getPlayer(), F.main("Carl's Spinner", "You won " + _rewardData.getRarity().getColor() + _rewardData.getFriendlyName() + C.cGray + " from Carl's Spinner."));
|
||
|
}
|
||
|
ItemStack item = getInventory().getItem(13);
|
||
|
getInventory().setItem(13, ItemStackFactory.Instance.CreateStack(item.getType(), (byte) 0, 1, _rewardData.getFriendlyName()));
|
||
|
_rewarded = true;
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|