9
0
mirror of https://github.com/Auxilor/Reforges.git synced 2025-12-19 15:09:23 +00:00

Finished triggers migration and lots of internal changes

This commit is contained in:
Auxilor
2021-09-29 19:31:32 +01:00
parent dd4c49e2d3
commit a2b929b1cc
13 changed files with 136 additions and 424 deletions

View File

@@ -29,6 +29,7 @@ allprojects {
mavenCentral()
maven { url 'https://jitpack.io' }
maven { url 'https://hub.spigotmc.org/nexus/content/repositories/snapshots/' }
maven { url 'https://papermc.io/repo/repository/maven-public/' }
maven { url 'https://repo.codemc.org/repository/nms/' }
}

View File

@@ -1,11 +0,0 @@
group 'com.willfp'
version rootProject.version
repositories {
maven { url 'https://papermc.io/repo/repository/maven-public/' }
}
dependencies {
compileOnly project(":eco-core:core-plugin")
compileOnly 'io.papermc.paper:paper-api:1.17.1-R0.1-SNAPSHOT'
}

View File

@@ -1,10 +0,0 @@
package com.willfp.reforges.paper;
import com.willfp.reforges.ReforgesPlugin;
public class PaperLoader {
static {
ReforgesPlugin plugin = ReforgesPlugin.getInstance();
plugin.setPaperHandler(new EcoPaperHandler(plugin));
}
}

View File

@@ -1,19 +0,0 @@
package com.willfp.reforges.paper
import com.willfp.reforges.ReforgesPlugin
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer
import org.bukkit.inventory.ItemStack
class EcoPaperHandler(
private val plugin: ReforgesPlugin
) : PaperHandler {
private val serializer = LegacyComponentSerializer.builder()
.hexColors()
.useUnusualXRepeatedCharacterHexFormat()
.character('§')
.build()
override fun getDisplayName(itemStack: ItemStack): String {
return serializer.serialize(itemStack.displayName())
}
}

View File

@@ -2,6 +2,6 @@ group 'com.willfp'
version rootProject.version
dependencies {
compileOnly 'org.spigotmc:spigot-api:1.16.5-R0.1-SNAPSHOT'
compileOnly 'io.papermc.paper:paper-api:1.17.1-R0.1-SNAPSHOT'
compileOnly 'com.github.MilkBowl:VaultAPI:1.7'
}

View File

@@ -1,7 +1,6 @@
package com.willfp.reforges;
import com.willfp.eco.core.EcoPlugin;
import com.willfp.eco.core.Prerequisite;
import com.willfp.eco.core.command.impl.PluginCommand;
import com.willfp.eco.core.display.DisplayModule;
import com.willfp.eco.core.items.Items;
@@ -12,7 +11,6 @@ import com.willfp.reforges.config.TargetYml;
import com.willfp.reforges.display.ReforgesDisplay;
import com.willfp.reforges.effects.Effect;
import com.willfp.reforges.effects.Effects;
import com.willfp.reforges.paper.PaperHandler;
import com.willfp.reforges.reforges.Reforges;
import com.willfp.reforges.reforges.util.ReforgeArgParser;
import com.willfp.reforges.reforges.util.WatcherTriggers;
@@ -20,7 +18,6 @@ import com.willfp.reforges.util.AntiPlaceListener;
import com.willfp.reforges.util.DiscoverRecipeListener;
import com.willfp.reforges.vault.EconomyHandler;
import lombok.Getter;
import lombok.Setter;
import org.bukkit.event.HandlerList;
import org.bukkit.event.Listener;
import org.jetbrains.annotations.Nullable;
@@ -47,13 +44,6 @@ public class ReforgesPlugin extends EcoPlugin {
@Getter
private final ReforgesJson reforgesJson;
/**
* Paper handler.
*/
@Getter
@Setter
private PaperHandler paperHandler;
/**
* Internal constructor called by bukkit on plugin load.
*/
@@ -62,17 +52,6 @@ public class ReforgesPlugin extends EcoPlugin {
this.targetYml = new TargetYml(this);
this.reforgesJson = new ReforgesJson(this);
instance = this;
/*
I still use the spigot api for most things and don't want to suppress deprecation warnings
every 2 seconds, so I'm moving all paper related things off to their own module.
*/
if (Prerequisite.HAS_PAPER.isMet()) {
try {
Class.forName("com.willfp.reforges.paper.PaperLoader");
} catch (ClassNotFoundException ignored) {
}
}
}
@Override

View File

@@ -11,7 +11,6 @@ import org.bukkit.entity.Trident;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityShootBowEvent;
import org.bukkit.event.entity.ProjectileHitEvent;
import org.bukkit.event.entity.ProjectileLaunchEvent;
import org.bukkit.event.player.PlayerMoveEvent;
@@ -112,21 +111,6 @@ public interface Watcher {
// Empty default as effects only override required watchers.
}
/**
* Called when an entity shoots a bow.
*
* @param shooter The entity that shot the bow.
* @param arrow The arrow that was shot.
* @param event The event that called this watcher.
* @param config The effect config.
*/
default void onBowShoot(@NotNull final LivingEntity shooter,
@NotNull final Arrow arrow,
@NotNull final EntityShootBowEvent event,
@NotNull final JSONConfig config) {
// Empty default as effects only override required watchers.
}
/**
* Called when an entity shoots a projectile.
*
@@ -156,15 +140,15 @@ public interface Watcher {
}
/**
* Called when an arrow hits a block or entity.
* Called when a projectile hits a block or entity.
*
* @param shooter The entity that shot the arrow.
* @param event The event that called this watcher.
* @param config The effect config.
*/
default void onArrowHit(@NotNull final LivingEntity shooter,
@NotNull final ProjectileHitEvent event,
@NotNull final JSONConfig config) {
default void onProjectileHit(@NotNull final LivingEntity shooter,
@NotNull final ProjectileHitEvent event,
@NotNull final JSONConfig config) {
// Empty default as effects only override required watchers.
}
@@ -183,19 +167,6 @@ public interface Watcher {
// Empty default as effects only override required watchers.
}
/**
* Called when a trident hits a block or entity.
*
* @param shooter The entity that threw the trident.
* @param event The event that called this watcher.
* @param config The effect config.
*/
default void onTridentHit(@NotNull final LivingEntity shooter,
@NotNull final ProjectileHitEvent event,
@NotNull final JSONConfig config) {
// Empty default as effects only override required watchers.
}
/**
* Called when an entity takes damage wearing armor.
*

View File

@@ -1,11 +1,13 @@
package com.willfp.reforges.display
import com.willfp.eco.core.Prerequisite
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.ReforgesPlugin
import com.willfp.reforges.paper.toBukkit
import com.willfp.reforges.reforges.meta.ReforgeTarget
import com.willfp.reforges.reforges.util.ReforgeUtils
import org.bukkit.ChatColor
@@ -14,6 +16,7 @@ import org.bukkit.inventory.ItemStack
import org.bukkit.inventory.meta.SkullMeta
import org.bukkit.persistence.PersistentDataType
@Suppress("DEPRECATION")
class ReforgesDisplay(private val plugin: ReforgesPlugin) : DisplayModule(plugin, DisplayPriority.HIGHEST) {
override fun display(
itemStack: ItemStack,
@@ -67,14 +70,16 @@ class ReforgesDisplay(private val plugin: ReforgesPlugin) : DisplayModule(plugin
lore.addAll(addLore)
}
if (plugin.configYml.getBool("reforge.display-in-name")) {
val displayName = plugin.paperHandler.getDisplayName(itemStack)
val newName = "${reforge.name} ${ChatColor.RESET}${displayName}"
meta.setDisplayName(newName)
meta.persistentDataContainer.set(
plugin.namespacedKeyFactory.create("shadowed_name"),
PersistentDataType.STRING,
displayName
)
if (Prerequisite.HAS_PAPER.isMet) {
val displayName = itemStack.displayName().toBukkit()
val newName = "${reforge.name} ${ChatColor.RESET}${displayName}"
meta.setDisplayName(newName)
meta.persistentDataContainer.set(
plugin.namespacedKeyFactory.create("shadowed_name"),
PersistentDataType.STRING,
displayName
)
}
}
}
itemStack.itemMeta = meta
@@ -86,7 +91,6 @@ class ReforgesDisplay(private val plugin: ReforgesPlugin) : DisplayModule(plugin
return
}
val target = ReforgeTarget.getForItem(itemStack)
if (target == null && itemStack.type != Material.PLAYER_HEAD) {

View File

@@ -0,0 +1,18 @@
package com.willfp.reforges.paper
import net.kyori.adventure.text.Component
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer
private val serializer = LegacyComponentSerializer.builder()
.hexColors()
.useUnusualXRepeatedCharacterHexFormat()
.character('§')
.build()
fun String.toComponent(): Component {
return serializer.deserialize(this)
}
fun Component.toBukkit(): String {
return serializer.serialize(this)
}

View File

@@ -1,7 +0,0 @@
package com.willfp.reforges.paper
import org.bukkit.inventory.ItemStack
interface PaperHandler {
fun getDisplayName(itemStack: ItemStack): String
}

View File

@@ -1,303 +0,0 @@
package com.willfp.reforges.reforges.util;
import com.willfp.eco.core.EcoPlugin;
import com.willfp.eco.core.PluginDependent;
import com.willfp.eco.core.config.interfaces.JSONConfig;
import com.willfp.eco.core.events.EntityDeathByEntityEvent;
import com.willfp.eco.core.events.PlayerJumpEvent;
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.reforges.Reforge;
import org.bukkit.block.Block;
import org.bukkit.entity.AbstractArrow;
import org.bukkit.entity.Arrow;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.entity.Projectile;
import org.bukkit.entity.Trident;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityShootBowEvent;
import org.bukkit.event.entity.ProjectileHitEvent;
import org.bukkit.event.entity.ProjectileLaunchEvent;
import org.bukkit.inventory.EntityEquipment;
import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull;
import java.util.Map;
public class WatcherTriggers extends PluginDependent<EcoPlugin> implements Listener {
/**
* Create new listener for watcher events.
*
* @param plugin The plugin to link the events to.
*/
public WatcherTriggers(@NotNull final EcoPlugin plugin) {
super(plugin);
}
/**
* Called when an entity launches a projectile.
*
* @param event The event to listen for.
*/
@EventHandler(ignoreCancelled = true)
public void onProjectileLaunch(@NotNull final ProjectileLaunchEvent event) {
if (McmmoManager.isFake(event)) {
return;
}
if (!(event.getEntity() instanceof AbstractArrow)) {
return;
}
if (!(event.getEntity().getShooter() instanceof Player)) {
return;
}
LivingEntity shooter = (LivingEntity) event.getEntity().getShooter();
Projectile projectile = event.getEntity();
if (shooter.getEquipment() == null) {
return;
}
ItemStack item = shooter.getEquipment().getItemInMainHand();
if (projectile instanceof Trident trident) {
item = trident.getItem();
}
Reforge reforge = ReforgeUtils.getReforge(item);
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().onProjectileLaunch(shooter, projectile, event, entry.getValue());
}
}
/**
* Called when an entity takes fall damage.
*
* @param event The event to listen for.
*/
@EventHandler(ignoreCancelled = true)
public void onFallDamage(@NotNull final EntityDamageEvent event) {
if (McmmoManager.isFake(event)) {
return;
}
if (!event.getCause().equals(EntityDamageEvent.DamageCause.FALL)) {
return;
}
if (!(event.getEntity() instanceof LivingEntity victim)) {
return;
}
EntityEquipment entityEquipment = victim.getEquipment();
if (entityEquipment == null) {
return;
}
for (ItemStack itemStack : entityEquipment.getArmorContents()) {
if (itemStack == null) {
continue;
}
Reforge reforge = ReforgeUtils.getReforge(itemStack);
if (reforge == null) {
continue;
}
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().onFallDamage(victim, event, entry.getValue());
}
}
}
/**
* Called when an arrow hits a block or entity.
*
* @param event The event to listen for.
*/
@EventHandler(ignoreCancelled = true)
public void onArrowHit(@NotNull final ProjectileHitEvent event) {
if (McmmoManager.isFake(event)) {
return;
}
if (!(event.getEntity().getShooter() instanceof LivingEntity shooter)) {
return;
}
if (!(event.getEntity() instanceof Arrow arrow)) {
return;
}
if (event.getEntity().getShooter() == null) {
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().onArrowHit(shooter, event, entry.getValue());
}
}
/**
* Called when a trident hits a block or entity.
*
* @param event The event to listen for.
*/
@EventHandler(ignoreCancelled = true)
public void onTridentHit(@NotNull final ProjectileHitEvent event) {
if (McmmoManager.isFake(event)) {
return;
}
if (!(event.getEntity().getShooter() instanceof LivingEntity shooter)) {
return;
}
if (event.getEntity().getShooter() == null) {
return;
}
if (!(event.getEntity() instanceof Trident trident)) {
return;
}
ItemStack item = trident.getItem();
Reforge reforge = ReforgeUtils.getReforge(item);
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().onTridentHit(shooter, event, entry.getValue());
}
}
/**
* Called when an entity takes damage wearing armor.
*
* @param event The event to listen for.
*/
@EventHandler(ignoreCancelled = true)
public void onDamageWearingArmor(@NotNull final EntityDamageEvent event) {
if (McmmoManager.isFake(event)) {
return;
}
if (!(event.getEntity() instanceof LivingEntity victim)) {
return;
}
EntityEquipment entityEquipment = victim.getEquipment();
if (entityEquipment == null) {
return;
}
for (ItemStack itemStack : entityEquipment.getArmorContents()) {
if (itemStack == null) {
continue;
}
Reforge reforge = ReforgeUtils.getReforge(itemStack);
if (reforge == null) {
continue;
}
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().onDamageWearingArmor(victim, event, entry.getValue());
}
}
}
/**
* Called when an entity throws a trident.
*
* @param event The event to listen for.
*/
@EventHandler(ignoreCancelled = true)
public void onTridentLaunch(@NotNull final ProjectileLaunchEvent event) {
if (McmmoManager.isFake(event)) {
return;
}
if (!(event.getEntity() instanceof Trident trident)) {
return;
}
if (!(event.getEntity().getShooter() instanceof LivingEntity)) {
return;
}
LivingEntity shooter = (LivingEntity) trident.getShooter();
ItemStack item = trident.getItem();
if (shooter == null) {
return;
}
Reforge reforge = ReforgeUtils.getReforge(item);
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().onTridentLaunch(shooter, trident, event, entry.getValue());
}
}
}

View File

@@ -13,7 +13,8 @@ import org.bukkit.event.Listener
import org.bukkit.event.block.BlockBreakEvent
import org.bukkit.event.entity.EntityDamageByEntityEvent
import org.bukkit.event.entity.EntityDamageEvent
import org.bukkit.event.entity.EntityShootBowEvent
import org.bukkit.event.entity.ProjectileHitEvent
import org.bukkit.event.entity.ProjectileLaunchEvent
class WatcherTriggers(
private val plugin: EcoPlugin
@@ -228,28 +229,117 @@ class WatcherTriggers(
}
@EventHandler(ignoreCancelled = true)
fun onBowShoot(event: EntityShootBowEvent) {
fun onProjectileLaunch(event: ProjectileLaunchEvent) {
if (McmmoManager.isFake(event)) {
return
}
if (event.projectile.type != EntityType.ARROW) {
val shooter = event.entity.shooter
if (shooter !is LivingEntity) {
return
}
val shooter = event.entity
val equipment = shooter.equipment ?: return
val arrow = event.projectile as Arrow
var item = equipment.itemInMainHand
val bow = ArrowUtils.getBow(arrow) ?: return
if (event.entity is Trident) {
item = (event.entity as Trident).item
}
val reforge = ReforgeUtils.getReforge(bow) ?: return
val reforge = ReforgeUtils.getReforge(item) ?: return
for ((effect, config) in reforge.effects) {
if (NumberUtils.randFloat(0.0, 100.0) > config.getDoubleOrNull("chance") ?: 100.0) {
continue
}
effect.onBowShoot(shooter, arrow, event, config)
effect.onProjectileLaunch(shooter, event.entity, event, config)
}
}
@EventHandler(ignoreCancelled = true)
fun onFallDamage(event: EntityDamageEvent) {
if (McmmoManager.isFake(event)) {
return
}
if (event.cause != EntityDamageEvent.DamageCause.FALL) {
return
}
val victim = event.entity
if (victim !is LivingEntity) {
return
}
val equipment = victim.equipment ?: return
for (itemStack in equipment.armorContents) {
val reforge = ReforgeUtils.getReforge(itemStack) ?: continue
for ((effect, config) in reforge.effects) {
if (NumberUtils.randFloat(0.0, 100.0) > config.getDoubleOrNull("chance") ?: 100.0) {
continue
}
effect.onFallDamage(victim, event, config)
}
}
}
@EventHandler(ignoreCancelled = true)
fun onProjectileHit(event: ProjectileHitEvent) {
if (McmmoManager.isFake(event)) {
return
}
val projectile = event.entity
val shooter = projectile.shooter
if (shooter !is LivingEntity) {
return
}
val item = when (projectile) {
is Arrow -> ArrowUtils.getBow(projectile)
is Trident -> projectile.item
else -> null
} ?: return
val reforge = ReforgeUtils.getReforge(item) ?: return
for ((effect, config) in reforge.effects) {
if (NumberUtils.randFloat(0.0, 100.0) > config.getDoubleOrNull("chance") ?: 100.0) {
continue
}
effect.onProjectileHit(shooter, event, config)
}
}
@EventHandler(ignoreCancelled = true)
fun onDamageWearingArmor(event: EntityDamageEvent) {
if (McmmoManager.isFake(event)) {
return
}
val victim = event.entity
if (victim !is LivingEntity) {
return
}
val equipment = victim.equipment ?: return
for (itemStack in equipment.armorContents) {
val reforge = ReforgeUtils.getReforge(itemStack) ?: continue
for ((effect, config) in reforge.effects) {
if (NumberUtils.randFloat(0.0, 100.0) > config.getDoubleOrNull("chance") ?: 100.0) {
continue
}
effect.onDamageWearingArmor(victim, event, config)
}
}
}
}

View File

@@ -3,4 +3,3 @@ rootProject.name = 'Reforges'
// Core
include ':eco-core'
include ':eco-core:core-plugin'
include ':eco-core:core-paper'