feat: implement harvest damage calculation and update totem handling on player death
This commit is contained in:
34
README.md
34
README.md
@@ -1,34 +1,18 @@
|
||||
|
||||
git init
|
||||
git checkout -b main
|
||||
git add README.md
|
||||
git commit -m "first commit"
|
||||
git remote add origin https://gitea.hessj.de/administrator/MCPlugins.git
|
||||
git push -u origin main
|
||||
|
||||
|
||||
BISJETZT NEU: environmentex
|
||||
BUG: es haut die Backpacks ultra weit weg beim Tod
|
||||
ALLGEMEIN: recipes die custom items beinhalten werden nicht im crafting angezeigt (allgm. Bukkit problem)
|
||||
INFO: CustomItemIcon count: 22
|
||||
|
||||
IDEA: schere verschiedene versionen pferde/mule/cats/schafe/Axolotl/tropical etc?
|
||||
|
||||
|
||||
FIX: Infinity Bucket
|
||||
ADD: TOTEM BACKPACK LOOKUP
|
||||
|
||||
|
||||
cauldron concrete to web
|
||||
shulker preview SHIFT + Rechtsklick
|
||||
infinite water
|
||||
Armored Elytra
|
||||
TO RELEASE: HOPPER FILTER WAS DURCH DARF!
|
||||
TO RELEASE: cauldron concrete
|
||||
TO RELEASE: shulker preview SHIFT im inv Rechtsklick
|
||||
TO RELEASE: Armored Elytra
|
||||
TO RELEASE: waterbottle + sponge = empty bottle
|
||||
TO RELEASE: AFK Funktion
|
||||
TO RELEASE: Autocrafter
|
||||
VON WEBSITE NEHMEN: BÜCHERREGAL
|
||||
TO RELEASE: Infinity Bucket (wers glaubt)
|
||||
TO RELEASE: TOTEM
|
||||
|
||||
ALLGEMEIN: recipes die custom items beinhalten werden nicht im crafting angezeigt (allgm. Bukkit problem)
|
||||
|
||||
helper muss immer im Main sein.
|
||||
craftbukkit der hauptversion auch
|
||||
CUSTOM.zip ist ein backup des Server Resourcepacks
|
||||
TO RELEASE: TOTEM ADD: TOTEM BACKPACK LOOKUP + SHULKER? ABER NICHT SHULKER IN BACKPACK
|
||||
TO RELEASE: PIN Feature
|
||||
@@ -27,7 +27,6 @@ import net.kyori.adventure.text.Component;
|
||||
|
||||
public class BetterHopperListener implements Listener {
|
||||
Component inventoryname = Component.text("Items zum filtern:");
|
||||
//TODO: test if plugin works
|
||||
@EventHandler
|
||||
public void onBlockPlace(BlockPlaceEvent e) {
|
||||
if (App.main.checkFilterHopper(e.getItemInHand())) {
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package de.hessj.environmentex;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Iterator;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.EntityEffect;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.ShulkerBox;
|
||||
@@ -14,33 +16,18 @@ import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.PlayerInventory;
|
||||
import org.bukkit.inventory.meta.BlockStateMeta;
|
||||
import org.bukkit.persistence.PersistentDataType;
|
||||
import org.bukkit.potion.PotionEffect;
|
||||
import org.bukkit.potion.PotionEffectType;
|
||||
import de.hessj.helper.Helper;
|
||||
import net.kyori.adventure.text.Component;
|
||||
|
||||
public class BetterTotems implements Listener {
|
||||
|
||||
public boolean removeTotemFromShulker(ItemStack item) {
|
||||
BlockStateMeta blockMeta = (BlockStateMeta) item.getItemMeta();
|
||||
if (blockMeta.getBlockState() instanceof ShulkerBox) {
|
||||
ShulkerBox box = (ShulkerBox) blockMeta.getBlockState();
|
||||
Inventory inv = box.getSnapshotInventory();
|
||||
ItemStack totem = new ItemStack(Material.TOTEM_OF_UNDYING, 1);
|
||||
if (inv.containsAtLeast(totem, 1)) {
|
||||
inv.removeItem(new ItemStack[] { totem });
|
||||
box.update(true, false);
|
||||
blockMeta.setBlockState(box);
|
||||
item.setItemMeta(blockMeta);
|
||||
return true;
|
||||
}
|
||||
} else { // wenn einer von Backpacks
|
||||
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
ItemStack totem = new ItemStack(Material.TOTEM_OF_UNDYING, 1);
|
||||
Inventory temp_inv = Bukkit.createInventory(null, 9, Component.translatable("tempBackpack"));
|
||||
|
||||
@EventHandler(priority = EventPriority.LOWEST)
|
||||
public void onPlayerDamage(EntityDamageEvent event) {
|
||||
public void onPlayerDamage(EntityDamageEvent event) throws IOException {
|
||||
if (event.getEntity() instanceof Player) {
|
||||
Player player = (Player) event.getEntity();
|
||||
double pHealth = player.getHealth();
|
||||
@@ -48,41 +35,147 @@ public class BetterTotems implements Listener {
|
||||
if (event.getCause().equals(DamageCause.VOID)) {
|
||||
return;
|
||||
}
|
||||
if (pDamage >= pHealth) {
|
||||
if (pHealth - pDamage <= 0) {
|
||||
PlayerInventory pInv = player.getInventory();
|
||||
ItemStack totem = new ItemStack(Material.TOTEM_OF_UNDYING, 1);
|
||||
boolean hasTotem = pInv.containsAtLeast(totem, 1);
|
||||
boolean hasShulkerTotem = false;
|
||||
Iterator<ItemStack> var17;
|
||||
if (!hasTotem) {
|
||||
if (hasTotem) {
|
||||
pInv.removeItem(totem);
|
||||
resurrect(event, player);
|
||||
} else {
|
||||
var17 = pInv.iterator();
|
||||
|
||||
while (var17.hasNext()) {
|
||||
ItemStack item = (ItemStack) var17.next();
|
||||
if (item != null && (item.getType().toString().endsWith("SHULKER_BOX") /* || BACKPACK! */)) {
|
||||
hasShulkerTotem = removeTotemFromShulker(item);
|
||||
break;
|
||||
|
||||
if (item != null && item.hasItemMeta()
|
||||
&& item.getItemMeta().getPersistentDataContainer().has(App.main.nsk, PersistentDataType.STRING)
|
||||
&& (item.getItemMeta().getPersistentDataContainer().get(App.main.nsk, PersistentDataType.STRING)
|
||||
.equals("R3S_kleiner_Rucksack"))) {
|
||||
|
||||
App.main.log("bin drin + k");
|
||||
temp_inv = Bukkit.createInventory(null, 9, Component.translatable("tempBackpack"));
|
||||
ItemStack[] is;
|
||||
|
||||
is = Helper.itemStackArrayFromBase64(
|
||||
App.main.getConfig().getString(player.getUniqueId() + ".backpack.contents.leatherbackpack"));
|
||||
temp_inv.setContents(is);
|
||||
if (temp_inv.containsAtLeast(totem, 1)) {
|
||||
temp_inv.removeItem(totem);
|
||||
resurrect(event, player);
|
||||
App.main.getConfig().set(player.getUniqueId() + ".backpack.contents.leatherbackpack",
|
||||
Helper.itemStackArrayToBase64(temp_inv.getContents()));
|
||||
App.main.saveConfig();
|
||||
App.main.reloadConfig();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (item != null && item.hasItemMeta()
|
||||
&& item.getItemMeta().getPersistentDataContainer().has(App.main.nsk2, PersistentDataType.STRING)
|
||||
&& (item.getItemMeta().getPersistentDataContainer()
|
||||
.get(App.main.nsk2, PersistentDataType.STRING)
|
||||
.equals("R3S_Rucksack"))) {
|
||||
|
||||
App.main.log("bin drin + r");
|
||||
temp_inv = Bukkit.createInventory(null, 18, Component.translatable("tempBackpack"));
|
||||
ItemStack[] is;
|
||||
|
||||
is = Helper.itemStackArrayFromBase64(
|
||||
App.main.getConfig().getString(player.getUniqueId() + ".backpack.contents.ironbackpack"));
|
||||
temp_inv.setContents(is);
|
||||
if (temp_inv.containsAtLeast(totem, 1)) {
|
||||
temp_inv.removeItem(totem);
|
||||
resurrect(event, player);
|
||||
App.main.getConfig().set(player.getUniqueId() + ".backpack.contents.ironbackpack",
|
||||
Helper.itemStackArrayToBase64(temp_inv.getContents()));
|
||||
App.main.saveConfig();
|
||||
App.main.reloadConfig();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (item != null && item.hasItemMeta()
|
||||
&& item.getItemMeta().getPersistentDataContainer().has(App.main.nsk3, PersistentDataType.STRING)
|
||||
&& (item.getItemMeta().getPersistentDataContainer()
|
||||
.get(App.main.nsk3, PersistentDataType.STRING)
|
||||
.equals("R3S_großer_Rucksack"))) {
|
||||
|
||||
App.main.log("bin drin + g");
|
||||
temp_inv = Bukkit.createInventory(null, 27, Component.translatable("tempBackpack"));
|
||||
ItemStack[] is;
|
||||
|
||||
is = Helper.itemStackArrayFromBase64(
|
||||
App.main.getConfig().getString(player.getUniqueId() + ".backpack.contents.goldbackpack"));
|
||||
temp_inv.setContents(is);
|
||||
if (temp_inv.containsAtLeast(totem, 1)) {
|
||||
temp_inv.removeItem(totem);
|
||||
resurrect(event, player);
|
||||
App.main.getConfig().set(player.getUniqueId() + ".backpack.contents.goldbackpack",
|
||||
Helper.itemStackArrayToBase64(temp_inv.getContents()));
|
||||
App.main.saveConfig();
|
||||
App.main.reloadConfig();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (item != null && item.hasItemMeta()
|
||||
&& item.getItemMeta().getPersistentDataContainer().has(App.main.nsk4, PersistentDataType.STRING)
|
||||
&& (item.getItemMeta().getPersistentDataContainer()
|
||||
.get(App.main.nsk4, PersistentDataType.STRING)
|
||||
.equals("R3S_riesiger_Rucksack"))) {
|
||||
|
||||
App.main.log("bin drin + riesig");
|
||||
temp_inv = Bukkit.createInventory(null, 36, Component.translatable("tempBackpack"));
|
||||
ItemStack[] is;
|
||||
|
||||
is = Helper.itemStackArrayFromBase64(
|
||||
App.main.getConfig().getString(player.getUniqueId() + ".backpack.contents.diamondbackpack"));
|
||||
temp_inv.setContents(is);
|
||||
if (temp_inv.containsAtLeast(totem, 1)) {
|
||||
temp_inv.removeItem(totem);
|
||||
resurrect(event, player);
|
||||
App.main.getConfig().set(player.getUniqueId() + ".backpack.contents.diamondbackpack",
|
||||
Helper.itemStackArrayToBase64(temp_inv.getContents()));
|
||||
App.main.saveConfig();
|
||||
App.main.reloadConfig();
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (item != null && (item.getType().toString().endsWith("SHULKER_BOX"))) {
|
||||
|
||||
BlockStateMeta blockMeta = (BlockStateMeta) item.getItemMeta();
|
||||
if (blockMeta.getBlockState() instanceof ShulkerBox) {
|
||||
ShulkerBox box = (ShulkerBox) blockMeta.getBlockState();
|
||||
Inventory inv = box.getSnapshotInventory();
|
||||
|
||||
if (inv.containsAtLeast(totem, 1)) {
|
||||
inv.removeItem(new ItemStack[] { totem });
|
||||
box.update(true, false);
|
||||
blockMeta.setBlockState(box);
|
||||
item.setItemMeta(blockMeta);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (hasTotem || hasShulkerTotem) {
|
||||
try {
|
||||
player.getInventory().removeItem(new ItemStack[] { totem });
|
||||
} finally {
|
||||
event.setDamage(0.0D);
|
||||
player.setHealth(5);
|
||||
}
|
||||
|
||||
player.addPotionEffect(new PotionEffect(PotionEffectType.ABSORPTION, 5 * 20, 2));
|
||||
player.addPotionEffect(new PotionEffect(PotionEffectType.REGENERATION, 45 * 20, 2));
|
||||
player.addPotionEffect(new PotionEffect(PotionEffectType.FIRE_RESISTANCE, 40 * 20, 1));
|
||||
player.addPotionEffect(new PotionEffect(PotionEffectType.WATER_BREATHING, 5 * 20, 1));
|
||||
player.playEffect(EntityEffect.PROTECTED_FROM_DEATH);
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private void resurrect(EntityDamageEvent event, Player player) {
|
||||
event.setDamage(0.0D);
|
||||
player.setHealth(5);
|
||||
player.addPotionEffect(new PotionEffect(PotionEffectType.ABSORPTION, 5 * 20, 2));
|
||||
player.addPotionEffect(new PotionEffect(PotionEffectType.REGENERATION, 45 * 20, 2));
|
||||
player.addPotionEffect(new PotionEffect(PotionEffectType.FIRE_RESISTANCE, 40 * 20, 1));
|
||||
if (event.getCause().equals(DamageCause.DROWNING)) {
|
||||
player.addPotionEffect(new PotionEffect(PotionEffectType.WATER_BREATHING, 5 * 20, 1));
|
||||
}
|
||||
player.playEffect(EntityEffect.PROTECTED_FROM_DEATH);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -273,6 +273,28 @@ public class EnvironmentExListeners implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
public static int harvestDMG(Material weapon) {
|
||||
|
||||
double perc = 0.70;
|
||||
|
||||
if (weapon == Material.WOODEN_HOE) {
|
||||
perc = 0.70;
|
||||
} else if (weapon == Material.STONE_HOE) {
|
||||
perc = 0.75;
|
||||
} else if (weapon == Material.IRON_HOE) {
|
||||
perc = 0.80;
|
||||
} else if (weapon == Material.GOLDEN_HOE) {
|
||||
perc = 0.85;
|
||||
} else if (weapon == Material.DIAMOND_HOE) {
|
||||
perc = 0.90;
|
||||
} else if (weapon == Material.NETHERITE_HOE) {
|
||||
perc = 0.95;
|
||||
}
|
||||
|
||||
Random rand = new Random();
|
||||
return (rand.nextDouble() < perc) ? 0 : 1;
|
||||
}
|
||||
|
||||
void harvest(int radius, PlayerInteractEvent e) {
|
||||
e.setCancelled(true);
|
||||
Block middle = e.getClickedBlock();
|
||||
@@ -311,7 +333,7 @@ public class EnvironmentExListeners implements Listener {
|
||||
ItemStack is = e.getPlayer().getInventory().getItemInMainHand();
|
||||
ItemMeta meta = is.getItemMeta();
|
||||
Damageable d = (Damageable) meta;
|
||||
d.setDamage(d.getDamage() + 1);
|
||||
d.setDamage(d.getDamage() + harvestDMG(is.getType()));
|
||||
is.setItemMeta(meta);
|
||||
middle.setType(cropM);
|
||||
}
|
||||
@@ -378,7 +400,7 @@ public class EnvironmentExListeners implements Listener {
|
||||
ItemStack is = e.getPlayer().getInventory().getItemInMainHand();
|
||||
ItemMeta meta = is.getItemMeta();
|
||||
Damageable d = (Damageable) meta;
|
||||
d.setDamage(d.getDamage() + 1);
|
||||
d.setDamage(d.getDamage() + harvestDMG(is.getType()));
|
||||
is.setItemMeta(meta);
|
||||
}
|
||||
}
|
||||
@@ -819,8 +841,6 @@ public class EnvironmentExListeners implements Listener {
|
||||
@EventHandler
|
||||
public void onDeath(PlayerDeathEvent e) throws IllegalArgumentException, IOException {
|
||||
e.deathMessage(null);
|
||||
ItemStack itemStack[] = Helper.itemStackArrayFromBase64(
|
||||
"rO0ABXVyACFbTG9yZy5idWtraXQuaW52ZW50b3J5Lkl0ZW1TdGFjazuWEWyPcqQUzwIAAHhwAAAACXBwcHBwcHBwcA==");
|
||||
for (ItemStack is : e.getPlayer().getInventory().getContents()) {
|
||||
if (is == null || !is.hasItemMeta() || is.getItemMeta().getPersistentDataContainer() == null) {
|
||||
// return;
|
||||
@@ -842,7 +862,7 @@ public class EnvironmentExListeners implements Listener {
|
||||
}
|
||||
|
||||
App.main.getConfig().set(e.getPlayer().getUniqueId() + ".backpack.contents.leatherbackpack",
|
||||
Helper.itemStackArrayToBase64(itemStack));
|
||||
Helper.itemStackArrayToBase64(new ItemStack[] {}));
|
||||
|
||||
App.main.saveConfig();
|
||||
}
|
||||
@@ -860,7 +880,7 @@ public class EnvironmentExListeners implements Listener {
|
||||
|
||||
}
|
||||
App.main.getConfig().set(e.getPlayer().getUniqueId() + ".backpack.contents.ironbackpack",
|
||||
Helper.itemStackArrayToBase64(itemStack));
|
||||
Helper.itemStackArrayToBase64(new ItemStack[] {}));
|
||||
App.main.saveConfig();
|
||||
}
|
||||
} else if (is.getItemMeta().getPersistentDataContainer().has(App.main.nsk3,
|
||||
@@ -878,7 +898,7 @@ public class EnvironmentExListeners implements Listener {
|
||||
|
||||
}
|
||||
App.main.getConfig().set(e.getPlayer().getUniqueId() + ".backpack.contents.goldbackpack",
|
||||
Helper.itemStackArrayToBase64(itemStack));
|
||||
Helper.itemStackArrayToBase64(new ItemStack[] {}));
|
||||
App.main.saveConfig();
|
||||
}
|
||||
} else if (is.getItemMeta().getPersistentDataContainer().has(App.main.nsk4,
|
||||
@@ -896,7 +916,7 @@ public class EnvironmentExListeners implements Listener {
|
||||
|
||||
}
|
||||
App.main.getConfig().set(e.getPlayer().getUniqueId() + ".backpack.contents.diamondbackpack",
|
||||
Helper.itemStackArrayToBase64(itemStack));
|
||||
Helper.itemStackArrayToBase64(new ItemStack[] {}));
|
||||
App.main.saveConfig();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -173,7 +173,6 @@ public class ExpBottleListener implements Listener {
|
||||
public void onDispense(BlockDispenseEvent e) {
|
||||
if (e.getItem().getType() == Material.POTION && e.getBlock().getType() == Material.DISPENSER) {
|
||||
PotionMeta pm = (PotionMeta) e.getItem().getItemMeta();
|
||||
//TODO: check if working after method replacement
|
||||
if (pm.getBasePotionType() == PotionType.WATER) {
|
||||
Location loc = e.getBlock().getLocation();
|
||||
|
||||
|
||||
@@ -17,7 +17,6 @@ import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class PinFeature implements TabCompleter {
|
||||
//TODO: add to webpage
|
||||
public static File pinYml = new File(App.main.getDataFolder() + "/pins.yml");
|
||||
public static FileConfiguration pinConfig = YamlConfiguration.loadConfiguration(pinYml);
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user