mirror of
https://github.com/Auxilor/Reforges.git
synced 2025-12-27 02:49:13 +00:00
Began rewriting many elements in kotlin
This commit is contained in:
11
build.gradle
11
build.gradle
@@ -1,3 +1,13 @@
|
|||||||
|
buildscript {
|
||||||
|
repositories {
|
||||||
|
mavenCentral()
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.21"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
id 'java-library'
|
id 'java-library'
|
||||||
id 'com.github.johnrengelman.shadow' version '7.0.0'
|
id 'com.github.johnrengelman.shadow' version '7.0.0'
|
||||||
@@ -10,6 +20,7 @@ dependencies {
|
|||||||
}
|
}
|
||||||
|
|
||||||
allprojects {
|
allprojects {
|
||||||
|
apply plugin: 'kotlin'
|
||||||
apply plugin: 'java'
|
apply plugin: 'java'
|
||||||
apply plugin: 'maven-publish'
|
apply plugin: 'maven-publish'
|
||||||
apply plugin: 'com.github.johnrengelman.shadow'
|
apply plugin: 'com.github.johnrengelman.shadow'
|
||||||
|
|||||||
@@ -73,9 +73,7 @@ public class ReforgesPlugin extends EcoPlugin {
|
|||||||
protected void handleReload() {
|
protected void handleReload() {
|
||||||
for (Effect effect : Effects.values()) {
|
for (Effect effect : Effects.values()) {
|
||||||
HandlerList.unregisterAll(effect);
|
HandlerList.unregisterAll(effect);
|
||||||
this.getScheduler().run(() -> {
|
this.getScheduler().run(() -> this.getEventManager().registerListener(effect));
|
||||||
this.getEventManager().registerListener(effect);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -83,7 +81,7 @@ public class ReforgesPlugin extends EcoPlugin {
|
|||||||
protected List<Listener> loadListeners() {
|
protected List<Listener> loadListeners() {
|
||||||
return Arrays.asList(
|
return Arrays.asList(
|
||||||
new DiscoverRecipeListener(this),
|
new DiscoverRecipeListener(this),
|
||||||
new AntiPlaceListener(this),
|
new AntiPlaceListener(),
|
||||||
new WatcherTriggers(this)
|
new WatcherTriggers(this)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -103,6 +101,6 @@ public class ReforgesPlugin extends EcoPlugin {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getMinimumEcoVersion() {
|
public String getMinimumEcoVersion() {
|
||||||
return "6.7.0";
|
return "6.8.0";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ public class CommandGive extends Subcommand {
|
|||||||
public static void reload() {
|
public static void reload() {
|
||||||
STONE_NAMES.clear();
|
STONE_NAMES.clear();
|
||||||
STONE_NAMES.addAll(Reforges.values().stream()
|
STONE_NAMES.addAll(Reforges.values().stream()
|
||||||
.filter(Reforge::isRequiresStone)
|
.filter(Reforge::getRequiresStone)
|
||||||
.map(Reforge::getId)
|
.map(Reforge::getId)
|
||||||
.collect(Collectors.toList()));
|
.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.PluginDependent;
|
||||||
import com.willfp.eco.core.gui.menu.Menu;
|
import com.willfp.eco.core.gui.menu.Menu;
|
||||||
import com.willfp.eco.core.gui.slot.Slot;
|
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.reforges.meta.ReforgeTarget;
|
||||||
import com.willfp.reforges.vault.EconomyHandler;
|
import com.willfp.reforges.vault.EconomyHandler;
|
||||||
import org.bukkit.Sound;
|
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.core.integrations.mcmmo.McmmoManager;
|
||||||
import com.willfp.eco.util.ArrowUtils;
|
import com.willfp.eco.util.ArrowUtils;
|
||||||
import com.willfp.eco.util.NumberUtils;
|
import com.willfp.eco.util.NumberUtils;
|
||||||
import com.willfp.reforges.effects.Effect;
|
|
||||||
import com.willfp.reforges.reforges.Reforge;
|
import com.willfp.reforges.reforges.Reforge;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.entity.AbstractArrow;
|
import org.bukkit.entity.AbstractArrow;
|
||||||
@@ -44,96 +43,11 @@ public class WatcherTriggers extends PluginDependent<EcoPlugin> implements Liste
|
|||||||
super(plugin);
|
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.
|
* Called when an entity shoots another entity with an arrow.
|
||||||
*
|
*
|
||||||
* @param event The event to listen for.
|
* @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.
|
* 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
|
- ProtocolLib
|
||||||
softdepend:
|
softdepend:
|
||||||
- Vault
|
- Vault
|
||||||
|
libraries:
|
||||||
|
- 'org.jetbrains.kotlin:kotlin-stdlib:1.5.21'
|
||||||
|
|
||||||
commands:
|
commands:
|
||||||
reforges:
|
reforges:
|
||||||
|
|||||||
Reference in New Issue
Block a user