1.20.4 struggles

This commit is contained in:
Luka de Vrij committed 2023-12-11 23:42:12 +01:00
1 parent 78ca4f0df1
commit c67697e5f9
16 files changed
+158 -121

No files matched your search

+1 -10
View File
@@ -117,7 +117,7 @@
<dependency>
<groupId>io.papermc.paper</groupId>
<artifactId>paper-api</artifactId>
<version>1.20.2-R0.1-SNAPSHOT</version>
<version>1.20.4-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
@@ -131,14 +131,5 @@
<version>7.0.9</version>
<scope>provided</scope>
</dependency>
<!-- NMS dependency -->
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot</artifactId>
<version>1.20.2-R0.1-SNAPSHOT</version>
<classifier>remapped-mojang</classifier>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
@@ -59,7 +59,7 @@ public class AdminCommandManager implements TabExecutor {
if (!(sender instanceof Player)) {
sender.sendMessage(Component.text("The console cannot perform these commands."));
return false; // TODO make this subcommand specific
return false; // TODO make this subcommand specific - quite hard; abstract subcommand has Player in signature
}
Player player = (Player) sender;
@@ -37,7 +37,7 @@ public final class PureKitPvP extends JavaPlugin {
// Has to be at the start because other class constructors use it
getConfig().options().copyDefaults();
saveDefaultConfig();
saveConfig();
//Kits config
KitConfig.setup();
@@ -108,7 +108,12 @@ public class DeathHandler implements Listener {
player.setFireTicks(0);
player.addPotionEffect(new PotionEffect(PotionEffectType.FIRE_RESISTANCE, 5, 1));
player.addPotionEffect(new PotionEffect(PotionEffectType.SATURATION, 10 , 1));
player.setHealth(20);
if (EventDataClass.doubleHealth){
player.setHealth(40);
} else {
player.setHealth(20);
}
}, 2L);
@@ -163,7 +163,7 @@ public class KitIcon {
"chiseled_sandstone",
"cut_sandstone",
"cobweb",
"grass",
"short_grass",
"fern",
"azalea",
"flowering_azalea",
@@ -78,11 +78,11 @@ public class LanguageConfig {
&rGain 1 XP level on kill
""");
defaults.put("PERKS_PERK_NOTORIETY", """
&r15% chance of gaining a sharpness level on each kill
&rwill be added to the item held
&rChance of gaining a sharpness level on each kill
&rChance is 100 - (25 * Sharpness Level) percent
""");
defaults.put("PERKS_PERK_NOTORIETY_MAX", "&eYou have reached the maximum Notoriety!");
defaults.put("PERKS_PERK_NOTORIETY_UPGRADE", "&eYour sharpness level has increased!");
defaults.put("PERKS_PERK_NOTORIETY_UPGRADE", "&eYour sharpness level has increased (chance of %CHANCE%%)!");
defaults.put("PERKS_PERK_ENDERMAGIC", """
&r30% chance of gaining an ender pearl on kill
""");
@@ -111,10 +111,10 @@ public class LanguageConfig {
&ryou dealt, as instant health
""");
defaults.put("PERKS_PERK_MARKSMAN", """
&r50% chance of gaining a power level on each bow kill
&rPower is added to the item held, if it's a bow
&rChance of 100 - (25 * Power level) percent to
&radd power to the item held, if it's a bow
""");
defaults.put("PERKS_PERK_MARKSMAN_UPGRADE","&eYour power level has increased!");
defaults.put("PERKS_PERK_MARKSMAN_UPGRADE","&eYour power level has increased (chance of %CHANCE%%)!");
defaults.put("PERKS_PERK_MARKSMAN_MAX","&eYou have reached the maximum power level!");
defaults.put("PERKS_PERK_APOLLO", """
&rYou get each arrow you hit on a player back
@@ -167,6 +167,7 @@ public class LanguageConfig {
""");
defaults.put("EVENTS_PICKUP_DESC", "Killed players drop their stuff!");
defaults.put("EVENTS_JUGGERNAUT_DESC", "Team up to kill the Juggernaut!");
defaults.put("EVENTS_DOUBLE_DESC", "All player health is doubled!");
defaults.put("SCOREBOARD_MAIN_TITLE", "&6PureKitPvP");
defaults.put("SCOREBOARD_PERSONAL_TITLE", "&6Personal Stats");
@@ -1,5 +1,6 @@
package me.lifelessnerd.purekitpvp.globalevents.events;
import me.lifelessnerd.purekitpvp.files.LanguageConfig;
import me.lifelessnerd.purekitpvp.globalevents.EventDataClass;
import me.lifelessnerd.purekitpvp.utils.PlayerUtils;
import net.kyori.adventure.text.Component;
@@ -28,7 +29,7 @@ public class DoubleHealthEvent extends AbstractEvent{
@Override
public Component getEventDescription() {
return Component.text(""); // TODO add lang defs
return LanguageConfig.lang.get("EVENTS_DOUBLE_DESC"); // TODO add lang defs
}
@Override
@@ -39,6 +40,7 @@ public class DoubleHealthEvent extends AbstractEvent{
for (Player player : players){
AttributeInstance attribute = player.getAttribute(Attribute.GENERIC_MAX_HEALTH);
attribute.setBaseValue(40.0D);
player.setHealth(40.0D);
}
startEndListener(null);
}
@@ -54,7 +56,8 @@ public class DoubleHealthEvent extends AbstractEvent{
Set<Player> players = PlayerUtils.getPlayersInWorld(plugin.getConfig().getString("world"));
for (Player player : players){
AttributeInstance attribute = player.getAttribute(Attribute.GENERIC_MAX_HEALTH);
attribute.setBaseValue(40.0D);
attribute.setBaseValue(20.0D);
player.setHealth(20.0D);
}
this.running = false;
}
@@ -29,6 +29,7 @@ public class DoubleHealthListeners implements Listener {
if (EventDataClass.doubleHealth){
AttributeInstance attribute = player.getAttribute(Attribute.GENERIC_MAX_HEALTH);
attribute.setBaseValue(40.0D);
player.setHealth(40.0D);
// TODO and set HP to be max instantly DO THIS EVERYWHERE
}
@@ -80,6 +80,8 @@ public class PerkCommand implements CommandExecutor {
kitItem.setItemMeta(kitItemMeta);
perksInventory.setItem(49, kitItem);
// Notoriety and marksman perk lore could be better if we replaceText with the config value; but then there
// would need to be edge cases below (if notoriety -> replace lore with value ) - dats ugly tho
//Fill perk slots with either empty or actual perk icon
for (int index = 20; index <= 24; index++){
@@ -10,7 +10,6 @@ import net.kyori.adventure.text.TextComponent;
import net.kyori.adventure.text.format.TextColor;
import net.kyori.adventure.text.format.TextDecoration;
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
import org.apache.commons.codec.language.bm.Lang;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.NamespacedKey;
@@ -6,7 +6,6 @@ import me.lifelessnerd.purekitpvp.files.LanguageConfig;
import me.lifelessnerd.purekitpvp.files.PerkData;
import me.lifelessnerd.purekitpvp.files.PlayerStatsConfig;
import me.lifelessnerd.purekitpvp.utils.ComponentUtils;
import net.minecraft.locale.Language;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
@@ -74,12 +73,14 @@ public class PerkFireHandler {
break;
case "NOTORIETY":
if(Math.random() <= 0.15) {
ItemStack weapon = player.getInventory().getItemInMainHand();
ItemMeta weaponMeta = weapon.getItemMeta();
if (weaponMeta == null){continue;} // If weapon is hand TODO maybe - check if it is a weapon?
int sharpnessLevel = weaponMeta.getEnchantLevel(Enchantment.DAMAGE_ALL);
ItemStack weapon = player.getInventory().getItemInMainHand();
ItemMeta weaponMeta = weapon.getItemMeta();
if (weaponMeta == null){continue;} // If weapon is hand TODO maybe - check if it is a weapon?
if (weapon.getType() == Material.BOW){continue;} // meh
int sharpnessLevel = weaponMeta.getEnchantLevel(Enchantment.DAMAGE_ALL);
double rnd = Math.random();
if(rnd * 100 <= (100 - plugin.getConfig().getInt("notoriety-chance-decrease") * sharpnessLevel)) {
if (plugin.getConfig().getInt("notoriety-maximum") != -1){
// So if the boundary is set to SOME value
if (sharpnessLevel >= plugin.getConfig().getInt("notoriety-maximum")){
@@ -91,7 +92,9 @@ public class PerkFireHandler {
weaponMeta.removeEnchant(Enchantment.DAMAGE_ALL);
weaponMeta.addEnchant(Enchantment.DAMAGE_ALL, sharpnessLevel + 1, true);
weapon.setItemMeta(weaponMeta);
player.sendMessage(LanguageConfig.lang.get("PERKS_PERK_NOTORIETY_UPGRADE"));
player.sendMessage(LanguageConfig.lang.get("PERKS_PERK_NOTORIETY_UPGRADE").
replaceText(ComponentUtils.replaceConfig("%CHANCE%",
String.valueOf(100 - plugin.getConfig().getInt("notoriety-chance-decrease") * sharpnessLevel))));
}
break;
case "ENDERMAGIC":
@@ -107,12 +110,15 @@ public class PerkFireHandler {
player.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, 200, 1));
break;
case "MARKSMAN":
if(Math.random() <= 0.5) {
ItemStack weapon = player.getInventory().getItemInMainHand();
ItemMeta weaponMeta = weapon.getItemMeta();
if (weapon.getType() != Material.BOW){continue;}
if (weaponMeta == null){continue;} // If weapon is hand
int powerLevel = weaponMeta.getEnchantLevel(Enchantment.ARROW_DAMAGE);
ItemStack weaponMarksman = player.getInventory().getItemInMainHand();
ItemMeta weaponMarksmanMeta = weaponMarksman.getItemMeta();
if (weaponMarksman.getType() != Material.BOW){continue;}
if (weaponMarksmanMeta == null){continue;} // If weapon is hand
int powerLevel = weaponMarksmanMeta.getEnchantLevel(Enchantment.ARROW_DAMAGE);
double rnd2 = Math.random();
if(rnd2 * 100 <= (100 - plugin.getConfig().getInt("notoriety-chance-decrease") * powerLevel)) {
if (plugin.getConfig().getInt("marksman-maximum") != -1){
// So if the boundary is set to SOME value
@@ -122,10 +128,12 @@ public class PerkFireHandler {
continue;
}
}
weaponMeta.removeEnchant(Enchantment.ARROW_DAMAGE);
weaponMeta.addEnchant(Enchantment.ARROW_DAMAGE, powerLevel + 1, true);
weapon.setItemMeta(weaponMeta);
player.sendMessage(LanguageConfig.lang.get("PERKS_PERK_MARKSMAN_UPGRADE"));
weaponMarksmanMeta.removeEnchant(Enchantment.ARROW_DAMAGE);
weaponMarksmanMeta.addEnchant(Enchantment.ARROW_DAMAGE, powerLevel + 1, true);
weaponMarksman.setItemMeta(weaponMarksmanMeta);
player.sendMessage(LanguageConfig.lang.get("PERKS_PERK_MARKSMAN_UPGRADE").
replaceText(ComponentUtils.replaceConfig("%CHANCE%",
String.valueOf(100 - plugin.getConfig().getInt("notoriety-chance-decrease") * powerLevel))));
}
break;
@@ -1,6 +1,8 @@
package me.lifelessnerd.purekitpvp;
import me.lifelessnerd.purekitpvp.utils.MyStringUtils;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Map;
@@ -10,12 +12,37 @@ public class sample {
public static void main(String[] args) {
Double doublet = 0.1;
Double inty = 23.0;
System.out.println(doublet);
System.out.println(mapStringToEnchantment("{CraftEnchantment[minecraft:knockback]=2, CraftEnchantment[minecraft:fire_aspect]=2}"));
}
public static String mapStringToEnchantment(String string){
//I {Enchantment:[minecraft:fire_protection, PROTECTION_FIRE]=4, Enchantment:[minecraft:infinity, INFINITY]=1}
StringBuilder result = new StringBuilder();
StringBuilder builder = new StringBuilder(string);
builder.deleteCharAt(0);
builder.deleteCharAt(string.length() - 2);
string = builder.toString();
String[] split = string.split("minecraft:");
for (int index = 1; index < split.length; index++){
String word = split[index];
String[] splitAgain = word.split(",");
String levelString = splitAgain[1];
String[] isolateLevel = levelString.split("=");
int level = Integer.parseInt(isolateLevel[isolateLevel.length - 1]);
word = splitAgain[0];
word = MyStringUtils.itemCamelCase(word);
result.append(word).append(level).append(" ");
}
return result.toString();
//Output: Fire Protection 4, Infinity 1
}
}
@@ -1,64 +1,64 @@
package me.lifelessnerd.purekitpvp.scoreboards;
import me.lifelessnerd.purekitpvp.utils.ComponentUtils;
import me.lifelessnerd.purekitpvp.utils.PlayerUtils;
import net.kyori.adventure.text.Component;
import net.minecraft.network.protocol.game.ClientboundTabListPacket;
import net.minecraft.server.level.ServerPlayer;
import org.bukkit.Bukkit;
import org.bukkit.craftbukkit.v1_20_R2.entity.CraftPlayer;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
import java.util.Set;
public class TabManager {
private Plugin plugin;
private Component header = Component.text("");
private Component footer = Component.text("");
public TabManager(Plugin plugin) {
this.plugin = plugin;
}
// CURRENTLY NOT IN USE
public void showTab(){
if(header == null && footer == null) return;
Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() {
@Override
public void run() {
// CURRENTLY NOT IN USE
net.minecraft.network.chat.Component headerTBS = ComponentUtils.toMojangComponent(header);
net.minecraft.network.chat.Component footerTBS = ComponentUtils.toMojangComponent(footer);
ClientboundTabListPacket packet = new ClientboundTabListPacket(headerTBS, footerTBS);
Set<Player> inWorld = PlayerUtils.getPlayersInWorld(plugin.getConfig().getString("world"));
if (inWorld.size() != 0){
for (Player player : inWorld){
CraftPlayer cPlayer = (CraftPlayer) player; // frick nms
ServerPlayer serverPlayer = cPlayer.getHandle();
serverPlayer.connection.send(packet);
}
}
}
}, 10, plugin.getConfig().getLong("tab-refresh-period"));
}
// CURRENTLY NOT IN USE
public void addHeader(Component header){
this.header = this.header.append(header).appendNewline();
}
public void addFooter(Component footer){
this.footer = this.footer.append(footer).appendNewline();
}
}
//package me.lifelessnerd.purekitpvp.scoreboards;
//
//
//import me.lifelessnerd.purekitpvp.utils.ComponentUtils;
//import me.lifelessnerd.purekitpvp.utils.PlayerUtils;
//import net.kyori.adventure.text.Component;
//import net.minecraft.network.protocol.game.ClientboundTabListPacket;
//import net.minecraft.server.level.ServerPlayer;
//import org.bukkit.Bukkit;
//import org.bukkit.craftbukkit.v1_20_R2.entity.CraftPlayer;
//import org.bukkit.entity.Player;
//import org.bukkit.plugin.Plugin;
//
//import java.util.Set;
//
//
//public class TabManager {
//
// private Plugin plugin;
// private Component header = Component.text("");
// private Component footer = Component.text("");
//
// public TabManager(Plugin plugin) {
// this.plugin = plugin;
// }
// // CURRENTLY NOT IN USE
// public void showTab(){
// if(header == null && footer == null) return;
//
// Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() {
//
//
// @Override
// public void run() {
//
// // CURRENTLY NOT IN USE
//
// net.minecraft.network.chat.Component headerTBS = ComponentUtils.toMojangComponent(header);
// net.minecraft.network.chat.Component footerTBS = ComponentUtils.toMojangComponent(footer);
//
// ClientboundTabListPacket packet = new ClientboundTabListPacket(headerTBS, footerTBS);
//
// Set<Player> inWorld = PlayerUtils.getPlayersInWorld(plugin.getConfig().getString("world"));
// if (inWorld.size() != 0){
// for (Player player : inWorld){
// CraftPlayer cPlayer = (CraftPlayer) player; // frick nms
// ServerPlayer serverPlayer = cPlayer.getHandle();
// serverPlayer.connection.send(packet);
// }
// }
//
//
// }
// }, 10, plugin.getConfig().getLong("tab-refresh-period"));
//
// }
// // CURRENTLY NOT IN USE
// public void addHeader(Component header){
// this.header = this.header.append(header).appendNewline();
// }
// public void addFooter(Component footer){
// this.footer = this.footer.append(footer).appendNewline();
// }
//}
@@ -115,14 +115,6 @@ public class ComponentUtils {
return textComponent;
}
public static net.minecraft.network.chat.Component toMojangComponent(@Nullable Component inputComponent){
if (inputComponent == null){
return net.minecraft.network.chat.Component.literal("");
}
String json = GsonComponentSerializer.gson().serialize(inputComponent);
return net.minecraft.network.chat.Component.Serializer.fromJson(json);
}
public static TextReplacementConfig replaceConfig(String find, String replace){
return replaceConfig(find, replace, 1);
}
@@ -26,13 +26,15 @@ public class MyStringUtils {
}
public static String mapStringToEnchantment(String string){
///TODO Enchantment has become CraftEnchantment - breaks everything?!
//I {Enchantment:[minecraft:fire_protection, PROTECTION_FIRE]=4, Enchantment:[minecraft:infinity, INFINITY]=1}
System.out.println(string);
//I {Enchantment:[minecraft:fire_protection, PROTECTION_FIRE]=4, Enchantment:[minecraft:infinity, INFINITY]=1}
StringBuilder result = new StringBuilder("");
StringBuilder result = new StringBuilder();
StringBuilder builder = new StringBuilder(string);
builder.deleteCharAt(0);
builder.deleteCharAt(string.length() -2);
builder.deleteCharAt(string.length() - 2);
string = builder.toString();
String[] split = string.split("minecraft:");
for (int index = 1; index < split.length; index++){
@@ -41,7 +43,7 @@ public class MyStringUtils {
String[] splitAgain = word.split(",");
String levelString = splitAgain[1];
String[] isolateLevel = levelString.split("=");
int level = Integer.parseInt(isolateLevel[isolateLevel.length - 1]); //HERE
int level = Integer.parseInt(isolateLevel[isolateLevel.length - 1]);
word = splitAgain[0];
word = MyStringUtils.itemCamelCase(word);
result.append(word).append(level).append(" ");
+7 -1
View File
@@ -50,11 +50,17 @@ loottable-message-percentage: 1
#Set to -1 if infinite
notoriety-maximum: -1
# Notoriety chance depends on sharpness level already on the item - upgrade chance is (100 - (%DECREASE% * Sharpness Level))
notoriety-chance-decrease: 25
#Marksman perk boundary
#If the marksman perk is too OP, restrict the maximum level of power that can be gained
#Set to -1 if infinite
marksman-maximum: -1
# Marksman chance depends on power level already on the item - upgrade chance is (100 - (%DECREASE% * Power Level))
marksman-chance-decrease: 25
#Default kill effect
default-kill-effect: "firework"
@@ -70,7 +76,7 @@ projectile-trail-period: 1
# Projectile trail count
# Amount of particles per spawn (also controlled by projectile-trail-period)
projectile-trail-count: 5
projectile-trail-count: 1
# Chicken prevention: kits with eggs might spawn chicken; when this is true they are prevented from spawning
chicken-prevention: true