commit 5f25889f8445c6bf6bdcdd2edeaa1e4f2ff8c134 Author: tenkuma Date: Wed Mar 19 06:33:41 2025 -0300 First commit. diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..67f6d3a --- /dev/null +++ b/.classpath @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/.project b/.project new file mode 100644 index 0000000..0b80670 --- /dev/null +++ b/.project @@ -0,0 +1,17 @@ + + + TheDevilWithin + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..99f26c0 --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..acdbf9c --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,9 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/bin/gd/rf/adrianvictor/devilwithin/CursesEntityListener.class b/bin/gd/rf/adrianvictor/devilwithin/CursesEntityListener.class new file mode 100644 index 0000000..49fba79 Binary files /dev/null and b/bin/gd/rf/adrianvictor/devilwithin/CursesEntityListener.class differ diff --git a/bin/gd/rf/adrianvictor/devilwithin/CursesPlayerListener.class b/bin/gd/rf/adrianvictor/devilwithin/CursesPlayerListener.class new file mode 100644 index 0000000..3a08573 Binary files /dev/null and b/bin/gd/rf/adrianvictor/devilwithin/CursesPlayerListener.class differ diff --git a/bin/gd/rf/adrianvictor/devilwithin/Enchanting.class b/bin/gd/rf/adrianvictor/devilwithin/Enchanting.class new file mode 100644 index 0000000..97427c9 Binary files /dev/null and b/bin/gd/rf/adrianvictor/devilwithin/Enchanting.class differ diff --git a/bin/gd/rf/adrianvictor/devilwithin/EnchantingEntityListener.class b/bin/gd/rf/adrianvictor/devilwithin/EnchantingEntityListener.class new file mode 100644 index 0000000..8021974 Binary files /dev/null and b/bin/gd/rf/adrianvictor/devilwithin/EnchantingEntityListener.class differ diff --git a/bin/gd/rf/adrianvictor/devilwithin/TheDevilWithin.class b/bin/gd/rf/adrianvictor/devilwithin/TheDevilWithin.class new file mode 100644 index 0000000..dc98093 Binary files /dev/null and b/bin/gd/rf/adrianvictor/devilwithin/TheDevilWithin.class differ diff --git a/config.yml b/config.yml new file mode 100644 index 0000000..8c8d774 --- /dev/null +++ b/config.yml @@ -0,0 +1,17 @@ + +# ID of the block you should interact to enchant your armor +enchant_block: 57 # 57 = diamond block + +enable_enchanting: true +# enables bad stuff when armor durability is low +enable_curses: true + +# messages for when you enchant the items (supports color with &) +helmet_message: "&4I’m underneath your skin." +chestplate_message: "&4I'm gonna make you suffer." +leggings_message: "&4You'll never know what hit you." +boots_message: "&4Look what you made of me." +enable_insomnia_player_message_broadcast: true +insomnia_player_message: "I can't sleep." +insomnia_message: "&4Can't sleep. Can't breathe. Won't get no piece with me." +chestplate_burn_message: "&4You won't make me disappear, until I make you." \ No newline at end of file diff --git a/plugin.yml b/plugin.yml new file mode 100644 index 0000000..e2d90cd --- /dev/null +++ b/plugin.yml @@ -0,0 +1,7 @@ +name: TheDevilWithin +main: gd.rf.adrianvictor.devilwithin.TheDevilWithin +description: Adds enchanting to Beta Minecraft. +author: tenkuma +website: https://adrianvictor.rf.gd/projects.html +depends: [tenkumaLib] +version: 1.0 \ No newline at end of file diff --git a/src/gd/rf/adrianvictor/devilwithin/CursesEntityListener.java b/src/gd/rf/adrianvictor/devilwithin/CursesEntityListener.java new file mode 100644 index 0000000..c875aae --- /dev/null +++ b/src/gd/rf/adrianvictor/devilwithin/CursesEntityListener.java @@ -0,0 +1,43 @@ +package gd.rf.adrianvictor.devilwithin; + +import java.util.Random; + +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntityListener; +import org.bukkit.inventory.ItemStack; +import org.bukkit.plugin.java.JavaPlugin; + +import gd.rf.adrianvictor.lib.Color; +import gd.rf.adrianvictor.lib.Text; + +public class CursesEntityListener extends EntityListener { // Extending PlayerListener for legacy + + org.bukkit.util.config.Configuration config; + + public CursesEntityListener(JavaPlugin plugin) { + config = plugin.getConfiguration(); + } + + // curse for Chestplate. 10% chance to ignite player for 5 seconds + public void onEntityDamage(EntityDamageEvent event) { + if (!(event.getEntity() instanceof Player)) return; + Player player = (Player)event.getEntity(); + ItemStack chestplate = player.getInventory().getChestplate(); + Random rand = new Random(); + + if (chestplate != null && chestplate.getType() == Material.CHAINMAIL_CHESTPLATE) { + short maxDurability = chestplate.getType().getMaxDurability(); + short damage = chestplate.getDurability(); + short remainingDurability = (short) (maxDurability - damage); + + if (remainingDurability < (maxDurability / 3)) { + if (rand.nextInt(20) == 0) { + player.sendMessage("<" + Text.generateRandomString(5) + "> " + Color.formatColors(config.getString("chestplate_burn_message", "&4You won't make me disappear, until I make you."))); + player.setFireTicks(100); + } + } + } + } +} diff --git a/src/gd/rf/adrianvictor/devilwithin/CursesPlayerListener.java b/src/gd/rf/adrianvictor/devilwithin/CursesPlayerListener.java new file mode 100644 index 0000000..0f80ebe --- /dev/null +++ b/src/gd/rf/adrianvictor/devilwithin/CursesPlayerListener.java @@ -0,0 +1,66 @@ +package gd.rf.adrianvictor.devilwithin; + +import java.util.Random; + +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.player.PlayerBedEnterEvent; +import org.bukkit.event.player.PlayerListener; +import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.plugin.java.JavaPlugin; +import org.bukkit.util.Vector; + +import gd.rf.adrianvictor.lib.Color; +import gd.rf.adrianvictor.lib.Text; + +public class CursesPlayerListener extends PlayerListener { + + org.bukkit.util.config.Configuration config; + + public CursesPlayerListener(JavaPlugin plugin) { + config = plugin.getConfiguration(); + } + + // curse for Leggings. slows player down 50% of the onPlayerMove events to a random speed. + public void onPlayerMove(PlayerMoveEvent event) { + Player player = event.getPlayer(); + Random rand = new Random(); + + ItemStack leggings = player.getInventory().getLeggings(); + + if (leggings != null && leggings.getType() == Material.CHAINMAIL_LEGGINGS) { + short maxDurability = leggings.getType().getMaxDurability(); + short damage = leggings.getDurability(); + short remainingDurability = (short) (maxDurability - damage); + + if (remainingDurability < (maxDurability / 3)) { + if (rand.nextBoolean()) { + Vector velocity = player.getVelocity(); + double slowFactor = 0.3 + (rand.nextDouble() * 0.4); + player.setVelocity(velocity.multiply(slowFactor)); + } + } + } + } + + // curse for Helmet. Player cannot sleep. + public void onPlayerBedEnter(PlayerBedEnterEvent event) { + Player player = event.getPlayer(); + ItemStack helmet = player.getInventory().getHelmet(); + + if (helmet != null && helmet.getType() == Material.CHAINMAIL_HELMET) { + short maxDurability = helmet.getType().getMaxDurability(); + short damage = helmet.getDurability(); + short remainingDurability = (short) (maxDurability - damage); + + if (remainingDurability < (maxDurability / 3)) { + if (config.getBoolean("enable_insomnia_player_message_broadcast", true)) { + player.chat(config.getString("insomnia_player_message", "I can't sleep.")); + } + player.sendMessage("<" + Text.generateRandomString(5) + "> " + Color.formatColors(config.getString("insomnia_message", "&4Can't sleep. Can't breathe. Won't get no piece with me."))); + event.setCancelled(true); + } + } + } +} diff --git a/src/gd/rf/adrianvictor/devilwithin/Enchanting.java b/src/gd/rf/adrianvictor/devilwithin/Enchanting.java new file mode 100644 index 0000000..43d8859 --- /dev/null +++ b/src/gd/rf/adrianvictor/devilwithin/Enchanting.java @@ -0,0 +1,75 @@ +package gd.rf.adrianvictor.devilwithin; + +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerListener; +import org.bukkit.inventory.ItemStack; +import org.bukkit.plugin.java.JavaPlugin; + +import gd.rf.adrianvictor.lib.Color; +import gd.rf.adrianvictor.lib.ConfigurationEx; +import gd.rf.adrianvictor.lib.Text; + +public class Enchanting extends PlayerListener { + + int configEnchantBlockID; + String helmetMessage; + String chestplateMessage; + String leggingsMessage; + String bootsMessage; + ConfigurationEx config; + + public Enchanting(JavaPlugin plugin) { + configEnchantBlockID = plugin.getConfiguration().getInt("enchant_block", 57); + helmetMessage = plugin.getConfiguration().getString("helmet_message", "&4I’m underneath your skin."); + chestplateMessage = plugin.getConfiguration().getString("chestplate_message", "&4I'm gonna make you suffer."); + leggingsMessage = plugin.getConfiguration().getString("leggings_message", "&4You'll never know what hit you."); + bootsMessage = plugin.getConfiguration().getString("boots_message", "&4Look what you made of me."); + } + + + @Override + public void onPlayerInteract(PlayerInteractEvent event) { + if (event.getClickedBlock() == null) { + return; + } + Material material = event.getClickedBlock().getType(); + if (material == null) { return; } + + ItemStack item = event.getItem(); + if (item == null) { return; } + + short durability = item.getDurability(); + Player player = event.getPlayer(); + if (player == null) { return; } + + Material itemMaterial = player.getItemInHand().getType(); + if (material == Material.getMaterial(configEnchantBlockID)) { + switch(itemMaterial) { + case DIAMOND_HELMET: + item.setType(Material.CHAINMAIL_HELMET); + item.setDurability(durability); + player.sendMessage("<" + Text.generateRandomString(5) + "> " + Color.formatColors(helmetMessage)); + break; + case DIAMOND_CHESTPLATE: + item.setType(Material.CHAINMAIL_CHESTPLATE); + item.setDurability(durability); + player.sendMessage("<" + Text.generateRandomString(5) + "> " + Color.formatColors(chestplateMessage)); + break; + case DIAMOND_LEGGINGS: + item.setType(Material.CHAINMAIL_LEGGINGS); + item.setDurability(durability); + player.sendMessage("<" + Text.generateRandomString(5) + "> " + Color.formatColors(leggingsMessage)); + break; + case DIAMOND_BOOTS: + item.setType(Material.CHAINMAIL_BOOTS); + item.setDurability(durability); + player.sendMessage("<" + Text.generateRandomString(5) + "> " + Color.formatColors(bootsMessage)); + break; + default: + break; + } + } + } +} diff --git a/src/gd/rf/adrianvictor/devilwithin/EnchantingEntityListener.java b/src/gd/rf/adrianvictor/devilwithin/EnchantingEntityListener.java new file mode 100644 index 0000000..e5b05e4 --- /dev/null +++ b/src/gd/rf/adrianvictor/devilwithin/EnchantingEntityListener.java @@ -0,0 +1,76 @@ +package gd.rf.adrianvictor.devilwithin; + +import java.util.Random; + +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import org.bukkit.event.entity.EntityListener; + +public class EnchantingEntityListener extends EntityListener { + + @Override + public void onEntityDamage(EntityDamageEvent event) { + if (!(event.getEntity() instanceof Player)) return; + Player player = (Player) event.getEntity(); + double damage = event.getDamage(); + double health = player.getHealth(); + + DamageCause cause = event.getCause(); + + if ((cause == DamageCause.FALL || cause == DamageCause.DROWNING || cause == DamageCause.FIRE_TICK || cause == DamageCause.FIRE || cause == DamageCause.CONTACT || cause == DamageCause.LAVA || cause == DamageCause.SUFFOCATION) && + (isWearing(player, Material.CHAINMAIL_HELMET) && isWearing(player, Material.CHAINMAIL_CHESTPLATE) && isWearing(player, Material.CHAINMAIL_LEGGINGS) && isWearing(player, Material.CHAINMAIL_BOOTS))) + { + event.setCancelled(true); + } + + // **1. If damage is lethal, allow it** + if (damage >= health) { + return; + } + + if (cause == DamageCause.FALL && isWearing(player, Material.CHAINMAIL_BOOTS)) { + event.setCancelled(true); + } + + if (cause == DamageCause.DROWNING && isWearing(player, Material.CHAINMAIL_HELMET)) { + event.setCancelled(true); + } + + if ((cause == DamageCause.FIRE_TICK || cause == DamageCause.LAVA) && isWearing(player, Material.CHAINMAIL_CHESTPLATE)) { + short maxDurability = player.getInventory().getChestplate().getType().getMaxDurability(); + short armorDamage = player.getInventory().getChestplate().getDurability(); + short remainingDurability = (short) (maxDurability - armorDamage); + Random random = new Random(); + + if ((remainingDurability < (maxDurability / 3)) && random.nextInt(2) == 0) { + event.setCancelled(true); + } else if (remainingDurability > (maxDurability / 3)) { + event.setCancelled(true); + } + } + + if ((cause == DamageCause.CONTACT) && isWearing(player, Material.CHAINMAIL_LEGGINGS)) { + Random random = new Random(); + if (random.nextInt(2) == 1) { + event.setCancelled(true); + } + } + } + + private boolean isWearing(Player player, Material piece) { + switch (piece) { + case CHAINMAIL_BOOTS: + return player.getInventory().getBoots() != null && player.getInventory().getBoots().getType() == piece; + case CHAINMAIL_HELMET: + return player.getInventory().getHelmet() != null && player.getInventory().getHelmet().getType() == piece; + case CHAINMAIL_CHESTPLATE: + return player.getInventory().getChestplate() != null && player.getInventory().getChestplate().getType() == piece; + case CHAINMAIL_LEGGINGS: + return player.getInventory().getLeggings() != null && player.getInventory().getLeggings().getType() == piece; + default: + return false; + } + } +} diff --git a/src/gd/rf/adrianvictor/devilwithin/TheDevilWithin.java b/src/gd/rf/adrianvictor/devilwithin/TheDevilWithin.java new file mode 100644 index 0000000..25adaf6 --- /dev/null +++ b/src/gd/rf/adrianvictor/devilwithin/TheDevilWithin.java @@ -0,0 +1,54 @@ +package gd.rf.adrianvictor.devilwithin; + +import org.bukkit.event.Event.Priority; +import org.bukkit.event.Event.Type; +import org.bukkit.plugin.PluginManager; +import org.bukkit.plugin.java.JavaPlugin; +import gd.rf.adrianvictor.lib.ConfigurationEx; +import gd.rf.adrianvictor.lib.Log; +import gd.rf.adrianvictor.lib.logger; + +public class TheDevilWithin extends JavaPlugin { + + ConfigurationEx config; + Enchanting enchanting; + CursesPlayerListener cursesPL; + EnchantingEntityListener enchantingEL; + CursesEntityListener cursesEL; + Log logger; + + @Override + public void onEnable() { + logger = new Log(this); + config = new ConfigurationEx(this, "config.yml", logger); + PluginManager mgr = this.getServer().getPluginManager(); + enchanting = new Enchanting(this); + cursesPL = new CursesPlayerListener(this); + cursesEL = new CursesEntityListener(this); + enchantingEL = new EnchantingEntityListener(); + config.loadConfig(); + if (this.getConfiguration().getBoolean("enable_curses", true)) { + mgr.registerEvent(Type.PLAYER_MOVE, cursesPL, Priority.Normal, this); + mgr.registerEvent(Type.PLAYER_BED_ENTER, cursesPL, Priority.Normal, this); + mgr.registerEvent(Type.ENTITY_DAMAGE, cursesEL, Priority.Normal, this); + logger.info(this + " curses are enabled"); + } else { + logger.info(this + " curses are disabled by the config"); + } + mgr.registerEvent(Type.ENTITY_DAMAGE, enchantingEL, Priority.Normal, this); + if (this.getConfiguration().getBoolean("enable_enchanting", true)) { + mgr.registerEvent(Type.PLAYER_INTERACT, enchanting, Priority.Normal, this); + logger.info(this + " enchanting is enabled"); + + } else { + logger.info(this + " enchanting is disabled by the config"); + } + logger.info(this + " started"); + } + + @Override + public void onDisable() { + logger.info(this + " disabled"); + } + +}