fixed witherite, improved heresy checker

This commit is contained in:
2025-02-03 14:15:31 +00:00
parent b6b5aab626
commit 4e03c6bf3b
6 changed files with 205 additions and 22 deletions
+1 -1
View File
@@ -6,7 +6,7 @@
<groupId>dev.zxq5</groupId>
<artifactId>fantasysmp</artifactId>
<version>1.1-SNAPSHOT</version>
<version>2.2-SNAPSHOT</version>
<packaging>jar</packaging>
<name>fantasysmp</name>
@@ -1,5 +1,6 @@
package dev.zxq5.fantasysmp;
import dev.zxq5.fantasysmp.events.HereticWarner;
import dev.zxq5.fantasysmp.events.StevenKillCheck;
import dev.zxq5.fantasysmp.items.GenericGearSet;
import dev.zxq5.fantasysmp.items.Items;
@@ -37,6 +38,10 @@ public final class Fantasysmp extends JavaPlugin {
witherite.registerRecipes();
getServer().getPluginManager().registerEvents(new StevenKillCheck(), this);
HereticWarner hereticWarner = new HereticWarner();
hereticWarner.checkHereticInventory();
}
@Override
@@ -0,0 +1,40 @@
package dev.zxq5.fantasysmp.events;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import static org.bukkit.Bukkit.getPluginManager;
public class HereticWarner {
int task;
public void checkHereticInventory() {
Bukkit.getScheduler().scheduleSyncRepeatingTask(getPluginManager().getPlugin("fantasysmp"), () -> {
for ( Player heretic : Bukkit.getServer().getOnlinePlayers() ) {
if (heretic.getInventory().contains(Material.CHICKEN) || heretic.getInventory().contains(Material.COOKED_CHICKEN)) {
warnHeretic(heretic);
}
}
}, 0, 20);
}
public void warnHeretic(Player heretic) {
// apply poison to player
heretic.sendMessage(ChatColor.DARK_RED + "HOLDING CHICKEN IS HERESY!");
heretic.sendMessage(ChatColor.DARK_RED + "DROP IT IMMEDIATELY!");
heretic.addPotionEffect(new PotionEffect(PotionEffectType.POISON, 20 * 2, 10));
heretic.addPotionEffect(new PotionEffect(PotionEffectType.WITHER, 20 * 2, 10));
heretic.addPotionEffect(new PotionEffect(PotionEffectType.SLOWNESS, 20 * 2, 3));
heretic.addPotionEffect(new PotionEffect(PotionEffectType.MINING_FATIGUE, 20 * 2, 3));
heretic.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 20 * 2, 3));
heretic.addPotionEffect(new PotionEffect(PotionEffectType.DARKNESS, 20 * 2, 3));
heretic.addPotionEffect(new PotionEffect(PotionEffectType.NAUSEA, 20 * 2, 3));
heretic.addPotionEffect(new PotionEffect(PotionEffectType.HUNGER, 20 * 2, 3));
heretic.addPotionEffect(new PotionEffect(PotionEffectType.WEAKNESS, 20 * 2, 3));
heretic.addPotionEffect(new PotionEffect(PotionEffectType.INSTANT_DAMAGE, 20 * 2, 0));
}
}
@@ -2,6 +2,7 @@ package dev.zxq5.fantasysmp.events;
import org.bukkit.*;
import org.bukkit.entity.Chicken;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.entity.Wither;
import org.bukkit.event.EventHandler;
@@ -10,6 +11,9 @@ import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.ProjectileHitEvent;
import org.bukkit.plugin.Plugin;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import org.bukkit.scheduler.BukkitRunnable;
import static org.bukkit.Bukkit.*;
@@ -30,12 +34,19 @@ public class StevenKillCheck implements Listener {
public void onEntityDamage(EntityDamageEvent event) {
if (event.getEntity() instanceof Chicken) {
event.setCancelled(true);
if ( event.getDamageSource().getCausingEntity() instanceof Player player) {
destroyHeretic(player);
}
}
}
@EventHandler
public void onProjectileHit(ProjectileHitEvent event) {
if (event.getHitEntity() instanceof Chicken && event.getEntity().getShooter() instanceof Player player) {
if (event.getEntity().getType() == EntityType.EGG) return;
if (event.getEntity().getType() == EntityType.SNOWBALL) return;
event.setCancelled(true);
destroyHeretic(player);
}
@@ -67,3 +78,4 @@ public class StevenKillCheck implements Listener {
Bukkit.getScheduler().runTaskLater(plugin, () -> heretic.setHealth(0), 10);
}
}
@@ -1,16 +1,19 @@
package dev.zxq5.fantasysmp.items;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.NamespacedKey;
import org.bukkit.attribute.Attribute;
import org.bukkit.attribute.AttributeModifier;
import org.bukkit.inventory.EquipmentSlotGroup;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.RecipeChoice;
import org.bukkit.inventory.meta.ItemMeta;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
public abstract class GenericGearSet implements HasRecipes {
protected int swordAttackDamage = 0;
@@ -21,24 +24,28 @@ public abstract class GenericGearSet implements HasRecipes {
protected int helmetArmour = 0;
protected int helmetArmourToughness = 0;
protected double helmetKnockbackResistance = 0;
protected int helmetDurability = 0;
protected String helmetName = "leather cap";
protected String helmetLore = "";
protected int chestplateArmour = 0;
protected int chestplateArmourToughness = 0;
protected double chestplateKnockbackResistance = 0;
protected int chestplateDurability = 0;
protected String chestplateName = "leather tunic";
protected String chestplateLore = "";
protected int leggingsArmour = 0;
protected int leggingsArmourToughness = 0;
protected double leggingsKnockbackResistance = 0;
protected int leggingsDurability = 0;
protected String leggingsName = "leather pants";
protected String leggingsLore = "";
protected int bootsArmour = 0;
protected int bootsArmourToughness = 0;
protected double bootsKnockbackResistance = 0;
protected int bootsDurability = 0;
protected String bootsName = "leather boots";
protected String bootsLore = "";
@@ -108,12 +115,16 @@ public abstract class GenericGearSet implements HasRecipes {
swordAttackSpeed = 1.6f;
helmetArmour = 3;
helmetArmourToughness = 3;
helmetKnockbackResistance = 0.1;
chestplateArmour = 8;
chestplateArmourToughness = 3;
chestplateKnockbackResistance = 0.1;
leggingsArmour = 6;
leggingsArmourToughness = 3;
leggingsKnockbackResistance = 0.1;
bootsArmour = 3;
bootsArmourToughness = 3;
bootsKnockbackResistance = 0.1;
}
public void setTier6() {
@@ -127,12 +138,16 @@ public abstract class GenericGearSet implements HasRecipes {
swordAttackSpeed = 1.6f;
helmetArmour = 3;
helmetArmourToughness = 5;
helmetKnockbackResistance = 0.1;
chestplateArmour = 8;
chestplateArmourToughness = 5;
chestplateKnockbackResistance = 0.1;
leggingsArmour = 6;
leggingsArmourToughness = 5;
leggingsKnockbackResistance = 0.1;
bootsArmour = 3;
bootsArmourToughness = 5;
bootsKnockbackResistance = 0.1;
}
// this must be overridden by the child class.
@@ -140,10 +155,7 @@ public abstract class GenericGearSet implements HasRecipes {
public ItemStack getSword() {
ItemStack item = swordMaterial;
ItemMeta meta = item.getItemMeta();
meta.setDisplayName(this.swordName);
meta.setLore(new ArrayList<>(List.of(this.swordLore)));
meta.addAttributeModifier(Attribute.ATTACK_DAMAGE, new AttributeModifier(
NamespacedKey.minecraft("generic.attack_damage"),
@@ -154,11 +166,21 @@ public abstract class GenericGearSet implements HasRecipes {
meta.addAttributeModifier(Attribute.ATTACK_SPEED, new AttributeModifier(
NamespacedKey.minecraft("generic.attack_speed"),
swordAttackSpeed,
swordAttackSpeed - 4,
AttributeModifier.Operation.ADD_NUMBER,
EquipmentSlotGroup.HAND
));
meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
meta.setDisplayName(this.swordName);
ArrayList<String> lore = new ArrayList<>(List.of(this.swordLore));
lore.add("\n");
lore.add(ChatColor.GRAY + "When in Main Hand:" + ChatColor.RESET);
if (swordAttackDamage > 0) lore.add(ChatColor.GREEN + " " + swordAttackDamage + " Attack Damage" + ChatColor.RESET);
if (swordAttackSpeed > 0) lore.add(ChatColor.GREEN + " " + swordAttackSpeed + " Attack Speed" + ChatColor.RESET);
meta.setLore(lore);
item.setItemMeta(meta);
return item;
}
@@ -171,17 +193,31 @@ public abstract class GenericGearSet implements HasRecipes {
meta.setLore(new ArrayList<>(List.of(this.helmetLore)));
meta.addAttributeModifier(Attribute.ARMOR, new AttributeModifier(
NamespacedKey.minecraft("generic.armor"),
helmetArmour,
UUID.randomUUID(),
"armour",
(double) helmetArmour,
AttributeModifier.Operation.ADD_NUMBER,
EquipmentSlotGroup.HEAD
));
meta.addAttributeModifier(Attribute.ARMOR_TOUGHNESS, new AttributeModifier(
NamespacedKey.minecraft("generic.armor_toughness"),
UUID.randomUUID(),
"armour_toughness",
helmetArmourToughness,
AttributeModifier.Operation.ADD_NUMBER,
EquipmentSlotGroup.HEAD
));
if (helmetKnockbackResistance != 0) {
meta.addAttributeModifier(Attribute.KNOCKBACK_RESISTANCE, new AttributeModifier(
UUID.randomUUID(),
"knockback_resistance",
helmetKnockbackResistance,
AttributeModifier.Operation.ADD_NUMBER,
EquipmentSlotGroup.HEAD
));
}
item.setItemMeta(meta);
return item;
}
@@ -194,17 +230,31 @@ public abstract class GenericGearSet implements HasRecipes {
meta.setLore(new ArrayList<>(List.of(this.chestplateLore)));
meta.addAttributeModifier(Attribute.ARMOR, new AttributeModifier(
NamespacedKey.minecraft("generic.armor"),
chestplateArmour,
UUID.randomUUID(),
"armour",
(double) chestplateArmour,
AttributeModifier.Operation.ADD_NUMBER,
EquipmentSlotGroup.CHEST
));
meta.addAttributeModifier(Attribute.ARMOR_TOUGHNESS, new AttributeModifier(
NamespacedKey.minecraft("generic.armor_toughness"),
UUID.randomUUID(),
"armour_toughness",
chestplateArmourToughness,
AttributeModifier.Operation.ADD_NUMBER,
EquipmentSlotGroup.CHEST
));
if (chestplateKnockbackResistance != 0) {
meta.addAttributeModifier(Attribute.KNOCKBACK_RESISTANCE, new AttributeModifier(
UUID.randomUUID(),
"knockback_resistance",
chestplateKnockbackResistance,
AttributeModifier.Operation.ADD_NUMBER,
EquipmentSlotGroup.CHEST
));
}
item.setItemMeta(meta);
return item;
}
@@ -217,17 +267,31 @@ public abstract class GenericGearSet implements HasRecipes {
meta.setLore(new ArrayList<>(List.of(this.leggingsLore)));
meta.addAttributeModifier(Attribute.ARMOR, new AttributeModifier(
NamespacedKey.minecraft("generic.armor"),
leggingsArmour,
UUID.randomUUID(),
"armour",
(double) leggingsArmour,
AttributeModifier.Operation.ADD_NUMBER,
EquipmentSlotGroup.LEGS
));
meta.addAttributeModifier(Attribute.ARMOR_TOUGHNESS, new AttributeModifier(
NamespacedKey.minecraft("generic.armor_toughness"),
UUID.randomUUID(),
"armour_toughness",
leggingsArmourToughness,
AttributeModifier.Operation.ADD_NUMBER,
EquipmentSlotGroup.LEGS
));
if (leggingsKnockbackResistance != 0) {
meta.addAttributeModifier(Attribute.KNOCKBACK_RESISTANCE, new AttributeModifier(
UUID.randomUUID(),
"knockback_resistance",
leggingsKnockbackResistance,
AttributeModifier.Operation.ADD_NUMBER,
EquipmentSlotGroup.LEGS
));
}
item.setItemMeta(meta);
return item;
}
@@ -240,17 +304,31 @@ public abstract class GenericGearSet implements HasRecipes {
meta.setLore(new ArrayList<>(List.of(this.bootsLore)));
meta.addAttributeModifier(Attribute.ARMOR, new AttributeModifier(
NamespacedKey.minecraft("generic.armor"),
bootsArmour,
UUID.randomUUID(),
"armour",
(double) bootsArmour,
AttributeModifier.Operation.ADD_NUMBER,
EquipmentSlotGroup.FEET
));
meta.addAttributeModifier(Attribute.ARMOR_TOUGHNESS, new AttributeModifier(
NamespacedKey.minecraft("generic.armor_toughness"),
UUID.randomUUID(),
"armour_toughness",
bootsArmourToughness,
AttributeModifier.Operation.ADD_NUMBER,
EquipmentSlotGroup.FEET
));
if (bootsKnockbackResistance != 0) {
meta.addAttributeModifier(Attribute.KNOCKBACK_RESISTANCE, new AttributeModifier(
UUID.randomUUID(),
"knockback_resistance",
bootsKnockbackResistance,
AttributeModifier.Operation.ADD_NUMBER,
EquipmentSlotGroup.FEET
));
}
item.setItemMeta(meta);
return item;
}
@@ -10,6 +10,9 @@ import org.bukkit.event.Listener;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.RecipeChoice;
import org.bukkit.inventory.SmithingTransformRecipe;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.inventory.meta.components.CustomModelDataComponent;
import org.bukkit.inventory.meta.components.EquippableComponent;
import org.bukkit.potion.PotionEffect;
import static org.bukkit.Bukkit.getServer;
@@ -38,31 +41,31 @@ public class Witherite extends GenericGearSet implements Listener, CommandExecut
ItemStack sword = this.getSword();
NamespacedKey swordKey = new NamespacedKey("fantasysmp.items", "witherite_sword");
RecipeChoice swordChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_SWORD);
SmithingTransformRecipe swordRecipe = new SmithingTransformRecipe(swordKey, sword, NETHERITE_UPGRADE, WITHER_SKULL, swordChoice);
SmithingTransformRecipe swordRecipe = new SmithingTransformRecipe(swordKey, sword, NETHERITE_UPGRADE, swordChoice, WITHER_SKULL);
getServer().addRecipe(swordRecipe);
ItemStack helmet = this.getHelmet();
NamespacedKey helmetKey = new NamespacedKey("fantasysmp.items", "witherite_helmet");
RecipeChoice helmetChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_HELMET);
SmithingTransformRecipe helmetRecipe = new SmithingTransformRecipe(helmetKey, helmet, NETHERITE_UPGRADE, WITHER_SKULL, helmetChoice);
SmithingTransformRecipe helmetRecipe = new SmithingTransformRecipe(helmetKey, helmet, NETHERITE_UPGRADE, helmetChoice, WITHER_SKULL);
getServer().addRecipe(helmetRecipe);
ItemStack chestplate = this.getChestplate();
NamespacedKey chestplateKey = new NamespacedKey("fantasysmp.items", "witherite_chestplate");
RecipeChoice chestplateChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_CHESTPLATE);
SmithingTransformRecipe chestplateRecipe = new SmithingTransformRecipe(chestplateKey, chestplate, NETHERITE_UPGRADE, WITHER_SKULL, chestplateChoice);
SmithingTransformRecipe chestplateRecipe = new SmithingTransformRecipe(chestplateKey, chestplate, NETHERITE_UPGRADE, chestplateChoice, WITHER_SKULL);
getServer().addRecipe(chestplateRecipe);
ItemStack leggings = this.getLeggings();
NamespacedKey leggingsKey = new NamespacedKey("fantasysmp.items", "witherite_leggings");
RecipeChoice leggingsChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_LEGGINGS);
SmithingTransformRecipe leggingsRecipe = new SmithingTransformRecipe(leggingsKey, leggings, NETHERITE_UPGRADE, WITHER_SKULL, leggingsChoice);
SmithingTransformRecipe leggingsRecipe = new SmithingTransformRecipe(leggingsKey, leggings, NETHERITE_UPGRADE, leggingsChoice, WITHER_SKULL);
getServer().addRecipe(leggingsRecipe);
ItemStack boots = this.getBoots();
NamespacedKey bootsKey = new NamespacedKey("fantasysmp.items", "witherite_boots");
RecipeChoice bootsChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_BOOTS);
SmithingTransformRecipe bootsRecipe = new SmithingTransformRecipe(bootsKey, boots, NETHERITE_UPGRADE, WITHER_SKULL, bootsChoice);
SmithingTransformRecipe bootsRecipe = new SmithingTransformRecipe(bootsKey, boots, NETHERITE_UPGRADE, bootsChoice, WITHER_SKULL);
getServer().addRecipe(bootsRecipe);
}
@@ -112,6 +115,51 @@ public class Witherite extends GenericGearSet implements Listener, CommandExecut
}
}
@Override
public ItemStack getSword() {
ItemStack item = super.getSword();
ItemMeta meta = item.getItemMeta();
meta.setItemModel(NamespacedKey.fromString("fantasysmp:witherite_sword"));
item.setItemMeta(meta);
return item;
}
@Override
public ItemStack getHelmet() {
ItemStack item = super.getHelmet();
ItemMeta meta = item.getItemMeta();
meta.setItemModel(NamespacedKey.fromString("fantasysmp:witherite_helmet"));
item.setItemMeta(meta);
return item;
}
@Override
public ItemStack getChestplate() {
ItemStack item = super.getChestplate();
ItemMeta meta = item.getItemMeta();
meta.setItemModel(NamespacedKey.fromString("fantasysmp:witherite_chestplate"));
item.setItemMeta(meta);
return item;
}
@Override
public ItemStack getLeggings() {
ItemStack item = super.getLeggings();
ItemMeta meta = item.getItemMeta();
meta.setItemModel(NamespacedKey.fromString("fantasysmp:witherite_leggings"));
item.setItemMeta(meta);
return item;
}
@Override
public ItemStack getBoots() {
ItemStack item = super.getBoots();
ItemMeta meta = item.getItemMeta();
meta.setItemModel(NamespacedKey.fromString("fantasysmp:witherite_boots"));
item.setItemMeta(meta);
return item;
}
public static void init() {}
public Witherite() {