First commit.

This commit is contained in:
天クマ 2025-03-19 06:33:41 -03:00
commit 5f25889f84
16 changed files with 378 additions and 0 deletions

12
.classpath Normal file
View file

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
<attributes>
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" path="src"/>
<classpathentry kind="lib" path="/home/adrian/Downloads/craftbukkit-1060.jar"/>
<classpathentry combineaccessrules="false" kind="src" path="/tenkumaLib"/>
<classpathentry kind="output" path="bin"/>
</classpath>

17
.project Normal file
View file

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>TheDevilWithin</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>

View file

@ -0,0 +1,2 @@
eclipse.preferences.version=1
encoding/<project>=UTF-8

View file

@ -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

Binary file not shown.

17
config.yml Normal file
View file

@ -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: "&4Im 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."

7
plugin.yml Normal file
View file

@ -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

View file

@ -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);
}
}
}
}
}

View file

@ -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);
}
}
}
}

View file

@ -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", "&4Im 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;
}
}
}
}

View file

@ -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;
}
}
}

View file

@ -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");
}
}