#help-development
1 messages ยท Page 1388 of 1
I'm look at the source of a plugin. He created a DataWatcherObject with id 17 and then he has modified the DataWatcher.Item associated
I am trying to make my scoreboard show, yet it wont.
Interesting. You would probably have to trace back what DataWatcherObject is associated with id 17
tho that is a pain to begin with
class SaplingScoreboard {
public static void createBoard() {
ScoreboardManager manager = Bukkit.getScoreboardManager();
org.bukkit.scoreboard.Scoreboard board = manager.getNewScoreboard();
Objective obj = board.registerNewObjective("Saplings", "", "Saplings Placed");
obj.setDisplaySlot(DisplaySlot.SIDEBAR);
}
}```
Then, I call it inside of the main file
new SaplingScoreboard().createBoard();
As it isn't the main scoreboard you need to actively set it on each player that should receive it
How can I set it to everyone?
declaration: package: org.bukkit.entity, interface: Player
any idea why this isint working?
ERROR:
[00:08:01 WARN]: [Hub] Task #20 for Hub v1.0-SNAPSHOT generated an exception
java.lang.NullPointerException
at me.zoibox.hub.hub.scoreboard.ScoreboardHandler$1.run(ScoreboardHandler.java:68) ~[?:?]
at org.bukkit.craftbukkit.v1_8_R3.scheduler.CraftTask.run(CraftTask.java:71) ~[spigot.jar:git-Spigot-db6de12-18fbb24]
at org.bukkit.craftbukkit.v1_8_R3.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:350) [spigot.jar:git-Spigot-db6de12-18fbb24]
at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:723) [spigot.jar:git-Spigot-db6de12-18fbb24]
at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:374) [spigot.jar:git-Spigot-db6de12-18fbb24]
at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:654) [spigot.jar:git-Spigot-db6de12-18fbb24]
at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:557) [spigot.jar:git-Spigot-db6de12-18fbb24]
at java.base/java.lang.Thread.run(Thread.java:834) [?:?]
>
CODE:
pretty sure vault api is not at version 1.16.5-R0-SNAPSHOT @sharp bough
^^
oh yea
that was just me testing
its works now sorry
it didint work earlier so i tried that
Which line is 68?
player.getScoreboard().getTeam("message").setSuffix(playerCount(player));
maybe because there is no team called message ?
check the code
m8
what ever your weird af scoreboard framework is
a row would, for me at least, indicate a score
not a team
public static class Row {
@Getter private final ScoreboardUtil scoreboard;
private Team team;
@Getter private final int rowInScoreboard;
@Getter private String message;
public Row(ScoreboardUtil sb, String message, int row){
this.scoreboard = sb;
this.rowInScoreboard = row;
this.message = message;
}
public void setMessage(String message){
this.message = message;
if(scoreboard.finished){
final String[] parts = splitStringWithChatcolorInHalf(message);
this.team.setPrefix(parts[0]);
this.team.setSuffix(parts[1]);
}
}
public @Nullable Row addRow(String message){
if(this.finished){
new NullPointerException("Can not add rows if scoreboard is already finished").printStackTrace();
return null;
}
try{
final Row row = new Row(this, message, rows.length);
this.rowCache.add(row);
return row;
}catch(Exception e){
return null;
}
}
public void finish(){
if(this.finished){
new NullPointerException("Can not finish if scoreboard is already finished").printStackTrace();
return;
}
this.finished = true;
for(int i=rowCache.size()-1; i>=0; i--){
final Row row = rowCache.get(i);
final Team team = this.bukkitScoreboard.registerNewTeam(name + "." + criterion + "." + (i+1));
team.addEntry(ChatColor.values()[i] + "");
this.obj.getScore(ChatColor.values()[i] + "").setScore(rowCache.size()-i);
row.team = team;
row.setMessage(row.message);
}
this.rows = rowCache.toArray(new Row[rowCache.size()]);
}
you write this code yourself ?
nop
ah
well, you can tell that it registers that team
with name + "." + criterion + "." + (i+1)
not just name
Well good luck manually building the team name
So i might be rlly stupid (would not be the first time)
But I have this code
private final BungeeMain plugin;
public MySQL(BungeeMain main) {
this.plugin = main;
}
And when using plugin I get the error that it hasnt been initialised (plugin)
So okay, just initialise it, but doing that i get an error that the class has already been initialised.
And ive used that code before and thats working fine, idk if im just that stupid or if its smth with bungeecord or whatever, but im rlly confused
@crude charm what is your ide ?
intelliJ
ah ok
depend injection
nvm
its main
im dumb
Are you using an instance of that class, or trying to use a static method?
using an instance
are you doing something like new MySQL(new BungeeMain())
trying to get main I think
I believe it would be static abuse otherwise
not abuse
In the main class?
private void init() {
this.SQL = new MySQL(this);
}
ah rip
HOW DARE YOU
?
you dont know
what ur main class is
...
OMG
what are you talking about mate xD
im confused
ftw pretty sure the enable method is called onEnable in bungeecord api
idk zoi is not having their best day xD
lmfao
do you have a stack trace @toxic mesa
Hello, Im having some trouble adding in bstats to my plugin as a dependency, Ive followed the instructions and I still cant use methods? am I doing smth wrong?
yes just a second
Your constructor for SQL is correct, as is your init class in yoru main (if you actually call it. So you are going to have to explain your issue better as your plugin field can;t be uninitialized unless you are calling somethign staticly
Does it exists a website were have been documented the existing datawatcherobjects?
NMS code is basically undocumented
Ok, thanks. I will figure out
public void onEnable() {
//Commands
this.getCommand("coinflip").setExecutor(new Coinflip());
//Events
getServer().getPluginManager().registerEvents(new Coinflip(), this);
setupEconomy();
FileManager.InitFiles();
Coinflip.InitGUI();
}
private boolean setupEconomy() {
if (getServer().getPluginManager().getPlugin("Vault") == null) {
return false;
}
RegisteredServiceProvider<Economy> rsp = getServer().getServicesManager().getRegistration(Economy.class);
if (rsp == null) {
return false;
}
econ = rsp.getProvider();
return econ != null;
}```
did i do something wrong there? cuz when i try to use
double PlayerMoney = Main.econ.getBalance(p);
i get null
Yes, its not Main, its this.plugin
Okay, so ive got this in my MySQL class
private final BungeeMain plugin;
public MySQL(BungeeMain main) {
this.plugin = main;
}
And this in main class
private MySQL SQL;
private void init() {
this.SQL = new MySQL(this);
}
calling the init in onEnable of course
So when i use something like this in the MySQL class:
private String host = plugin.getConfig().getString("host");
I get an error in my IDE "the blank final field plugin may not have been initialized"
And idk why
@toxic mesa do you have another constructor ?
the MySQL class
where are you using plugin.getConfig()? show the method. It has to be a static method to show that error
alrighty hold on a sec, uploading methods and the MySQL class
?paste
^^
https://pastebin.com/yuQYMyrw
MySQL class ^^
Pastebin.com is the number one paste tool since 2002. Pastebin is a website where you can store text online for a set period of time.
public Configuration getConfig() {
try {
Configuration configuration = ConfigurationProvider.getProvider(YamlConfiguration.class).load(new File(getDataFolder(), "config.yml"));
return configuration;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
#getConfig method in the main class, it does actually works as ive used it in the onEnable to check if that was the problem
๐
ah, you intializre all yoru fields in yoru class body
move them all into the constructor
wait how does that make a difference
your plugin is not set when the class is created
static fields are initialized when the class it loaded and non static ones are initialized prior to the object creation
so you are essential accesing the plugin field before you set it through the constructor
Yeah okay so when they are initialized they dont have the plugin object yet
am i understanding that correctly?
yes
yus
define the field and then set them in your constructor
does anyone have a cf plugin i can see?
cf?
CoinFlip
coinflip
anything?
@Override
public void onEnable() {
System.out.println("One, two, buckle my shoe.");
getServer().getPluginManager().registerEvents(new SaplingClass(), this);
if (!Bukkit.getOnlinePlayers().isEmpty())
for (Player online : Bukkit.getOnlinePlayers()) {
new SaplingScoreboard();
SaplingScoreboard.createBoard(online);
}
}
public void onJoin(PlayerJoinEvent event) {
SaplingScoreboard.createBoard(event.getPlayer());
}```
idk how does your pom.xml look
I did this in the main java file and I still do not see the scoreboard
and also this
class SaplingScoreboard {
public static void createBoard(Player player) {
ScoreboardManager manager = Bukkit.getScoreboardManager();
org.bukkit.scoreboard.Scoreboard board = manager.getNewScoreboard();
Objective obj = board.registerNewObjective("Saplings", "", "Saplings Placed");
obj.setDisplaySlot(DisplaySlot.SIDEBAR);
player.setScoreboard(board);
}
}```
I put that above the public void onJoin correct?
alright
Is there a list of what dataWatcherItems a player can store?
getServer().getPluginManager().registerEvents(new SaplingClass(), this);```
Should be
getServer().getPluginManager().registerEvents(this, this);```
But there is a separate file
I want to edit a package with chunk, but for each player I want to send a different package with one chunk but when I use ProtocolLib I have bugs (not in console but sometimes players get kicked or chunk edits incorrectly). Everything works perfectly for one player. I am convinced that it is 99.9% of ProtocolLib's fault
Still did not work.
however
SOMEHOW
this is too many chars
also the runnable is giving me a null pointer
:/
@eternal night I'm struggling... Do you know a method to figure out what is used for a value of a datawatcheritem?
๐ข
like, the entity pose
@crude charm sorry your code is a little bigger let me read through it
Let me explain, I want to know what that the data is used for
data watcher holds meta data about an entity. Like current entity pose or bed position for a player
To figure it out do I need to play the game until the data change?
@crude charm what lines error for you o.O score entries are hard limited to 40 chars on server side
@cold field Well you would need to cause an update to one of the tracked values.
E.g. the player data watcher changes when you sleep in a bed
the runnable is throwing a null pointer, that isn't the main issue as I can just catch it. However, when I try to join I cant because it says too many chars
Is this the only way?
I don't know all the values that are tracked by the data watcher ๐
We are nuking you xD
Hi i am trying to block players from moving items in player inventory or hotswap but it does this like i can move it for first and then i cant it only happens with swap with keyboard? my listener: https://paste.md-5.net/lipedemeyu.cs and my config: https://paste.md-5.net/tekugadize.bash
1.8
yikes
you may be having troubles with the prefix length
I think 1.8 had some very low team prefix/suffix caps
String playerCount(Player player){ return PlaceholderAPI.setPlaceholders(player, "%bungee_total%"); }
Monitor InventoryClickEvent and InventoryMoveItemEvent
okay
would it take less if I register it when I need it
he ? no. Your prefix is a string of 18 characters
like new PlaceHolderAPI.setPlaceHolder(e.getPlayer, "%bungee_total%");
you have 16 chars raw string and two chars from the chat colour
1.8 life
I don't care much for it
lol
I have to use it tho thats the annoying thing
thinking of working on a big rpg project
gonna do that in 1.16
Pretty sure you won't get around the client cap of 16 chars in 1.8 tho
the InventoryMoveItemEvent doesnt do anything tried debug and nothing
well
umm
fuck
so
like
Good luck ๐
and whats the error youre getting or @crude charm
too many chars
show me code and error
its very easy
ByteArrayDataOutput out = ByteStreams.newDataOutput();
out.writeUTF("PlayerCount");
out.writeUTF("ALL");
player.sendPluginMessage(instance, "BungeeCord", out.toByteArray());
oh
The home of Spigot a high performance, no lag customized CraftBukkit Minecraft server API, and BungeeCord, the cloud server proxy.
ik
I made a util for it and havent touched it since
xdd
lmfao
and then do this in main class getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord");
okay
@eternal night I analyzed whenever the data is updated And it turns out that whenever the player login it is set with a byte of value 127
what a useful errror, doesent even tell me what line to look ๐
fuck in dumb
hisufhsiufhsfiush
today really ain't your day xD
why was I looking at the start or the error
at me.zoibox.hub.hub.scoreboard.ScoreboardHandler.lambda$buildScoreboard$0(ScoreboardHandler.java:45)?
onlinePlayers.setSuffix((Hub.secondColour + bungeeChannelApi.getPlayerCount("ALL").toString()));
yeah you may either wanna join that completable future
or thenAccept it
xD
@cold field okay ? what are you even trying to do I am confusion
I was reading the source code of this plugin
read line 55
how do you join a completeable future lmfao completeablefuture.rip lmfao. its 3am in my gaming chair
@crude charm this is my scoreboard function class try it
ig you just need to edit the configs and things
if you never try you never know
do you have any idea why he is doing it?
I think that might be the skin part byte
@eternal night
synchronized (callbackMap) {
callbackMap.compute("PlayerCount-" + serverName, this.computeQueueValue(future));
}
this is throwing the same error :/
ooof, just google it xD
public CompletableFuture<Integer> getPlayerCount(String serverName) {
Player player = getFirstPlayer();
CompletableFuture<Integer> future = new CompletableFuture<>();
synchronized (callbackMap) {
callbackMap.compute("PlayerCount-" + serverName, this.computeQueueValue(future));
}
ByteArrayDataOutput output = ByteStreams.newDataOutput();
output.writeUTF("PlayerCount");
output.writeUTF(serverName);
player.sendPluginMessage(this.plugin, "BungeeCord", output.toByteArray());
return future;
}
what is computeQueueValue
private BiFunction<String, Queue<CompletableFuture<?>>, Queue<CompletableFuture<?>>> computeQueueValue(CompletableFuture<?> queueValue) {
return (key, value) -> {
if (value == null) value = new ArrayDeque<CompletableFuture<?>>();
value.add(queueValue);
return value;
};
}
jesus
lmfao ikr
why do this to yourself
idk ๐ช
lmfao
What keywords do you used?
what one
no the google part was for zoi
ahn ok
ajahahhahahah
aisdhfdsifgfhdsighsd guhim so dumb
sfuish
are u making what I think ur making ๐คญ
a speedrun auto world regen plugin
no sorry I dont
its 3am
@cold field debugged a bit, it is infact the data id for the skin parts
Wow how?
IntelliJ debugging of the papermc source code
pretty neat for debugging the server internals
was gonna make one on alot larger of a scale. Like making and deleting whole servers, cloud, settings, inbuilt timer and ALOT MORE
so yeah, that line of code is basically saying "display all the skin parts of the skin"
i'd actually need cloud
โค๏ธ
you should probably use ur own thread pool with io it doesnt block the bukkit schedulers thread pool but ye this is nitpick
oh yeah nvm maybe its a cached one
I am having an issue with my plugin instance being null, causing errors regarding my config. Any suggestions on how to fix it? I would appreciate any constructive criticism about how janky my code is.
https://paste.md-5.net/zifoxiloce.java - Config Class
https://paste.md-5.net/dekuxogeju.java - Main Class
https://paste.md-5.net/uyaketuxut.sql - Error Stack Trace (idk y auto to sql)
(I removed alot of code that isnt related to the issue to help with readability)
why are you doing this
if you want it in a file thats not config.yml you can use galaxylib's config handler
or literally any other config handler
this ones just minimal
LIne 17 of your main calls Config before you have initialized the instance field
does .contains of a HashSet work on Locations or blocks?
yea but I would recommend creating ur own Location class and then use that instead
ty for your constructive criticism, your method is much cleaner and mean I do less work
ty for helping me find the issue
because it makes sense
love the super descriptive javadoc
dont wanna call reloadConfig when you initalize it
yes of course
/**
* Save config.
*/
rate this one
/**
* <h2>DO NOT REMOVE THIS HEADER</h2>
*
* Config class.
* From library GalaxyLib by imaginedev.
*
* Documentation:
* https://imaginedevmc.github.io/GalaxyLib/
*
* Repository:
* https://www.github.com/imaginedevMC/GalaxyLib/
*
* @author imaginedev
*/
Anyone know a good way to "lock" a player?
methods i tried:
- cancelling the move event: works but causes rubberbanding
- setting the spectator target for the player to a specific entity: works and has a clean "lock" but doesn't allow the player to look around and requires entity control (hard to check when players leave the entity etc)
- setting the entity as passenger of another entity: works but causes a sitting pose. Prefer to not have that.
Suggestions?
you literally have to cancel the move event
its effectively equal to null alrd
no need to explicitly put it
eh
I know you can yet when executing it, the player is not locked in a clean way. They cannot move, correct, but they will always move a little bit and get teleported back.
yes but why does this matter?
I do not believe there is any way to do it without the caveats you described
is better question
you could add slowness but that will mess with the FOV
oh lord
that has the same effect with more steps ๐
isn't this really resource intensive?
that would work. But it does not solve the teleportation + it is actually ineffective as setting the event.setTo() is the method you are supposed to use to teleport inside of the move event ๐
because wouldn't you run that in a loop?
why
its literally just cancelling the event
Yes but he wants it to be "clean"
ie not rubberbanding
i thought he wanted to cancel move
that doesnt solve rubberbanding
which is if I am not mistaken is strictly client side
rubberbanding is client side. Visual issue
you're just cancelling the event in more steps
what I need is a method to prevent a player from moving camera angle / position (preferably need both versions)
if you want it to be smooth you gotta calculate a vector and make the player move that way
which is just unneccesary imo
I know you can fix it with player#setSpectatorTarget() but if possible, I would prefer another way as this is a big workaround
well making them spectate an entity has that effect
let them rubberband
I do not see any other solution
im currently making a plugin to change skin texture of a player, but idk what the best way to reload skin view for other player and for self
if anyone know pls
I am sorry but that is not possible. The reason I need this is for cinematic reasons. The smoothness is literally the most important part
so use spectator target and/or vectors
is it too much of an issue to let them spectate an armour stand? they arenโt affected by physics
it is not until you start by telporting players and spectating positions around
setting spectatortargets that are further than 8 blocks away have undefined results
1: ok i'm unfamiler with furance inventory how will i make a functional one
2: any tips for understand source and be better at developing things?
hmmโฆ well unfortunately I donโt know if any other solution
hmmm, ill have to check some things then ๐ค
I have done it before with a custom spigot fork but I am really not planning on doing that again ...
not making use of @see or @url (i think it's a thing??)
should @see to both the docs and repo
Does anybody know why these two string are not counted as being the same?
bakedcake5941 bakedcake5941
can you give the code you use to compare them?
I'm making the custom name of the player to a projectile and then using that to check if the player should be damaged, but for some reason it doesn't count them being the same
if (event.getDamager().getCustomName() == event.getEntity().getCustomName())
event.getDamager().getCustomName() returns bakedcake5941 as well as event.getEntity().getCustomName()
.equals()
yup .equals () is better for string
if (event.getDamager().getCustomName().intern() == event.getEntity().getCustomName().intern()) ๐คก
anyone know pls ?
idk packets might be essential
- Remove player from everyones view using
new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.REMOVE_PLAYER, new EntityPlayer[]{player})) - Add player again using
new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.ADD_PLAYER, new EntityPlayer[]{player})
In spigot there is no api way of doing that. I know that a certain fork of spigot has a method to handle that.
@safe granite
Ok nice smile is here good bye folks
lul
I am not needed (:
hi i have a problem my code only detects the first two rows in config and not all of them idk why. code: https://paste.md-5.net/ezuhagewen.js config: https://paste.md-5.net/edevecugey.bash
any help?
im trying to run minecraft
Download Java
I just installed java 16
k
no
Just read what it says
thought so thanks
Its not. Tested it after I sent the message lol
Section can be the list type but there can be only one scalar type per key.
I wanna make a Challenge Plugin and:
I wanna do this:
If the player enters /test, I want him to be thrown up
the list is anonnymous
Please help
fast
Add velocity to the player.
But i dont understand how
What do you have so far?
Vector vector = player.getLocation().getDirection().multiply(1).setY(1);
player.setVelocity(vector);
player.setFallDistance(-999F);
Yes, you definitely can have a list of objects, but I think mixing two types in one key is not possible.
try this
okay wait
You don;t multiply then set Y to 1
player.setVelocity(new Vector(0,1,0).multiply(5));
how I can send packet to player without register this by the server?
that will set the vertical velocity
@primal ledge didn't mean to reply to your message lol messages moved when I clicked.
what doesnt work about it
is the command working?
You shoudl be returnign true
I ACTIVATED FLY
There is no command even checked there
and the code is fine
yea
but it worked tysm
you could player.setFlying(false) before the player.setvelocity if you want it that way
Does anyone have a plugin that will autosort these darn imports checkstyle keeps screaming at me and i do not know what it wants
?
Your IDE should sort imports itself as soon as you trigger formatting on your file
how I can send packet to player without register this by the server?
You can always just send a packet down the players connection. What do you mean by "register this by the server"
FoodLevelChangeEvent
whenever you send something, the server logs it
Love the video or need more help...or maybe both?
๐ฌJoin us on Discord: http://discord.gg/invite/fw5cKM3
Thank you for tuning in to this episode of TheSourceCode! โค๏ธ
If you enjoyed this video make sure to show your support by liking , commenting your thoughts, and sharing for all your friends to see and learn!
All code is available on Github:
...
There is an event for consuming items
nonono bc if hes losing foodlevel it also happens
latter you can read this one with metod on this video
i dont want this
only if he eats
declaration: package: org.bukkit.event.player, class: PlayerItemConsumeEvent
he wants the server not to be able to catch it, for example in the way shown in the movie
oh thx
And dont use the FoodLevelChangeEvent. It also triggers if you lose food or when you gain food through an effect.
@lost matrix you know how make this?
Possibly. But i have never seen the need for that as ProtocolLib is a thing...
What do you need this for?
I want send PacketPlayOutMapChunk but server register this and takes shortcuts
What do you mean by "takes shortcuts"?
I want send to all players other packet about one chunk
but the server, as we can see that I sent a packet to one player all sends the same
i have a problem my code only detects the first two rows in config and not all of them idk why. code: https://paste.md-5.net/ezuhagewen.js config: https://paste.md-5.net/edevecugey.bash
like the '1' and '2' but not '3' or '4'
I try make this with ProtocolLib and NMS but someone result
weird. it detects all when i remove this code https://paste.md-5.net/eviyiguwif.js
So if you send the PacketPlayOutMapChunk to one player then every other player receives the same packet afterwards for the same chunk but you want multiple players to see the same chunk different?
yea
Im not sure if the PacketPlayOutMapChunk packet is cached. Show some code pls.
Oh god...
lmao
but I can send 2 main class
You should have your code separated in a way that such a thing only requires some small classes
This is hard edit packet with chunk is hard
@lost matrix I can share screen
throws Exception
You really like crippling your code. Catching/Throwing exceptions like that is expensive.
I understand what you are doing. Just give me a moment.
Does a plugin exist that enables the creation of cutscenes in-game?
how can i set the socreboard team color from hex? i tried:
team.setColor(ChatColor.of(new Color(245, 66, 96))) but it is bad
remember teams in plugin != teams in command (how I good remember)
@karmic heart Hope you dont mind the ping but since you do a lot of work on spigot/paper i might hope you would have the answer to my question. with the repackaging with the NMS and patch files none of my branches are compatible anymore and i have no idea how i need to fix this
Any idea?
if do a runnable and want it to run in ms rather than seconds, i need to change 20L to 1L correct?
not quite ๐ 20L means 20 ticks which is 1000ms. 1L is hence 50ms
Can you cancel the EntityDeathEvent in any way?
which is the lowest interval in which your runnable can tick
Nope. It will always run in ticks. So 20 = 20 ticks ~= 20 * 50ms ~= 1000ms which is one second
So highest time resolution is 50ms at best
ok
Not directly.
But you can listen to the the entity damage event and if the resulting damage lowers the health below 0 you can cancel that.
I'll try, thx
@lost matrix and what are youi think?
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (sender instanceof Player) {
Player player = (Player) sender;
if(player.isOp() || player.hasPermission("gates")) {
if (label.equalsIgnoreCase("gates")) {
if (args.length == 0) {
sender.sendMessage("nice");
} else {
Player target = Bukkit.getPlayerExact(args[0]);
if (target != null){
player.sendMessage("added" + target.getDisplayName());
//send target to addGates??
}else{
player.sendMessage("doesnt exist");
}
}
}
return true;
} else {
player.sendMessage("bruh");
return true;
}
} else {
main.getLogger().info("You have to be a player");
return true;
}
}
}
====DIFFERENT CLASS======
public void addGates(Player player){
config.set("player-id", player.getUniqueId().toString());
config.set("player-name", player.getPlayerListName());
}
can someone help me send the target player to addGates? I'm new to this sort of thing so excuse the bad code
i have tried but it do nothing
@lost matrix so when i do a countdown in incriment to tick (50ms), i need to 1L??
Are sure that is not with PacketPlayOutEntityDestroy and acketPlayOutEntitySpawn ?
20 tick = 1s but how server have lags 20 > 1s
@lost matrix you have idea about my source?
@lost matrix pls
Not exactly. Do you cache any data yourself and accidentally hit the cache?
I don't understand question
I create packet from the begining
in total, only the variable d
I dont know where the duplucates could come from and i dont really feel like digging into nms right now to find out if chunk packets are cached internally
you tried code in MC?
just to be sure that you also duplicate
I've been working on it for a month; /
how I end I have error ;/
just do addGates(target) and do the saveconfig in the addGates otherwise it will not save to the file
@lost matrix would you like to help me later I don't want to tire you but you know ... it's really hard for me and you know more
command? /loot?
public static final LootTables PIGLIN_BARTERING
?
this is kinda a noob question
but how do you create a config.yml file?
Hi, how could I stop the crafting book to auto complete the crafting slots ?
Hey, I noticed there's a possibility where ping is not displayed on the tablist (i.e. when a player is connecting), is there a way to recreate that by setting an entity player's ping to an insane amount such as 10000?
Or maybe -1?
?paste
How do I fix this after obfuscation with proguard? https://paste.md-5.net/jamiqojijo.rb
you plugin.yml is not pointing to the obfuscated main class
How do I make that happen?
Why are you even obfuscating?
@eternal oxide I have a premium plugin in the works so I don't want people to easily get the code.
#opensourceallplugins
How would I point the obfuscated code to the plugin.yml?
You need to read this https://www.spigotmc.org/threads/rule-changes-re-obfuscation.420747/
item 2
AAC, Spartan, GrantX, etc all hide their code via obfuscation so what is the difference between them and me?
they are shitty and dumb
You have not read the rules on obfuscation as your error is due to ignoring item 2
No their not they are really helpful tools that large servers use daily.
yea bad servers
make your own if you want something good and specific
general purpose stuff is barely ever practical
Yea bad servers who pay for a plugin that is premium and useful.
yea kinda
How can I stop an explosion from destroying blocsk
cancel block explode event
I tried that but it didnt' wrok
what happened
@EventHandler
public void onEntityExplode(EntityExplodeEvent event) {
event.setCancelled(true);
}
``` blocks broke
How to create a ShapeLess recipe with one itme that is named what it isnt supposed to be
declaration: package: org.bukkit.event.block, class: BlockExplodeEvent
or send primedtnt with a packet
You are not registering the listener for it to not stop TNT exploding blocks
getServer().getPluginManager().registerEvents(new EventHandlinger(), this);
Is this a TNT or projectile explosion?
how do you check if a PlayerInteractEvent is caused by a main hand? Is it possible to just compare EquipmentSlot against MainHand?
you use getHand()
Sorry I misread that
yes, but that gives me an EquipmentSlot. I don't know how you check if it is main hand from there
its either HAND or OFF_HAND
ah, ok. thank you!
Cannot resolve symbol 'ExampleAssembleAdapter'
@Override
public void onEnable() {
System.out.println("One, two, buckle my shoe.");
getServer().getPluginManager().registerEvents(new SaplingClass(), this);
Assemble assemble = new Assemble(this, new ExampleAssembleAdapter());
assemble.setTicks(2);
assemble.setAssembleStyle(AssembleStyle.VIPER);
}```
I am trying to use Assemble
"One, two, buckle my shoe."
@EventHandler
public void exploe(BlockExplodeEvent event)
{
event.setCancelled(true);
}``` apparently this isn't used in the code when every other `@EventHandler` is
'1':
- Player
- PlayerTwo
- Money
- PlayerColor
- PlayerTwoColor
'2':
- Player
- PlayerTwo
- Money
- PlayerColor
- PlayerTwoColor```
if i want to loop through 1,2,etc do i have to use .getKeys(false) or a while theres next do
getKeys(false)
k thanks
Then you are not registering it properly.
That is also ONLY for exploding blocks, not entities
Never mind it does work, I just thought it broke because the explosion disappeared entirely
It keeps the knockback and damage which are the main things I Want
Never mind it still breaks blocks...
It's spawned with player.getWorld().createExplosion(player.getLocation(), 5f);
How to create a ShapeLess recipe with one itme that is named what it isnt supposed to be like Special Stick
If you want the damage and knockback but no blocks broken then clear the blocklist in teh EntityExplodeEvent
Also set the Yield to zero so nothing drops. Not sure if clearing the block list will stop drops
@EventHandler
public void explode(EntityExplodeEvent event){
List<Block> targets = event.blockList();
for (Block b : targets){
event.blockList().remove(b);
}
}``` still makes blocks explode
event.blockList().clear()
well, it is what it is
OzelBuyuler.parlakBuyu is null
Is there a different use for 1.16.5? It can be related to this
Well, it isn't the line to NPE, so not me to judge
can u check it? please
blocks are still broken..
debug with a sysout to make sure the event is even fired for a player.createExplosion
I already told you the cause of the Exception, not much I cannot say
How I can send packet without register this about server
I don't understand what you mean here. I don't know what "NPE" is
The event doesn't seem to trigger
In this case it is an IllegalArgumentException, but in this case it acts like a NullPointerException, which is why I called it a NullPointerException (abbreviated as NPE)
Wait it does there is just a major error
find one that does, Unlikely block, Prime may
or use an event that Will trigger teh event and you can control block breaking https://hub.spigotmc.org/javadocs/spigot/org/bukkit/World.html#createExplosion(org.bukkit.Location,float,boolean,boolean,org.bukkit.entity.Entity)
how to send a packet to a player so that the server does not register it?
You can cause damage, no entity so no event but you can set it to not destroy blocks
Is there not a plugin for intellji that does the checkstyle automatically for me
for (Entity entity : sword.getWorld().getNearbyEntities(sword.getLocation(), 20, 20, 20)) {
if (entity instanceof Creature) {
((Creature) entity).damage(10);
entity.getWorld().strikeLightning(loc);
}
}``` How can I make it so that in this loop, it loops through one entity, waits 5 ticks and then goes through another entity?
you can;t wait on the main thread, use the bukkit scheduler to handle timed code.
Would I put the Scheduler on top of the loop
anyone here knows how to respawn an entity (already spawned of course) throught protocollib?
or even without protocol lib, I just need a way to respawn an entity
like "refresh" it
use runTaskLater() within the loop and have an i variable that increases by 5 every time the loop goes through and have the delay set to that variable
?paste
Hi is there any way to cancel the sound make by the trident while throwing it ?
Hey, I'm looking to make a little scoreboard updating every second (few teams + few objectives), rn I'm creating a new scoreboard for each player and sending it to him every seconds,
I was wondering if storing scoreboard of each players in a hashmap and updating them instead would be more efficient ?
Why use a nested class when its doing no more than a simple method?
eww, update their scoreboard not create a new one
Yeah that's what I tought, thanks :D
public void onPlayerHit(EntityDamageEvent e){
if (e.getEntity() instanceof Player){
Entity p = e.getEntity();
p.setVelocity(p.getLocation().getDirection().multiply(getConfig().getInt("knockback-of-players")));
}
}
@EventHandler
public void onMobHit(EntityDamageEvent e){
if (e.getEntity() != null){
Entity p = e.getEntity();
p.setVelocity(p.getLocation().getDirection().multiply(getConfig().getInt("knockback-of-mobs")));```
is this right way to get info from config i am so frustrated. This doesn't work is it done wrong?
knockback-of-mobs: 5Does that work?
yes
yes
ok
Is this config cache class even worth using? https://paste.md-5.net/sevuwitewi.java
i get this error:
I'm not sure how much longer the regular YamlConfiguration takes, might not be worth the effort
You can;t new Main on your main class
ok
No real point in caching anything. Once in memory its read from a Map
how to add gradient to text?
is it in spigot?
wdym?
So should It just work becasue it's in the main class?
What should work? Are you taking about registering your events?
yes
The events are in the main class
would those events already be registered because they are in the main class?
pluginManager.registerEvents(listener, this);
ok ty
getServer().getPluginManager()
required: org.bukkit.event.entity.EntityDamageEvent
found: no arguments
reason: actual and formal argument lists differ in length```
getServer().getPluginManager().registerEvents(onPlayerHit(), this);
getServer().getPluginManager().registerEvents(onMobHit(), this);
no
getServer().getPluginManager().registerEvents(onMobHit(), this);```
How do I get the colors
just one getServer().getPluginManager().registerEvents(this, this);
ah
Seems it requires a plugin https://www.spigotmc.org/wiki/iridescent/
THANKS @eternal oxide It worked! :D:D
is there a way to add it without external plugins
yes, but you'd have to do math
calculate start and end colours and the number of characters
doesnt 1.16 have build in support for smooth gradients?
What's the easiest / general way of changing block and mob drops (loottables)? I tried this for just block dropsjava @EventHandler public void onBlockBreak(BlockBreakEvent event) { if (event.isDropItems() && event.getPlayer().getGameMode() != GameMode.CREATIVE) { event.setDropItems(false); event.getBlock().getWorld().dropItemNaturally(event.getBlock().getLocation(), new ItemStack(Material.ACACIA_BOAT)); } }but this isn't effective because, for example, if I stack scaffolding then break it the attached blocks still drop as scaffolding. That's just one example I've found, but there are a few.
how to send a packet to a player so that the server does not register it?
public final class EarthDay extends JavaPlugin {
private Assemble assemble;
@Override
public void onEnable() {
System.out.println("EEEEEEEEEEEEEEEEEEEEEEE");
getServer().getPluginManager().registerEvents(new BlockPlace(), this);
this.assemble = new Assemble(this, new ScoreboardAdapter());
}
@EventHandler
public void onJoin(PlayerJoinEvent event) {
createBoard(event.getPlayer());
}
@Override
public void onDisable() {
// Plugin shutdown logic
}
public static void createBoard(Player player) {
ScoreboardManager manager = Bukkit.getScoreboardManager();
Scoreboard board = manager.getNewScoreboard();
Objective obj = board.registerNewObjective("SaplingScoreboard", "dummy", ChatColor.translateAlternateColorCodes('&', "&f&l<< &a&lTrees Planted &f&l>>"));
obj.setDisplaySlot(DisplaySlot.SIDEBAR);
Score score = obj.getScore(ChatColor.AQUA + "=-=-=-=-=-=-=-=-=-=-=");
score.setScore(3);
player.setScoreboard(board);
}
}```
Fixed.
My scoreboard won't show for some reason though
I have been trying to fix it all day
what method can i use to save an arraylist to my custom yml file?
not sure how helpful it would be, but here is my setup for the yml file
public class GatesConfig {
private static File file;
private static FileConfiguration config;
public static void setup(){
file = new File(Bukkit.getServer().getPluginManager().getPlugin("FishMong").getDataFolder(), "GatesConfig");
if(!file.exists()){
try{
file.createNewFile();
}catch (IOException e){
System.out.println("IOException 1");
}
}
config = YamlConfiguration.loadConfiguration(file);
}
public static FileConfiguration get(){
return config;
}
public static void save(){
try{
config.save(file);
}catch (IOException e){
System.out.println("IOException 2");
}
}
public static void reload(){
config = YamlConfiguration.loadConfiguration(file);
}
}
What type of object does the arraylist hold
there will be two, UUID and String
If your PlayerJoinEvent listeners are in yoru main class you need to register the main class events
It is not
You can convert both to String, so it's as easy as just setting it directly.
EarthDay is my main class
Not directly. its backed by a Map though.
Yes, but I'm wondering if it's worth the slight performance increase
I did the scoreboard stuff right, it just won't work for some reason
Are you registering the events in the class they exist?
Probably not, but I've seen people recommend it
I doubt there woudl be any performance increase unless you are reading values every tick
can i convert Player objects to String?
if you just need to save their uuid then yes
are you registering yoru events? I only see you registering a block break
I just registered Block place, is there a way to register multiple things?
public class BlockPlace implements Listener {
@EventHandler
public void onPlayerPlantSapling(BlockPlaceEvent e) {
if (e.getBlockPlaced().getType().toString().endsWith("SAPLING")) {
Bukkit.broadcastMessage("lol");
}
}
}```
you register any class that implements Listener
That's true, maybe I'll run some tests on it later
dangit no images
Do I need to register EarthDay as a listener too?
onJoin is an event
your blockplace is Only your blockPlace class
you add another register line
registerEvents(this, this);
public void onPlayerHit(EntityDamageEvent e){
if (e.getEntity() instanceof Player){
Entity p = e.getEntity();
p.setVelocity(p.getLocation().getDirection().multiply(getConfig().getInt("knockback-of-players")));
}
}
@EventHandler
public void onMobHit(EntityDamageEvent e){
if (e.getEntity() != null){
Entity p = e.getEntity();
p.setVelocity(p.getLocation().getDirection().multiply(getConfig().getInt("knockback-of-mobs")));
}
}```
When I hit a mob/player, it only goes in the direction it is facing. how can I change it so I goes into the direction you hit it?
change yoru multiplier to a negative
how to send a packet to a player so that the server does not register it?
it will go backwards, but if you want it to go away from teh attacker you have to do some math
And for entities I would dojava @EventHandler public void onEntityDeath(EntityDeathEvent event) { event.getDrops().clear(); event.getDrops().add(new ItemStack(Material.ACACIA_BOAT)); }but there area few edge cases such as if a mob is wearing armor or if it's a player
I got this error in the mc console [18:07:17 ERROR]: Could not pass event PlayerJoinEvent to earthday v1.0
getServer().getPluginManager().registerEvents(new BlockPlace(),this);
getServer().getPluginManager().registerEvents(this,this);```
my files are saving as just regular java files, is it important for them to be yml?
the simplest way would be instead of taking the targets getDirection, get the attackers direction, multiply and apply as velocity to the target
mmm ohkya
how the heck is furanceInventory working?
Show the full error, you likely have an NPE
how would you get the attackers direction?
.getPlayerDirection or smth?>
Use EntityDamageByEntityEvent
ah
It can't pass PlayerJoin event to earthday
Caused by: java.lang.IllegalArgumentException: The name 'SaplingScoreboard' is longer than the limit of 16 characters
how to send a packet to a player so that the server does not register it?
any errors?
Nope, and I debugged each event. Each logged a word so I know they are working
It is the scoreboard
onJoin works, and so does createBoard, does too but the scoreboard is not being made
can i use a list as a value in my config?
yes it has a getList method
show yoru scoreboard method
?paste
https://paste.md-5.net/zabelamuba.cs @eternal oxide
public void onPlayerHit(EntityDamageByEntityEvent e){
if (e.getEntity() instanceof Player) {
Entity p = e.getEntity();
p.setVelocity(p.getLocation().getDirection().multiply(getConfig().getInt("knockback-of-players")* -1));
}
}
@EventHandler
public void onMobHit(EntityDamageByEntityEvent e){
if (e.getEntity() != null) {
Entity p = e.getEntity();
p.setVelocity(p.getLocation().getDirection().multiply(getConfig().getInt("knockback-of-mobs")* -1));
}
}```
I'm a little confused
you need to use e.getAttacker() to get yoru direction
or is it getDamager() I forget
damager i think
you can combine yrou events into one. no need for two seperate.
Check if instanceof Player else mob
How can I continue color from prefix to player name? Make the player name yellow (without setColor() method) ?
team.setPrefix(ChatColor.RED + "PREFIX " + ChatColor.YELLOW);
try setting a title on your obj
obj.setTitle
It has its own events and recipes
What do you mena not a thing?
sorry, yes setDisplayName
I have a helper method called setTitle for it
Nope
No clue then. I see nothing wrong with your code now
same
The only difference between yours and some code I use is that I use teams
Still looking for ideas for changing mob/block loot
Like this?
public void onPlayerHit(EntityDamageByEntityEvent e){
if (e.getEntity() instanceof Player) {
Entity p = e.getEntity();
p.setVelocity(e.getDamager().getVelocity().multiply(getConfig().getInt("knockback-of-players") * -1));
} else if (e.getEntity() != null) {
Entity p = e.getEntity();
p.setVelocity(e.getDamager().getVelocity().multiply(getConfig().getInt("knockback-of-mobs") * -1));
}
}```
i made the syntax wrong
I'm not sure...
looks ok at first glance
You could move Entity p = e.getEntity(); to teh very top, outside the if test, so you only need a single variable for both test if (p instanceof Player) etc
ok ty also when I hit a mob/player it reverts back to the normal minecraft knockback.
You want get Direction of the damager
ah
furance set burning time?
burn time value is not on the furnace but the consumable. The time remaining is the value on teh furnace
this?
remove getVelocity
thanks for hit me at the right direction โค๏ธ
it difficult with things i'm unfamiliar with
Gradle?
Maven
Ok good bye
this is to shade a package xml <!-- Shade the BungeeCord configuration so we can use it under Spigot. --> <artifactSet> <includes> <include>net.md-5:bungeecord-config:*:*</include> </includes> </artifactSet>
Yeah what I currently have is Hikari as a dependency with compile option
I basically have a common library in the middle, the spigot plugin and a bungee plugin both use it with compile too
supposedly hikari is shaded too but it aint working
java.lang.NoClassDefFoundError: com/zaxxer/hikari/HikariConfig
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<configuration>
<dependencyReducedPomLocation>${project.build.directory}/dependency-reduced-pom.xml
</dependencyReducedPomLocation>
<relocations>
<relocation>
<pattern>com.zaxxer:HikariCP</pattern>
</relocation>
</relocations>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<minimizeJar>true</minimizeJar>
</configuration>
</execution>
</executions>
</plugin>
open yoru jar and see whats in it
is there anyway to force the first hotbar slot to be empty always?
I mean yeah cancel all events that may manipulate the first slot of the inventory
Then if you really wanna be sure you could schedule an active task to make sure something isnโt there
sadly enough, there was no classpath for hikari
i get a feeling that that would be a lot of events to cancel :(
sucks, thanks for the advice
You welcome (:
reee
furances confuses me
you could just check when an item is placed in any of those specific slots
Why do you want the first hotbar to be empty?
unless you are actually relocating then use ArtifactSet, that simply copies
I did
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<configuration>
<dependencyReducedPomLocation>${project.build.directory}/dependency-reduced-pom.xml
</dependencyReducedPomLocation>
<artifactSet>
<includes>
<include>com.zaxxer:HikariCP</include>
</includes>
</artifactSet>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<minimizeJar>true</minimizeJar>
</configuration>
</execution>
</executions>
</plugin>
sare you certain you got teh entry correct?
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>2.6.0</version>
<scope>compile</scope>
</dependency>
So im not sure if its happening because of this
but the library hikari is being shaded into is a common library in a multi module project
might it be because im not shading the common module into the spigot one?
gradle (:
I must go ahead and disagree
i didnt think i needed to shade the common because it worked running other stuff through the lib
Wait r u just shading?
i have an ability that requires your fist to be out, how would i go about checking when an item is placed?
Not relocating that is
with a compile scope it shoudl be auto shaded
^
yeah then it makes no sense why it doesnt work
Do you build correctly?
yes
maven clean install ?
delete the entire shade plugin section, unless you are doing something else in there
obj.getScore().setScore(0);
its not needed
show me your pom
getScore(entry) exists
anyone know how to get around this with latest spigot build?
Donโt see the entire error
You have no repos defined?
wym
oh git repos? its a private project so no, i prob should still add the private repo links tho
no maven repos
for common?
hikari didnt specify it needed one
and bungeecord chat is filled by the spigot/bungeecord plugin which uses it
Gradle (:
Does anyone know how to create a scoreboard? I think the method I was doing it was out of date
Yes but misa sleep soz
?
Odd you are correct, hikari does not get shaded by default
Yeah even shading it with the thing you suggested didnt work
the stuff thats commented out
ok shading works
you used the same settings i did?
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<configuration>
<artifactSet>
<includes>
<include>com.zaxxer:HikariCP:*:*</include>
</includes>
</artifactSet>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>```
let me try
java.lang.NoClassDefFoundError: com/zaxxer/hikari/HikariConfig
at com.github.myriadmc.myriadcommon.Database.Database.<init>(Database.java:32) ~[?:?]
at com.github.myriadmc.myriadspigot.MyriadSpigot.onEnable(MyriadSpigot.java:54) ~[?:?]
at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:263) ~[patched_1.16.5.jar:git-Paper-601]
at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:380) ~[patched_1.16.5.jar:git-Paper-601]
at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:483) ~[patched_1.16.5.jar:git-Paper-601]
at org.bukkit.craftbukkit.v1_16_R3.CraftServer.enablePlugin(CraftServer.java:501) ~[patched_1.16.5.jar:git-Paper-601]
at org.bukkit.craftbukkit.v1_16_R3.CraftServer.enablePlugins(CraftServer.java:415) ~[patched_1.16.5.jar:git-Paper-601]
at net.minecraft.server.v1_16_R3.MinecraftServer.loadWorld(MinecraftServer.java:591) ~[patched_1.16.5.jar:git-Paper-601]
at net.minecraft.server.v1_16_R3.DedicatedServer.init(DedicatedServer.java:280) ~[patched_1.16.5.jar:git-Paper-601]
at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:1065) ~[patched_1.16.5.jar:git-Paper-601]
at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$a$0(MinecraftServer.java:289) ~[patched_1.16.5.jar:git-Paper-601]
at java.lang.Thread.run(Thread.java:829) [?:?]
Caused by: java.lang.ClassNotFoundException: com.zaxxer.hikari.HikariConfig
at java.net.URLClassLoader.findClass(URLClassLoader.java:471) ~[?:?]
at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:182) ~[patched_1.16.5.jar:git-Paper-601]
at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:111) ~[patched_1.16.5.jar:git-Paper-601]
at java.lang.ClassLoader.loadClass(ClassLoader.java:589) ~[?:?]
at java.lang.ClassLoader.loadClass(ClassLoader.java:522) ~[?:?]
... 12 more
does not work for me
should not have pasted the whole thing woah
I ran build and hikari is in my jar
could it be because myriadcommon is not the plugin but myriadspigot is
and hikari is in common
while spigot just shades/uses common with a compile scope
I thought Hikari was included in paper?
No clue I don;t use it
however, check your jar. If com/zaxxer is not in there then its a build issue
it is not in there
im gonna try building common by itself and seeing if its in the common jar
as I just ran it with just the dependency from your XML and the Plugins I just gave you
Can I get some help with what this is looking for?
public boolean Right(String aname) { byte b; int i; PermissionGroup[] arrayOfPermissionGroup; for (i = (arrayOfPermissionGroup = Main.get().getPex().getPermissionsManager().getGroups()).length, b = 0; b < i; ) { PermissionGroup group = arrayOfPermissionGroup[b]; if (group.getOption("land", null, "").equalsIgnoreCase(aname)) return true; b++; } return false; }
Its searching permission groups in PEX for the first group with a option of "land" with a value of aname
returns true if one was found
Ah I see makes sense
Still didnโt work, I tried using my friends scoreboard api and it works fine
did you build it as multi module or single module
single
could it be the multi module thing fucking it up
possible I guess
can you have artifactset and relocation in the same project
yes
relocation is for changing the classpath of a package
not just copying
ArtifactSet is to copy a whole dependency or any portion of
as per teh first one I gave you only copies the Bungee config packages and nothing else
I changed it to be single modulethrough the bungee config
lemme show the config
does not work
line 31 is the property map
yeap
it cant even reach there (the values)
true xD
set minimizeJar to false and see if it works then
You have Any idea why it's not working?
debug
try setting up a debug enviornment
and debugging step by step and step into that
also have you tried out this https://stackoverflow.com/questions/45809234/change-player-skin-with-nms-in-minecraft-bukkit-spigot
[WARNING]
[WARNING] Some problems were encountered while building the effective model for net.turkgamerz:skin:jar:1.0-SNAPSHOT
[WARNING] 'dependencies.dependency.systemPath' for org.spigotmc:spigot-api:jar should not point at files within the project directory, ${project.basedir}/libs/spigot-1.16.5.jar will be unresolvable by dependent projects @ line 72, column 25
[WARNING]
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING]
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
[WARNING]
Is that an important detail?
why are you using the jar?
but why are you using the jar?
why even remove the texture property like that. You could also just clear the entire textures value set using PropertyMap#removeAll. Not like you want to keep a specific texture
I did copy and paste directly from the server
??
No, cause you are making your life kinda harder lmao. Run BuildTools and provide the maven dependency normally
where did that jar come from xD
spigot page
ah
so an illegal one
Same thing
That is bad
๐ฎ
๐ฅฒ