mirror of
https://github.com/Auxilor/Reforges.git
synced 2025-12-25 18:09:25 +00:00
Began rewriting many elements in kotlin
This commit is contained in:
@@ -73,9 +73,7 @@ public class ReforgesPlugin extends EcoPlugin {
|
||||
protected void handleReload() {
|
||||
for (Effect effect : Effects.values()) {
|
||||
HandlerList.unregisterAll(effect);
|
||||
this.getScheduler().run(() -> {
|
||||
this.getEventManager().registerListener(effect);
|
||||
});
|
||||
this.getScheduler().run(() -> this.getEventManager().registerListener(effect));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -83,7 +81,7 @@ public class ReforgesPlugin extends EcoPlugin {
|
||||
protected List<Listener> loadListeners() {
|
||||
return Arrays.asList(
|
||||
new DiscoverRecipeListener(this),
|
||||
new AntiPlaceListener(this),
|
||||
new AntiPlaceListener(),
|
||||
new WatcherTriggers(this)
|
||||
);
|
||||
}
|
||||
@@ -103,6 +101,6 @@ public class ReforgesPlugin extends EcoPlugin {
|
||||
|
||||
@Override
|
||||
public String getMinimumEcoVersion() {
|
||||
return "6.7.0";
|
||||
return "6.8.0";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,7 +56,7 @@ public class CommandGive extends Subcommand {
|
||||
public static void reload() {
|
||||
STONE_NAMES.clear();
|
||||
STONE_NAMES.addAll(Reforges.values().stream()
|
||||
.filter(Reforge::isRequiresStone)
|
||||
.filter(Reforge::getRequiresStone)
|
||||
.map(Reforge::getId)
|
||||
.collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
@@ -1,99 +0,0 @@
|
||||
package com.willfp.reforges.display;
|
||||
|
||||
import com.willfp.eco.core.EcoPlugin;
|
||||
import com.willfp.eco.core.display.Display;
|
||||
import com.willfp.eco.core.display.DisplayModule;
|
||||
import com.willfp.eco.core.display.DisplayPriority;
|
||||
import com.willfp.eco.core.fast.FastItemStack;
|
||||
import com.willfp.eco.util.SkullUtils;
|
||||
import com.willfp.reforges.reforges.Reforge;
|
||||
import com.willfp.reforges.reforges.meta.ReforgeTarget;
|
||||
import com.willfp.reforges.reforges.util.ReforgeUtils;
|
||||
import org.apache.commons.lang.WordUtils;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.bukkit.inventory.meta.SkullMeta;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class ReforgesDisplay extends DisplayModule {
|
||||
/**
|
||||
* Create weapons display.
|
||||
*
|
||||
* @param plugin Instance of Reforges.
|
||||
*/
|
||||
public ReforgesDisplay(@NotNull final EcoPlugin plugin) {
|
||||
super(plugin, DisplayPriority.HIGHEST);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void display(@NotNull final ItemStack itemStack,
|
||||
@NotNull final Object... args) {
|
||||
ReforgeTarget target = ReforgeTarget.getForItem(itemStack);
|
||||
|
||||
if (target == null && itemStack.getType() != Material.PLAYER_HEAD) {
|
||||
return;
|
||||
}
|
||||
|
||||
ItemMeta meta = itemStack.getItemMeta();
|
||||
FastItemStack fastItemStack = FastItemStack.wrap(itemStack);
|
||||
assert meta != null;
|
||||
List<String> lore = fastItemStack.getLore();
|
||||
assert lore != null;
|
||||
|
||||
Reforge reforge = ReforgeUtils.getReforge(meta);
|
||||
Reforge stone = ReforgeUtils.getReforgeStone(meta);
|
||||
|
||||
if (reforge == null && stone == null && target != null) {
|
||||
if (this.getPlugin().getConfigYml().getBool("reforge.show-reforgable")) {
|
||||
List<String> addLore = new ArrayList<>();
|
||||
|
||||
for (String string : this.getPlugin().getConfigYml().getStrings("reforge.reforgable-suffix")) {
|
||||
addLore.add(Display.PREFIX + string);
|
||||
}
|
||||
|
||||
lore.addAll(addLore);
|
||||
}
|
||||
}
|
||||
|
||||
if (stone != null) {
|
||||
meta.setDisplayName(this.getPlugin().getConfigYml().getString("reforge.stone.name").replace("%reforge%", stone.getName()));
|
||||
SkullUtils.setSkullTexture((SkullMeta) meta, stone.getConfig().getString("stone-config.texture"));
|
||||
itemStack.setItemMeta(meta);
|
||||
List<String> stoneLore = new ArrayList<>();
|
||||
for (String string : this.getPlugin().getConfigYml().getStrings("reforge.stone.lore")) {
|
||||
stoneLore.add(Display.PREFIX + string.replace("%reforge%", stone.getName()));
|
||||
}
|
||||
lore.addAll(0, stoneLore);
|
||||
}
|
||||
|
||||
if (reforge != null) {
|
||||
if (this.getPlugin().getConfigYml().getBool("reforge.display-in-lore")) {
|
||||
List<String> addLore = new ArrayList<>();
|
||||
|
||||
addLore.add(" ");
|
||||
addLore.add(reforge.getName());
|
||||
|
||||
List<String> description = new ArrayList<>(Arrays.asList(WordUtils.wrap(
|
||||
reforge.getDescription(),
|
||||
this.getPlugin().getConfigYml().getInt("reforge.line-wrap"),
|
||||
"\n",
|
||||
false
|
||||
).split("\\r?\\n")));
|
||||
description.replaceAll(s -> this.getPlugin().getLangYml().getString("description-color") + s.replace("%description%", reforge.getDescription()));
|
||||
description.replaceAll(s -> s.replace("§r", this.getPlugin().getLangYml().getString("description-color")));
|
||||
addLore.addAll(description);
|
||||
|
||||
addLore.replaceAll(s -> Display.PREFIX + s);
|
||||
lore.addAll(addLore);
|
||||
}
|
||||
}
|
||||
|
||||
itemStack.setItemMeta(meta);
|
||||
fastItemStack.setLore(lore);
|
||||
}
|
||||
}
|
||||
@@ -1,64 +0,0 @@
|
||||
package com.willfp.reforges.effects;
|
||||
|
||||
import com.willfp.eco.core.config.interfaces.JSONConfig;
|
||||
import com.willfp.reforges.ReforgesPlugin;
|
||||
import com.willfp.reforges.reforges.util.Watcher;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.Getter;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
public abstract class Effect implements Listener, Watcher {
|
||||
/**
|
||||
* Instance of Reforges.
|
||||
*/
|
||||
@Getter(AccessLevel.PROTECTED)
|
||||
private final ReforgesPlugin plugin = ReforgesPlugin.getInstance();
|
||||
|
||||
/**
|
||||
* The name of the effect.
|
||||
*/
|
||||
@Getter
|
||||
private final String name;
|
||||
|
||||
/**
|
||||
* The effect uuid.
|
||||
*/
|
||||
@Getter
|
||||
private final UUID uuid;
|
||||
|
||||
/**
|
||||
* Create a new effect.
|
||||
*
|
||||
* @param name The effect name.
|
||||
*/
|
||||
protected Effect(@NotNull final String name) {
|
||||
this.name = name;
|
||||
this.uuid = UUID.nameUUIDFromBytes(name.getBytes());
|
||||
|
||||
Effects.addNewEffect(this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle reforge application.
|
||||
*
|
||||
* @param meta The meta.
|
||||
* @param config The config.
|
||||
*/
|
||||
public void handleApplication(@NotNull final ItemMeta meta,
|
||||
@NotNull final JSONConfig config) {
|
||||
// Override when needed
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle reforge removal.
|
||||
*
|
||||
* @param meta The meta.
|
||||
*/
|
||||
public void handleRemoval(@NotNull final ItemMeta meta) {
|
||||
// Override when needed
|
||||
}
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
package com.willfp.reforges.effects.effects;
|
||||
|
||||
import com.willfp.eco.core.config.interfaces.JSONConfig;
|
||||
import com.willfp.reforges.effects.Effect;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class EffectCritMultiplier extends Effect {
|
||||
/**
|
||||
* Create a new effect.
|
||||
*/
|
||||
public EffectCritMultiplier() {
|
||||
super("crit_multiplier");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAnyDamage(@NotNull final LivingEntity attacker,
|
||||
@NotNull final LivingEntity victim,
|
||||
@NotNull final EntityDamageByEntityEvent event,
|
||||
@NotNull final JSONConfig config) {
|
||||
if (attacker.getVelocity().getY() > 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
event.setDamage(event.getDamage() * config.getDouble("multiplier"));
|
||||
}
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
package com.willfp.reforges.effects.effects;
|
||||
|
||||
import com.willfp.eco.core.config.interfaces.JSONConfig;
|
||||
import com.willfp.reforges.effects.Effect;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class EffectDamageMultiplier extends Effect {
|
||||
/**
|
||||
* Create a new effect.
|
||||
*/
|
||||
public EffectDamageMultiplier() {
|
||||
super("damage_multiplier");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAnyDamage(@NotNull final LivingEntity attacker,
|
||||
@NotNull final LivingEntity victim,
|
||||
@NotNull final EntityDamageByEntityEvent event,
|
||||
@NotNull final JSONConfig config) {
|
||||
event.setDamage(event.getDamage() * config.getDouble("multiplier"));
|
||||
}
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
package com.willfp.reforges.effects.effects;
|
||||
|
||||
import com.willfp.eco.core.config.interfaces.JSONConfig;
|
||||
import com.willfp.reforges.effects.Effect;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.event.entity.EntityDamageEvent;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class EffectIncomingDamageMultiplier extends Effect {
|
||||
/**
|
||||
* Create a new effect.
|
||||
*/
|
||||
public EffectIncomingDamageMultiplier() {
|
||||
super("incoming_damage_multiplier");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDamageWearingArmor(@NotNull final LivingEntity victim,
|
||||
@NotNull final EntityDamageEvent event,
|
||||
@NotNull final JSONConfig config) {
|
||||
event.setDamage(event.getDamage() * config.getDouble("multiplier"));
|
||||
}
|
||||
}
|
||||
@@ -1,44 +0,0 @@
|
||||
package com.willfp.reforges.effects.effects;
|
||||
|
||||
import com.willfp.eco.core.config.interfaces.JSONConfig;
|
||||
import com.willfp.reforges.effects.Effect;
|
||||
import org.bukkit.attribute.Attribute;
|
||||
import org.bukkit.attribute.AttributeModifier;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class EffectKnockbackMultiplier extends Effect {
|
||||
/**
|
||||
* Create a new effect.
|
||||
*/
|
||||
public EffectKnockbackMultiplier() {
|
||||
super("knockback_multiplier");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleApplication(@NotNull final ItemMeta meta,
|
||||
@NotNull final JSONConfig config) {
|
||||
meta.addAttributeModifier(
|
||||
Attribute.GENERIC_ATTACK_KNOCKBACK,
|
||||
new AttributeModifier(
|
||||
this.getUuid(),
|
||||
this.getName(),
|
||||
config.getDouble("multiplier") - 1,
|
||||
AttributeModifier.Operation.MULTIPLY_SCALAR_1
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleRemoval(@NotNull final ItemMeta meta) {
|
||||
meta.removeAttributeModifier(
|
||||
Attribute.GENERIC_ATTACK_KNOCKBACK,
|
||||
new AttributeModifier(
|
||||
this.getUuid(),
|
||||
this.getName(),
|
||||
0,
|
||||
AttributeModifier.Operation.MULTIPLY_SCALAR_1
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -1,26 +0,0 @@
|
||||
package com.willfp.reforges.effects.effects;
|
||||
|
||||
import com.willfp.eco.core.config.interfaces.JSONConfig;
|
||||
import com.willfp.reforges.effects.Effect;
|
||||
import com.willfp.reforges.vault.EconomyHandler;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.block.BlockBreakEvent;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class EffectRewardBlockBreak extends Effect {
|
||||
/**
|
||||
* Create a new effect.
|
||||
*/
|
||||
public EffectRewardBlockBreak() {
|
||||
super("reward_kill");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBlockBreak(@NotNull final Player player,
|
||||
@NotNull final Block block,
|
||||
@NotNull final BlockBreakEvent event,
|
||||
@NotNull final JSONConfig config) {
|
||||
EconomyHandler.getInstance().depositPlayer(player, config.getDouble("amount"));
|
||||
}
|
||||
}
|
||||
@@ -1,30 +0,0 @@
|
||||
package com.willfp.reforges.effects.effects;
|
||||
|
||||
import com.willfp.eco.core.config.interfaces.JSONConfig;
|
||||
import com.willfp.eco.core.events.EntityDeathByEntityEvent;
|
||||
import com.willfp.reforges.effects.Effect;
|
||||
import com.willfp.reforges.vault.EconomyHandler;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class EffectRewardKill extends Effect {
|
||||
/**
|
||||
* Create a new effect.
|
||||
*/
|
||||
public EffectRewardKill() {
|
||||
super("reward_kill");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onKill(@NotNull final LivingEntity killer,
|
||||
@NotNull final LivingEntity victim,
|
||||
@NotNull final EntityDeathByEntityEvent event,
|
||||
@NotNull final JSONConfig config) {
|
||||
if (!(killer instanceof Player player)) {
|
||||
return;
|
||||
}
|
||||
|
||||
EconomyHandler.getInstance().depositPlayer(player, config.getDouble("amount"));
|
||||
}
|
||||
}
|
||||
@@ -1,200 +0,0 @@
|
||||
package com.willfp.reforges.reforges;
|
||||
|
||||
import com.willfp.eco.core.EcoPlugin;
|
||||
import com.willfp.eco.core.config.interfaces.JSONConfig;
|
||||
import com.willfp.eco.core.display.Display;
|
||||
import com.willfp.eco.core.items.CustomItem;
|
||||
import com.willfp.eco.core.items.builder.SkullBuilder;
|
||||
import com.willfp.eco.core.recipe.Recipes;
|
||||
import com.willfp.reforges.ReforgesPlugin;
|
||||
import com.willfp.reforges.effects.Effect;
|
||||
import com.willfp.reforges.effects.Effects;
|
||||
import com.willfp.reforges.reforges.meta.ReforgeTarget;
|
||||
import com.willfp.reforges.reforges.util.ReforgeUtils;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.Getter;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
|
||||
public class Reforge {
|
||||
/**
|
||||
* Instance of Reforges for reforges to be able to access.
|
||||
*/
|
||||
@Getter(AccessLevel.PROTECTED)
|
||||
private final EcoPlugin plugin = ReforgesPlugin.getInstance();
|
||||
|
||||
/**
|
||||
* The key to store reforges in meta.
|
||||
*/
|
||||
@Getter
|
||||
private final String id;
|
||||
|
||||
/**
|
||||
* The reforges config.
|
||||
*/
|
||||
@Getter
|
||||
private final JSONConfig config;
|
||||
|
||||
/**
|
||||
* The effects.
|
||||
*/
|
||||
@Getter
|
||||
private final Map<Effect, JSONConfig> effects;
|
||||
|
||||
/**
|
||||
* The display name.
|
||||
*/
|
||||
@Getter
|
||||
private final String name;
|
||||
|
||||
/**
|
||||
* The display name.
|
||||
*/
|
||||
@Getter
|
||||
private final String description;
|
||||
|
||||
/**
|
||||
* If a reforge stone is required.
|
||||
*/
|
||||
@Getter
|
||||
private boolean requiresStone;
|
||||
|
||||
/**
|
||||
* The reforge stone.
|
||||
*/
|
||||
@Getter
|
||||
private ItemStack stone;
|
||||
|
||||
/**
|
||||
* The reforge target.
|
||||
*/
|
||||
@Getter
|
||||
private final Set<ReforgeTarget> targets;
|
||||
|
||||
/**
|
||||
* Create a new Reforge.
|
||||
*
|
||||
* @param config The config.
|
||||
* @param plugin Instance of reforges.
|
||||
*/
|
||||
protected Reforge(@NotNull final JSONConfig config,
|
||||
@NotNull final ReforgesPlugin plugin) {
|
||||
this.config = config;
|
||||
this.id = config.getString("id");
|
||||
|
||||
this.name = config.getString("name");
|
||||
this.description = config.getString("description");
|
||||
|
||||
this.targets = new HashSet<>();
|
||||
for (String targetName : config.getStrings("targets")) {
|
||||
this.targets.add(ReforgeTarget.getByName(targetName));
|
||||
}
|
||||
|
||||
this.effects = new HashMap<>();
|
||||
for (JSONConfig effectConfig : config.getSubsections("effects")) {
|
||||
Effect effect = Effects.getByName(effectConfig.getString("id"));
|
||||
if (effect != null) {
|
||||
effects.put(effect, effectConfig);
|
||||
}
|
||||
}
|
||||
|
||||
handleStone(config.getSubsection("stone"), plugin);
|
||||
}
|
||||
|
||||
private void handleStone(@NotNull final JSONConfig config,
|
||||
@NotNull final ReforgesPlugin plugin) {
|
||||
this.requiresStone = config.getBool("enabled");
|
||||
|
||||
if (requiresStone) {
|
||||
List<String> stoneLore = new ArrayList<>();
|
||||
for (String string : this.getPlugin().getConfigYml().getStrings("reforge.stone.lore")) {
|
||||
stoneLore.add(Display.PREFIX + string.replace("%reforge%", this.getName()));
|
||||
}
|
||||
stone = new SkullBuilder()
|
||||
.setSkullTexture(config.getString("texture"))
|
||||
.setDisplayName(this.getPlugin().getConfigYml().getString("stone.name").replace("%reforge%", this.getName()))
|
||||
.addLoreLines(stoneLore)
|
||||
.build();
|
||||
} else {
|
||||
stone = new SkullBuilder()
|
||||
.build();
|
||||
}
|
||||
|
||||
ReforgeUtils.setReforgeStone(stone, this);
|
||||
|
||||
new CustomItem(
|
||||
plugin.getNamespacedKeyFactory().create("stone_" + this.getId()),
|
||||
test -> Objects.equals(ReforgeUtils.getReforgeStone(test), this),
|
||||
stone
|
||||
).register();
|
||||
|
||||
if (config.getBool("craftable")) {
|
||||
Recipes.createAndRegisterRecipe(
|
||||
plugin,
|
||||
"stone_" + this.getId(),
|
||||
stone,
|
||||
config.getStrings("recipe", false)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
public final void handleApplication(@NotNull final ItemStack itemStack) {
|
||||
handleRemoval(itemStack);
|
||||
itemStack.setItemMeta(this.handleApplication(Objects.requireNonNull(itemStack.getItemMeta())));
|
||||
}
|
||||
|
||||
public final ItemMeta handleApplication(@NotNull final ItemMeta meta) {
|
||||
for (Map.Entry<Effect, JSONConfig> entry : this.getEffects().entrySet()) {
|
||||
entry.getKey().handleApplication(meta, entry.getValue());
|
||||
}
|
||||
|
||||
return meta;
|
||||
}
|
||||
|
||||
public final void handleRemoval(@NotNull final ItemStack itemStack) {
|
||||
itemStack.setItemMeta(this.handleRemoval(Objects.requireNonNull(itemStack.getItemMeta())));
|
||||
}
|
||||
|
||||
public final ItemMeta handleRemoval(@NotNull final ItemMeta meta) {
|
||||
for (Map.Entry<Effect, JSONConfig> entry : this.getEffects().entrySet()) {
|
||||
entry.getKey().handleApplication(meta, entry.getValue());
|
||||
}
|
||||
|
||||
return meta;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean equals(final Object o) {
|
||||
if (this == o) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!(o instanceof Reforge reforge)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return this.getId().equals(reforge.getId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(this.getId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Reforge{"
|
||||
+ this.getId()
|
||||
+ "}";
|
||||
}
|
||||
}
|
||||
@@ -4,7 +4,6 @@ import com.willfp.eco.core.EcoPlugin;
|
||||
import com.willfp.eco.core.PluginDependent;
|
||||
import com.willfp.eco.core.gui.menu.Menu;
|
||||
import com.willfp.eco.core.gui.slot.Slot;
|
||||
import com.willfp.reforges.reforges.Reforge;
|
||||
import com.willfp.reforges.reforges.meta.ReforgeTarget;
|
||||
import com.willfp.reforges.vault.EconomyHandler;
|
||||
import org.bukkit.Sound;
|
||||
|
||||
@@ -1,39 +0,0 @@
|
||||
|
||||
package com.willfp.reforges.util;
|
||||
|
||||
import com.willfp.eco.core.EcoPlugin;
|
||||
import com.willfp.eco.core.PluginDependent;
|
||||
import com.willfp.reforges.reforges.util.ReforgeUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.BlockPlaceEvent;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.inventory.ShapedRecipe;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class AntiPlaceListener extends PluginDependent<EcoPlugin> implements Listener {
|
||||
/**
|
||||
* Register listener.
|
||||
*
|
||||
* @param plugin Talismans.
|
||||
*/
|
||||
public AntiPlaceListener(@NotNull final EcoPlugin plugin) {
|
||||
super(plugin);
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent block place.
|
||||
*
|
||||
* @param event The event.
|
||||
*/
|
||||
@EventHandler
|
||||
public void onBlockPlace(@NotNull final BlockPlaceEvent event) {
|
||||
if (ReforgeUtils.getReforgeStone(event.getItemInHand()) != null) {
|
||||
event.setCancelled(true);
|
||||
event.setBuild(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,47 +0,0 @@
|
||||
|
||||
package com.willfp.reforges.util;
|
||||
|
||||
import com.willfp.eco.core.EcoPlugin;
|
||||
import com.willfp.eco.core.PluginDependent;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.inventory.ShapedRecipe;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class DiscoverRecipeListener extends PluginDependent<EcoPlugin> implements Listener {
|
||||
/**
|
||||
* Register listener.
|
||||
*
|
||||
* @param plugin Talismans.
|
||||
*/
|
||||
public DiscoverRecipeListener(@NotNull final EcoPlugin plugin) {
|
||||
super(plugin);
|
||||
}
|
||||
|
||||
/**
|
||||
* Unlock all recipes on player join.
|
||||
*
|
||||
* @param event The event to listen for.
|
||||
*/
|
||||
@EventHandler
|
||||
public void onJoin(@NotNull final PlayerJoinEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (this.getPlugin().getConfigYml().getBool("discover-recipes")) {
|
||||
Bukkit.getServer().recipeIterator().forEachRemaining(recipe -> {
|
||||
if (recipe instanceof ShapedRecipe) {
|
||||
NamespacedKey key = ((ShapedRecipe) recipe).getKey();
|
||||
if (key.getNamespace().equals("reforges")) {
|
||||
if (!key.getKey().contains("displayed")) {
|
||||
player.discoverRecipe(key);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,92 @@
|
||||
package com.willfp.reforges.display
|
||||
|
||||
import com.willfp.eco.core.EcoPlugin
|
||||
import com.willfp.eco.core.display.Display
|
||||
import com.willfp.eco.core.display.DisplayModule
|
||||
import com.willfp.eco.core.display.DisplayPriority
|
||||
import com.willfp.eco.core.fast.FastItemStack
|
||||
import com.willfp.eco.util.SkullUtils
|
||||
import com.willfp.reforges.reforges.meta.ReforgeTarget
|
||||
import com.willfp.reforges.reforges.util.ReforgeUtils
|
||||
import org.apache.commons.lang.WordUtils
|
||||
import org.bukkit.Material
|
||||
import org.bukkit.inventory.ItemStack
|
||||
import org.bukkit.inventory.meta.SkullMeta
|
||||
|
||||
class ReforgesDisplay(plugin: EcoPlugin) : DisplayModule(plugin, DisplayPriority.HIGHEST) {
|
||||
override fun display(
|
||||
itemStack: ItemStack,
|
||||
vararg args: Any
|
||||
) {
|
||||
val target = ReforgeTarget.getForItem(itemStack)
|
||||
|
||||
if (target == null && itemStack.type != Material.PLAYER_HEAD) {
|
||||
return
|
||||
}
|
||||
|
||||
val meta = itemStack.itemMeta ?: return
|
||||
|
||||
val fastItemStack = FastItemStack.wrap(itemStack)
|
||||
|
||||
val lore = fastItemStack.lore
|
||||
|
||||
val reforge = ReforgeUtils.getReforge(meta)
|
||||
|
||||
val stone = ReforgeUtils.getReforgeStone(meta)
|
||||
|
||||
if (reforge == null && stone == null && target != null) {
|
||||
if (plugin.configYml.getBool("reforge.show-reforgable")) {
|
||||
val addLore: MutableList<String> = ArrayList()
|
||||
for (string in plugin.configYml.getStrings("reforge.reforgable-suffix")) {
|
||||
addLore.add(Display.PREFIX + string)
|
||||
}
|
||||
lore.addAll(addLore)
|
||||
}
|
||||
}
|
||||
|
||||
if (stone != null) {
|
||||
meta.setDisplayName(plugin.configYml.getString("reforge.stone.name").replace("%reforge%", stone.name))
|
||||
SkullUtils.setSkullTexture(
|
||||
meta as SkullMeta,
|
||||
SkullUtils.getSkullTexture(stone.stone.itemMeta as SkullMeta) ?: return
|
||||
)
|
||||
itemStack.itemMeta = meta
|
||||
val stoneLore = plugin.configYml.getStrings("reforge.stone.lore").map {
|
||||
"${Display.PREFIX}${it.replace("%reforge%", stone.name)}"
|
||||
}.toList()
|
||||
lore.addAll(0, stoneLore)
|
||||
}
|
||||
if (reforge != null) {
|
||||
if (plugin.configYml.getBool("reforge.display-in-lore")) {
|
||||
val addLore: MutableList<String> = ArrayList()
|
||||
addLore.add(" ")
|
||||
addLore.add(reforge.name)
|
||||
val description = mutableListOf(
|
||||
*WordUtils.wrap(
|
||||
reforge.description,
|
||||
plugin.configYml.getInt("reforge.line-wrap"),
|
||||
"\n",
|
||||
false
|
||||
).split("\\r?\\n").toTypedArray()
|
||||
)
|
||||
description.replaceAll { s: String ->
|
||||
plugin.langYml.getString("description-color") + s.replace(
|
||||
"%description%",
|
||||
reforge.description
|
||||
)
|
||||
}
|
||||
description.replaceAll { s: String ->
|
||||
s.replace(
|
||||
"§r",
|
||||
plugin.langYml.getString("description-color")
|
||||
)
|
||||
}
|
||||
addLore.addAll(description)
|
||||
addLore.replaceAll { "${Display.PREFIX}$it" }
|
||||
lore.addAll(addLore)
|
||||
}
|
||||
}
|
||||
itemStack.itemMeta = meta
|
||||
fastItemStack.lore = lore
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package com.willfp.reforges.effects
|
||||
|
||||
import com.willfp.eco.core.config.interfaces.JSONConfig
|
||||
|
||||
data class ConfiguredEffect(val effect: Effect, val config: JSONConfig)
|
||||
@@ -0,0 +1,46 @@
|
||||
package com.willfp.reforges.effects
|
||||
|
||||
import com.willfp.eco.core.config.interfaces.JSONConfig
|
||||
import com.willfp.reforges.ReforgesPlugin
|
||||
import com.willfp.reforges.reforges.util.Watcher
|
||||
import org.bukkit.event.Listener
|
||||
import org.bukkit.inventory.meta.ItemMeta
|
||||
import java.util.*
|
||||
|
||||
abstract class Effect(
|
||||
val id: String
|
||||
) : Listener, Watcher {
|
||||
protected val plugin: ReforgesPlugin = ReforgesPlugin.getInstance()
|
||||
|
||||
val uuid: UUID = UUID.nameUUIDFromBytes(id.encodeToByteArray())
|
||||
|
||||
init {
|
||||
register()
|
||||
}
|
||||
|
||||
private fun register() {
|
||||
Effects.addNewEffect(this)
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle reforge application.
|
||||
*
|
||||
* @param meta The meta.
|
||||
* @param config The config.
|
||||
*/
|
||||
open fun handleApplication(
|
||||
meta: ItemMeta,
|
||||
config: JSONConfig
|
||||
) {
|
||||
// Override when needed
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle reforge removal.
|
||||
*
|
||||
* @param meta The meta.
|
||||
*/
|
||||
open fun handleRemoval(meta: ItemMeta) {
|
||||
// Override when needed
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package com.willfp.reforges.effects.effects
|
||||
|
||||
import com.willfp.eco.core.config.interfaces.JSONConfig
|
||||
import com.willfp.reforges.effects.Effect
|
||||
import org.bukkit.entity.LivingEntity
|
||||
import org.bukkit.event.entity.EntityDamageByEntityEvent
|
||||
|
||||
class EffectCritMultiplier : Effect("crit_multiplier") {
|
||||
override fun onAnyDamage(
|
||||
attacker: LivingEntity,
|
||||
victim: LivingEntity,
|
||||
event: EntityDamageByEntityEvent,
|
||||
config: JSONConfig
|
||||
) {
|
||||
if (attacker.velocity.y > 0) {
|
||||
return
|
||||
}
|
||||
event.damage *= config.getDouble("multiplier")
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.willfp.reforges.effects.effects
|
||||
|
||||
import com.willfp.eco.core.config.interfaces.JSONConfig
|
||||
import com.willfp.reforges.effects.Effect
|
||||
import org.bukkit.entity.LivingEntity
|
||||
import org.bukkit.event.entity.EntityDamageByEntityEvent
|
||||
|
||||
class EffectDamageMultiplier : Effect("damage_multiplier") {
|
||||
override fun onAnyDamage(
|
||||
attacker: LivingEntity,
|
||||
victim: LivingEntity,
|
||||
event: EntityDamageByEntityEvent,
|
||||
config: JSONConfig
|
||||
) {
|
||||
event.damage *= config.getDouble("multiplier")
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package com.willfp.reforges.effects.effects
|
||||
|
||||
import com.willfp.eco.core.config.interfaces.JSONConfig
|
||||
import com.willfp.reforges.effects.Effect
|
||||
import org.bukkit.entity.LivingEntity
|
||||
import org.bukkit.event.entity.EntityDamageEvent
|
||||
|
||||
class EffectIncomingDamageMultiplier : Effect("incoming_damage_multiplier") {
|
||||
override fun onDamageWearingArmor(
|
||||
victim: LivingEntity,
|
||||
event: EntityDamageEvent,
|
||||
config: JSONConfig
|
||||
) {
|
||||
event.damage *= config.getDouble("multiplier")
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
package com.willfp.reforges.effects.effects
|
||||
|
||||
import com.willfp.eco.core.config.interfaces.JSONConfig
|
||||
import com.willfp.reforges.effects.Effect
|
||||
import org.bukkit.attribute.Attribute
|
||||
import org.bukkit.attribute.AttributeModifier
|
||||
import org.bukkit.inventory.meta.ItemMeta
|
||||
|
||||
class EffectKnockbackMultiplier : Effect("knockback_multiplier") {
|
||||
override fun handleApplication(
|
||||
meta: ItemMeta,
|
||||
config: JSONConfig
|
||||
) {
|
||||
meta.addAttributeModifier(
|
||||
Attribute.GENERIC_ATTACK_KNOCKBACK,
|
||||
AttributeModifier(
|
||||
this.uuid,
|
||||
this.id,
|
||||
config.getDouble("multiplier") - 1,
|
||||
AttributeModifier.Operation.MULTIPLY_SCALAR_1
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
override fun handleRemoval(meta: ItemMeta) {
|
||||
meta.removeAttributeModifier(
|
||||
Attribute.GENERIC_ATTACK_KNOCKBACK,
|
||||
AttributeModifier(
|
||||
this.uuid,
|
||||
this.id,
|
||||
0.0,
|
||||
AttributeModifier.Operation.MULTIPLY_SCALAR_1
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package com.willfp.reforges.effects.effects
|
||||
|
||||
import com.willfp.eco.core.config.interfaces.JSONConfig
|
||||
import com.willfp.reforges.effects.Effect
|
||||
import com.willfp.reforges.vault.EconomyHandler
|
||||
import org.bukkit.block.Block
|
||||
import org.bukkit.entity.Player
|
||||
import org.bukkit.event.block.BlockBreakEvent
|
||||
|
||||
class EffectRewardBlockBreak : Effect("reward_kill") {
|
||||
override fun onBlockBreak(
|
||||
player: Player,
|
||||
block: Block,
|
||||
event: BlockBreakEvent,
|
||||
config: JSONConfig
|
||||
) {
|
||||
EconomyHandler.getInstance().depositPlayer(player, config.getDouble("amount"))
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package com.willfp.reforges.effects.effects
|
||||
|
||||
import com.willfp.eco.core.config.interfaces.JSONConfig
|
||||
import com.willfp.eco.core.events.EntityDeathByEntityEvent
|
||||
import com.willfp.reforges.effects.Effect
|
||||
import com.willfp.reforges.vault.EconomyHandler
|
||||
import org.bukkit.entity.LivingEntity
|
||||
import org.bukkit.entity.Player
|
||||
|
||||
class EffectRewardKill : Effect("reward_kill") {
|
||||
override fun onKill(
|
||||
killer: LivingEntity,
|
||||
victim: LivingEntity,
|
||||
event: EntityDeathByEntityEvent,
|
||||
config: JSONConfig
|
||||
) {
|
||||
if (killer !is Player) {
|
||||
return
|
||||
}
|
||||
|
||||
EconomyHandler.getInstance().depositPlayer(killer, config.getDouble("amount"))
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,106 @@
|
||||
package com.willfp.reforges.reforges
|
||||
|
||||
import com.willfp.eco.core.config.interfaces.JSONConfig
|
||||
import com.willfp.eco.core.display.Display
|
||||
import com.willfp.eco.core.items.CustomItem
|
||||
import com.willfp.eco.core.items.builder.SkullBuilder
|
||||
import com.willfp.eco.core.recipe.Recipes
|
||||
import com.willfp.reforges.ReforgesPlugin
|
||||
import com.willfp.reforges.effects.ConfiguredEffect
|
||||
import com.willfp.reforges.effects.Effects
|
||||
import com.willfp.reforges.reforges.meta.ReforgeTarget
|
||||
import com.willfp.reforges.reforges.util.ReforgeUtils
|
||||
import org.bukkit.inventory.ItemStack
|
||||
import org.bukkit.inventory.meta.ItemMeta
|
||||
import java.util.*
|
||||
|
||||
class Reforge(
|
||||
private val config: JSONConfig,
|
||||
private val plugin: ReforgesPlugin
|
||||
) {
|
||||
val id = config.getString("id")
|
||||
|
||||
val name = config.getString("name")
|
||||
|
||||
val description = config.getString("description")
|
||||
|
||||
val targets = config.getStrings("targets").map { ReforgeTarget.getByName(it) }.toSet()
|
||||
|
||||
val effects = config.getSubsections("effects").map {
|
||||
val effect = Effects.getByName(it.getString("id")) ?: return@map null
|
||||
ConfiguredEffect(effect, it)
|
||||
}.filterNotNull().toSet()
|
||||
|
||||
val requiresStone = config.getBool("stone.enabled")
|
||||
|
||||
val stone: ItemStack = SkullBuilder().apply {
|
||||
if (config.has("stone.texture")) {
|
||||
setSkullTexture(config.getString("texture"))
|
||||
}
|
||||
setDisplayName(plugin.configYml.getString("stone.name").replace("%reforge%", name))
|
||||
addLoreLines(
|
||||
plugin.configYml.getStrings("stone.lore").map { "${Display.PREFIX}${it.replace("%reforge%", name)}" })
|
||||
}.build()
|
||||
|
||||
init {
|
||||
ReforgeUtils.setReforgeStone(stone, this)
|
||||
|
||||
CustomItem(
|
||||
plugin.namespacedKeyFactory.create("stone_" + this.id),
|
||||
{ test -> ReforgeUtils.getReforgeStone(test) == this },
|
||||
stone
|
||||
).register()
|
||||
|
||||
if (config.getBool("craftable")) {
|
||||
Recipes.createAndRegisterRecipe(
|
||||
plugin,
|
||||
"stone_" + this.id,
|
||||
stone,
|
||||
config.getStrings("recipe", false)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
fun handleApplication(itemStack: ItemStack) {
|
||||
handleRemoval(itemStack)
|
||||
itemStack.itemMeta = this.handleApplication(itemStack.itemMeta!!)
|
||||
}
|
||||
|
||||
fun handleApplication(meta: ItemMeta): ItemMeta {
|
||||
for ((effect, config) in this.effects) {
|
||||
effect.handleApplication(meta, config)
|
||||
}
|
||||
return meta
|
||||
}
|
||||
|
||||
fun handleRemoval(itemStack: ItemStack) {
|
||||
itemStack.itemMeta = this.handleRemoval(itemStack.itemMeta!!)
|
||||
}
|
||||
|
||||
fun handleRemoval(meta: ItemMeta): ItemMeta {
|
||||
for ((effect, _) in this.effects) {
|
||||
effect.handleRemoval(meta)
|
||||
}
|
||||
return meta
|
||||
}
|
||||
|
||||
override fun equals(other: Any?): Boolean {
|
||||
if (this === other) {
|
||||
return true
|
||||
}
|
||||
|
||||
if (other !is Reforge) {
|
||||
return false
|
||||
}
|
||||
|
||||
return other.id == this.id
|
||||
}
|
||||
|
||||
override fun hashCode(): Int {
|
||||
return Objects.hash(id)
|
||||
}
|
||||
|
||||
override fun toString(): String {
|
||||
return "Reforge{$id}"
|
||||
}
|
||||
}
|
||||
@@ -9,7 +9,6 @@ import com.willfp.eco.core.integrations.antigrief.AntigriefManager;
|
||||
import com.willfp.eco.core.integrations.mcmmo.McmmoManager;
|
||||
import com.willfp.eco.util.ArrowUtils;
|
||||
import com.willfp.eco.util.NumberUtils;
|
||||
import com.willfp.reforges.effects.Effect;
|
||||
import com.willfp.reforges.reforges.Reforge;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.AbstractArrow;
|
||||
@@ -44,96 +43,11 @@ public class WatcherTriggers extends PluginDependent<EcoPlugin> implements Liste
|
||||
super(plugin);
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when a player breaks a block.
|
||||
*
|
||||
* @param event The event to listen for.
|
||||
*/
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
public void onBlockBreak(@NotNull final BlockBreakEvent event) {
|
||||
|
||||
if (McmmoManager.isFake(event)) {
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = event.getPlayer();
|
||||
Block block = event.getBlock();
|
||||
|
||||
if (!AntigriefManager.canBreakBlock(player, block)) {
|
||||
return;
|
||||
}
|
||||
|
||||
ItemStack itemStack = player.getInventory().getItemInMainHand();
|
||||
|
||||
Reforge reforge = ReforgeUtils.getReforge(itemStack);
|
||||
|
||||
if (reforge == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (Map.Entry<Effect, JSONConfig> entry : reforge.getEffects().entrySet()) {
|
||||
if (NumberUtils.randFloat(0, 100) > (entry.getValue().has("chance") ? entry.getValue().getDouble("chance") : 100)) {
|
||||
continue;
|
||||
}
|
||||
entry.getKey().onBlockBreak(player, block, event, entry.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when an entity shoots another entity with an arrow.
|
||||
*
|
||||
* @param event The event to listen for.
|
||||
*/
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
public void onArrowDamage(@NotNull final EntityDamageByEntityEvent event) {
|
||||
if (McmmoManager.isFake(event)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(event.getDamager() instanceof Arrow arrow)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(event.getEntity() instanceof LivingEntity victim)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (arrow.getShooter() == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(arrow.getShooter() instanceof LivingEntity attacker)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (attacker instanceof Player && !AntigriefManager.canInjure((Player) attacker, victim)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.isCancelled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
ItemStack bow = ArrowUtils.getBow(arrow);
|
||||
|
||||
if (bow == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
Reforge reforge = ReforgeUtils.getReforge(bow);
|
||||
|
||||
if (reforge == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (Map.Entry<Effect, JSONConfig> entry : reforge.getEffects().entrySet()) {
|
||||
if (NumberUtils.randFloat(0, 100) > (entry.getValue().has("chance") ? entry.getValue().getDouble("chance") : 100)) {
|
||||
continue;
|
||||
}
|
||||
entry.getKey().onArrowDamage(attacker, victim, arrow, event, entry.getValue());
|
||||
entry.getKey().onAnyDamage(attacker, victim, event, entry.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when an entity damages another entity with a trident throw.
|
||||
@@ -0,0 +1,84 @@
|
||||
package com.willfp.reforges.reforges.util
|
||||
|
||||
import com.willfp.eco.core.EcoPlugin
|
||||
import com.willfp.eco.core.integrations.antigrief.AntigriefManager
|
||||
import com.willfp.eco.core.integrations.mcmmo.McmmoManager
|
||||
import com.willfp.eco.util.ArrowUtils
|
||||
import com.willfp.eco.util.NumberUtils
|
||||
import org.bukkit.entity.Arrow
|
||||
import org.bukkit.entity.LivingEntity
|
||||
import org.bukkit.entity.Player
|
||||
import org.bukkit.event.EventHandler
|
||||
import org.bukkit.event.Listener
|
||||
import org.bukkit.event.block.BlockBreakEvent
|
||||
import org.bukkit.event.entity.EntityDamageByEntityEvent
|
||||
|
||||
class WatcherTriggers(
|
||||
private val plugin: EcoPlugin
|
||||
) : Listener {
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
fun onBlockBreak(event: BlockBreakEvent) {
|
||||
if (McmmoManager.isFake(event)) {
|
||||
return
|
||||
}
|
||||
|
||||
val player = event.player
|
||||
val block = event.block
|
||||
if (!AntigriefManager.canBreakBlock(player, block)) {
|
||||
return
|
||||
}
|
||||
val itemStack = player.inventory.itemInMainHand
|
||||
val reforge = ReforgeUtils.getReforge(itemStack) ?: return
|
||||
for ((key, value) in reforge.effects) {
|
||||
if (NumberUtils.randFloat(0.0, 100.0) > value.getDoubleOrNull("chance") ?: 100.0) {
|
||||
continue
|
||||
}
|
||||
key.onBlockBreak(player, block, event, value)
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
fun onArrowDamage(event: EntityDamageByEntityEvent) {
|
||||
if (McmmoManager.isFake(event)) {
|
||||
return
|
||||
}
|
||||
|
||||
val arrow = event.damager
|
||||
val victim = event.entity
|
||||
|
||||
if (arrow !is Arrow) {
|
||||
return
|
||||
}
|
||||
|
||||
if (victim !is LivingEntity) {
|
||||
return
|
||||
}
|
||||
|
||||
val shooter = arrow.shooter
|
||||
|
||||
if (shooter !is LivingEntity) {
|
||||
return
|
||||
}
|
||||
|
||||
if (shooter is Player && !AntigriefManager.canInjure(shooter, victim)) {
|
||||
return
|
||||
}
|
||||
|
||||
if (event.isCancelled) {
|
||||
return
|
||||
}
|
||||
|
||||
val bow = ArrowUtils.getBow(arrow) ?: return
|
||||
|
||||
val reforge = ReforgeUtils.getReforge(bow) ?: return
|
||||
|
||||
for ((effect, config) in reforge.effects) {
|
||||
if (NumberUtils.randFloat(0.0, 100.0) > config.getDoubleOrNull("chance") ?: 100.0) {
|
||||
continue
|
||||
}
|
||||
effect.onArrowDamage(shooter, victim, arrow, event, config)
|
||||
effect.onAnyDamage(shooter, victim, event, config)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package com.willfp.reforges.util
|
||||
|
||||
import com.willfp.reforges.reforges.util.ReforgeUtils
|
||||
import org.bukkit.event.EventHandler
|
||||
import org.bukkit.event.Listener
|
||||
import org.bukkit.event.block.BlockPlaceEvent
|
||||
|
||||
class AntiPlaceListener : Listener {
|
||||
@EventHandler
|
||||
fun onBlockPlace(event: BlockPlaceEvent) {
|
||||
if (ReforgeUtils.getReforgeStone(event.itemInHand) != null) {
|
||||
event.isCancelled = true
|
||||
event.setBuild(false)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package com.willfp.reforges.util
|
||||
|
||||
import com.willfp.eco.core.EcoPlugin
|
||||
import org.bukkit.Bukkit
|
||||
import org.bukkit.event.EventHandler
|
||||
import org.bukkit.event.Listener
|
||||
import org.bukkit.event.player.PlayerJoinEvent
|
||||
import org.bukkit.inventory.Recipe
|
||||
import org.bukkit.inventory.ShapedRecipe
|
||||
|
||||
class DiscoverRecipeListener(
|
||||
private val plugin: EcoPlugin
|
||||
) : Listener {
|
||||
@EventHandler
|
||||
fun onJoin(event: PlayerJoinEvent) {
|
||||
val player = event.player
|
||||
if (plugin.configYml.getBool("discover-recipes")) {
|
||||
Bukkit.getServer().recipeIterator().forEachRemaining { recipe: Recipe ->
|
||||
if (recipe is ShapedRecipe) {
|
||||
val key = recipe.key
|
||||
if (key.namespace == "reforges") {
|
||||
if (!key.key.contains("displayed")) {
|
||||
player.discoverRecipe(key)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -10,6 +10,8 @@ depend:
|
||||
- ProtocolLib
|
||||
softdepend:
|
||||
- Vault
|
||||
libraries:
|
||||
- 'org.jetbrains.kotlin:kotlin-stdlib:1.5.21'
|
||||
|
||||
commands:
|
||||
reforges:
|
||||
|
||||
Reference in New Issue
Block a user