Merge branch 'development'

This commit is contained in:
Brianna O'Keefe 2024-03-12 20:16:12 -05:00
commit 77fa2a3732
9 changed files with 170 additions and 110 deletions

View File

@ -3,7 +3,7 @@
<groupId>com.craftaro</groupId>
<artifactId>UltimateRepairing</artifactId>
<version>2.0.0</version>
<version>2.0.1</version>
<build>
<defaultGoal>clean install</defaultGoal>

View File

@ -14,7 +14,7 @@ import com.craftaro.ultimaterepairing.anvil.UAnvil;
import com.craftaro.ultimaterepairing.commands.CommandReload;
import com.craftaro.ultimaterepairing.commands.CommandSettings;
import com.craftaro.ultimaterepairing.commands.CommandURAnvil;
import com.craftaro.ultimaterepairing.handlers.ParticleTask;
import com.craftaro.ultimaterepairing.task.ParticleTask;
import com.craftaro.ultimaterepairing.handlers.RepairHandler;
import com.craftaro.ultimaterepairing.listeners.BlockListeners;
import com.craftaro.ultimaterepairing.listeners.InteractListeners;
@ -171,4 +171,8 @@ public class UltimateRepairing extends SongodaPlugin {
public GuiManager getGuiManager() {
return guiManager;
}
public ParticleTask getParticleTask() {
return particleTask;
}
}

View File

@ -1,6 +1,7 @@
package com.craftaro.ultimaterepairing.gui;
import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial;
import com.craftaro.ultimaterepairing.UltimateRepairing;
import com.craftaro.ultimaterepairing.anvil.UAnvil;
import com.craftaro.core.gui.Gui;
import com.craftaro.core.gui.GuiUtils;
@ -52,6 +53,7 @@ public class AnvilSettingsGui extends Gui {
(event) -> {
anvil.setParticles(!anvil.isParticles());
updateItemLore(event.slot, ChatColor.GRAY + "Currently: " + (anvil.isParticles() ? ChatColor.GREEN + "Enabled" : ChatColor.RED + "Disabled") + ChatColor.GRAY + ".");
UltimateRepairing.getInstance().getParticleTask().start();
});
}

View File

@ -37,7 +37,7 @@ public class RepairGui extends Gui {
this.player = player;
setRows(6);
setTitle(plugin.getLocale().getMessage("interface.repair.title").getMessage());
setTitle(plugin.getLocale().getMessage("interface.repair.title" + (hasRepairableItems() ? "" : "None")).getMessage());
init(type);
}
@ -64,11 +64,9 @@ public class RepairGui extends Gui {
plugin.getLocale().getMessage("interface.repair.swap").getMessage()), (event) ->
init(type.getNext(player)));
int i = 9;
for (int playerslot = 0; playerslot < player.getInventory().getContents().length; playerslot++) {
ItemStack item = player.getInventory().getContents()[playerslot];
if (item == null || item.getDurability() <= 0 || item.getMaxStackSize() != 1) continue;
int i = 9;
for (ItemStack item : getRepairableItems()) {
ItemStack toRepair = item.clone();
short durability = item.getDurability();
@ -93,7 +91,7 @@ public class RepairGui extends Gui {
}
item.setDurability(durability);
int finalplayerslot = playerslot;
int playerslot = player.getInventory().first(toRepair);
setButton(i, item, (event) -> {
exit();
if (!player.getInventory().contains(toRepair)) {
@ -101,7 +99,7 @@ public class RepairGui extends Gui {
return;
}
player.getInventory().removeItem(toRepair);
plugin.getRepairHandler().preRepair(toRepair, finalplayerslot, player, type, anvil);
plugin.getRepairHandler().preRepair(toRepair, playerslot, player, type, anvil);
});
i++;
}
@ -114,5 +112,13 @@ public class RepairGui extends Gui {
}
}
private ItemStack[] getRepairableItems() {
return Arrays.stream(player.getInventory().getContents())
.filter(item -> item != null && item.getDurability() > 0 && item.getMaxStackSize() == 1)
.toArray(ItemStack[]::new);
}
private boolean hasRepairableItems() {
return getRepairableItems().length > 0;
}
}

View File

@ -1,54 +0,0 @@
package com.craftaro.ultimaterepairing.handlers;
import com.craftaro.ultimaterepairing.UltimateRepairing;
import com.craftaro.core.compatibility.CompatibleParticleHandler;
import com.craftaro.core.compatibility.CompatibleParticleHandler.ParticleType;
import org.bukkit.Bukkit;
import org.bukkit.event.Listener;
import org.bukkit.scheduler.BukkitTask;
/**
* Created by songoda on 2/24/2017.
*/
public class ParticleTask implements Listener {
private final UltimateRepairing instance;
int amt;
String typeName;
ParticleType type;
BukkitTask task = null;
public ParticleTask(UltimateRepairing instance) {
this.instance = instance;
}
public void start() {
reload();
if (task == null) {
task = Bukkit.getServer().getScheduler().runTaskTimerAsynchronously(instance, this::applyParticles, 0L, 4L);
}
}
public void stop() {
if (task != null) {
Bukkit.getServer().getScheduler().cancelTask(task.getTaskId());
task = null;
}
}
public void reload() {
amt = instance.getConfig().getInt("Main.Particle Amount", 24) / 2;
typeName = instance.getConfig().getString("Main.Particle Type", "SPELL_WITCH");
type = ParticleType.getParticle(typeName);
if (type == null) {
type = ParticleType.SPELL_WITCH;
}
}
public void applyParticles() {
if (instance.getAnvilManager().getAnvils().isEmpty()) return;
instance.getAnvilManager().getAnvils().parallelStream()
.filter(anvil -> anvil.isParticles() && anvil.isInLoadedChunk())
.forEach(anvil -> CompatibleParticleHandler.spawnParticles(type, anvil.getLocation().add(.5, 0, .5), amt, 0.25, 0.25, 0.25));
}
}

View File

@ -1,22 +1,19 @@
package com.craftaro.ultimaterepairing.handlers;
import com.craftaro.core.gui.GuiManager;
import com.craftaro.core.hooks.EconomyManager;
import com.craftaro.core.utils.PlayerUtils;
import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial;
import com.craftaro.third_party.com.cryptomorin.xseries.XSound;
import com.craftaro.ultimaterepairing.UltimateRepairing;
import com.craftaro.ultimaterepairing.anvil.PlayerAnvilData;
import com.craftaro.ultimaterepairing.gui.RepairGui;
import com.craftaro.ultimaterepairing.gui.StartConfirmGui;
import com.craftaro.ultimaterepairing.utils.Methods;
import com.craftaro.core.gui.GuiManager;
import com.craftaro.core.hooks.EconomyManager;
import com.craftaro.core.utils.PlayerUtils;
import com.craftaro.ultimaterepairing.repair.RepairType;
import org.bukkit.Bukkit;
import org.bukkit.Effect;
import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.Material;
import com.craftaro.ultimaterepairing.utils.Methods;
import org.bukkit.*;
import org.bukkit.entity.Item;
import org.bukkit.entity.LightningStrike;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.metadata.FixedMetadataValue;
@ -31,13 +28,13 @@ import java.util.UUID;
*/
public class RepairHandler {
private final UltimateRepairing instance;
private final UltimateRepairing plugin;
private final GuiManager guiManager;
private final Map<UUID, PlayerAnvilData> playerAnvilData = new HashMap<>();
public RepairHandler(UltimateRepairing instance, GuiManager guiManager) {
this.instance = instance;
public RepairHandler(UltimateRepairing plugin, GuiManager guiManager) {
this.plugin = plugin;
this.guiManager = guiManager;
}
@ -60,16 +57,16 @@ public class RepairHandler {
Item item = player.getWorld().dropItem(anvil.add(0.5, 2, 0.5), itemStack);
// Support for EpicHoppers suction.
item.setMetadata("grabbed", new FixedMetadataValue(instance, "true"));
item.setMetadata("grabbed", new FixedMetadataValue(plugin, "true"));
item.setMetadata("betterdrops_ignore", new FixedMetadataValue(instance, true));
item.setMetadata("betterdrops_ignore", new FixedMetadataValue(plugin, true));
Vector vec = player.getEyeLocation().getDirection();
vec.setX(0);
vec.setY(0);
vec.setZ(0);
item.setVelocity(vec);
item.setPickupDelay(3600);
item.setMetadata("UltimateRepairing", new FixedMetadataValue(instance, ""));
item.setMetadata("UltimateRepairing", new FixedMetadataValue(plugin, ""));
playerData.setItem(item);
playerData.setToBeRepaired(itemStack);
@ -77,20 +74,20 @@ public class RepairHandler {
yesNo(player, type, itemStack);
Bukkit.getScheduler().scheduleSyncDelayedTask(instance, () -> {
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> {
if (item.isValid() && !playerData.isBeingRepaired()) {
instance.getLocale().getMessage("event.repair.timeout").sendPrefixedMessage(player);
plugin.getLocale().getMessage("event.repair.timeout").sendPrefixedMessage(player);
removeItem(playerData, player);
player.closeInventory();
}
}, instance.getConfig().getLong("Main.Time Before Repair Auto Canceled"));
}, plugin.getConfig().getLong("Main.Time Before Repair Auto Canceled"));
}
public void initRepair(Player player, Location anvil) {
if (anvil.add(0, 1, 0).getBlock().getType() != Material.AIR) {
instance.getLocale().getMessage("event.repair.needspace").sendPrefixedMessage(player);
plugin.getLocale().getMessage("event.repair.needspace").sendPrefixedMessage(player);
return;
}
@ -117,7 +114,7 @@ public class RepairHandler {
PlayerAnvilData playerData = playerAnvilData.computeIfAbsent(player.getUniqueId(), uuid -> new PlayerAnvilData());
if (!answer) {
removeItem(playerData, player);
instance.getLocale().getMessage("event.repair.cancelled").sendPrefixedMessage(player);
plugin.getLocale().getMessage("event.repair.cancelled").sendPrefixedMessage(player);
return;
}
RepairType type = playerData.getType();
@ -168,43 +165,79 @@ public class RepairHandler {
Location location = playerData.getLocations();
player.getWorld().playEffect(location, effect, blockTypeFinal);
Runnable runnable = () -> player.getWorld().playEffect(location, effect, blockTypeFinal);
Bukkit.getScheduler().scheduleSyncDelayedTask(instance, runnable, 5L);
Bukkit.getScheduler().scheduleSyncDelayedTask(instance, () -> {
player.getWorld().playEffect(location, effect, blockTypeFinal);
player.getWorld().playEffect(location, effect, Material.STONE);
XSound.BLOCK_ANVIL_LAND.play(player);
}, 10L);
Bukkit.getScheduler().scheduleSyncDelayedTask(instance, runnable, 15L);
Bukkit.getScheduler().scheduleSyncDelayedTask(instance, runnable, 20L);
Bukkit.getScheduler().scheduleSyncDelayedTask(instance, () -> {
XSound.BLOCK_ANVIL_LAND.play(player);
player.getWorld().playEffect(location, effect, blockTypeFinal);
player.getWorld().playEffect(location, effect, Material.ANVIL);
instance.getLocale().getMessage("event.repair.success").sendPrefixedMessage(player);
Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> {
try {
Runnable runnable = () -> player.getWorld().playEffect(location, effect, blockTypeFinal);
playerData.getToBeRepaired().setDurability((short) 0);
removeItem(playerData, player);
// Delay for 5 ticks (0.25 seconds)
Thread.sleep(250);
Bukkit.getScheduler().runTask(plugin, runnable);
if (player.getGameMode() != GameMode.CREATIVE &&
type == RepairType.EXPERIENCE) {
player.setLevel(player.getLevel() - playerData.getPrice());
// Delay for 10 ticks (0.5 seconds)
Thread.sleep(500);
Bukkit.getScheduler().runTask(plugin, () -> {
player.getWorld().playEffect(location, effect, blockTypeFinal);
player.getWorld().playEffect(location, effect, Material.STONE);
XSound.BLOCK_ANVIL_LAND.play(player);
});
// Delay for 15 ticks (0.75 seconds)
Thread.sleep(500);
Bukkit.getScheduler().runTask(plugin, runnable);
// Delay for 20 ticks (1 second)
Thread.sleep(250);
Bukkit.getScheduler().runTask(plugin, runnable);
// Delay for 20 ticks (1 second)
Thread.sleep(250);
Bukkit.getScheduler().runTask(plugin, runnable);
// Delay for 25 ticks (1.25 seconds)
Thread.sleep(500);
Bukkit.getScheduler().runTask(plugin, () -> {
XSound.BLOCK_ANVIL_LAND.play(player);
player.getWorld().playEffect(location, effect, blockTypeFinal);
player.getWorld().playEffect(location, effect, Material.ANVIL);
// Move the repaired item up
Item item = playerData.getItem();
if (item != null && item.isValid()) {
item.setVelocity(new Vector(0, 0.3, 0)); // Adjust the velocity as needed
item.setPickupDelay(20); // Adjust the pickup delay as needed
}
});
Thread.sleep(250);
XSound.ENTITY_PLAYER_LEVELUP.play(player);
// Delay for 30 ticks (1.5 seconds)
Thread.sleep(300);
Bukkit.getScheduler().runTask(plugin, () -> {
plugin.getLocale().getMessage("event.repair.success").sendPrefixedMessage(player);
playerData.getToBeRepaired().setDurability((short) 0);
removeItem(playerData, player);
if (player.getGameMode() != GameMode.CREATIVE && type == RepairType.EXPERIENCE) {
player.setLevel(player.getLevel() - playerData.getPrice());
}
player.closeInventory();
});
} catch (InterruptedException e) {
e.printStackTrace();
}
player.closeInventory();
}, 25L);
});
return;
}
if (type == RepairType.ECONOMY) {
instance.getLocale().getMessage("event.repair.notenough")
.processPlaceholder("type", instance.getLocale().getMessage("interface.repair.eco").getMessage())
plugin.getLocale().getMessage("event.repair.notenough")
.processPlaceholder("type", plugin.getLocale().getMessage("interface.repair.eco").getMessage())
.sendPrefixedMessage(player);
} else if (type == RepairType.EXPERIENCE)
instance.getLocale().getMessage("event.repair.notenough")
.processPlaceholder("type", instance.getLocale().getMessage("interface.repair.xp").getMessage())
plugin.getLocale().getMessage("event.repair.notenough")
.processPlaceholder("type", plugin.getLocale().getMessage("interface.repair.xp").getMessage())
.sendPrefixedMessage(player);
else
instance.getLocale().getMessage("event.repair.notenough")
plugin.getLocale().getMessage("event.repair.notenough")
.processPlaceholder("type", name).sendPrefixedMessage(player);
// we've failed to repair, so return the item

View File

@ -16,7 +16,6 @@ public class PlayerListeners implements Listener {
@EventHandler
public void onLeave(PlayerQuitEvent event) {
if (!plugin.getRepairHandler().hasInstance(event.getPlayer())
|| !plugin.getRepairHandler().getDataFor(event.getPlayer()).getInRepair())
return;

View File

@ -0,0 +1,69 @@
package com.craftaro.ultimaterepairing.task;
import com.craftaro.core.compatibility.CompatibleParticleHandler;
import com.craftaro.core.compatibility.CompatibleParticleHandler.ParticleType;
import com.craftaro.ultimaterepairing.UltimateRepairing;
import com.craftaro.ultimaterepairing.anvil.UAnvil;
import com.craftaro.ultimaterepairing.settings.Settings;
import org.bukkit.scheduler.BukkitRunnable;
import java.util.List;
import java.util.stream.Collectors;
/**
* Created by songoda on 2/24/2017.
*/
public class ParticleTask extends BukkitRunnable {
private final UltimateRepairing plugin;
private int amt;
private String typeName;
private ParticleType type;
private boolean hasStarted = false;
public ParticleTask(UltimateRepairing plugin) {
this.plugin = plugin;
}
public void start() {
if (hasStarted && !isCancelled())
return;
reload();
if (hasStarted)
run();
else
runTaskTimerAsynchronously(plugin, 0L, 4L);
hasStarted = true;
}
public void reload() {
amt = Settings.PARTICLE_AMOUNT.getInt(24) / 2;
typeName = Settings.PARTICLE_TYPE.getString("SPELL_WITCH");
type = ParticleType.getParticle(typeName);
if (type == null)
type = ParticleType.SPELL_WITCH;
}
@Override
public void run() {
if (plugin.getAnvilManager().getAnvils().isEmpty()) {
cancel();
return;
}
List<UAnvil> anvils = plugin.getAnvilManager().getAnvils().parallelStream()
.filter(UAnvil::isParticles).collect(Collectors.toList());
if (anvils.isEmpty()) {
cancel();
return;
}
anvils.stream().filter(UAnvil::isInLoadedChunk)
.forEach(anvil -> CompatibleParticleHandler
.spawnParticles(type, anvil.getLocation().add(.5, 0, .5), amt,
0.25, 0.25, 0.25));
}
}

View File

@ -14,6 +14,7 @@ general:
interface:
repair:
title: '&9How do you want to repair?'
titleNone: '&cNothing needs repairing...'
xpTitle: '&9XP'
xp: '&9XP'
xplore: '&7Click to repair with XP.'