#development
1 messages Β· Page 83 of 1
hey, um, I'm trying to add server logs to our so called "staff control panel".
my current impl., is, well, iffy. (and a bit dumb)
using laravel/react (inertia) stack
so basically I am ssh commands to zgrep the logs and, to say the least, when I try to put them all in a table (not ALL logs, say only the latest log file), it's a bit laggy due to the amount of data loaded.
any recommendations how could that be improved? what I want to achieve is an easy way to search through ALL the logs without the hassle of opening each one manually and searching.
okay first question: is this like, a React table that lags your browser?
or like a database table or something backend
it's probably my implementation, it's just a custom table component with ~50000 rows of logs
though the whole page is laggy
π
basically it's just a bit json passed from back to front
i would recommend tanstack table, it's superb @river solstice
free, open source, made by the guy who made React Query and co.
i would also recommend pagination of some kind, or like infinite scrolling (still technically pagination)
so that you don't send 50,000 rows at once
this looks to be an even better option potentially
virtualized, can parse stuff nicely, has highlighting and searching
things can never go smoothly can they
yeah well I fixed that part, but the log is just not showing up
why it do that
How come I am getting all these warnings in my build.gradle?
'maven' cannot be applied to '(java.lang.Class<org.gradle.api.publish.maven.MavenPublication>, groovy.lang.Closure<org.gradle.api.publish.Publication>)'
Cannot assign 'String' to 'Publication'
Groovy or kts? Where are you getting that example from? Normally you don't set groupid, artifactid, and version, that is taken from the project automatically
You do, you just don't need to set the ids, etc, just the from section
But how come I get this warning with MavenPublication?
Did you add the publish plugin? Is that in the tasks block? Hard to tell from just that screenshot
plugins {
id 'java-library'
id 'maven-publish'
}``` Yeah I do
Is that in the tasks block?
Might wanna send your full build.gradle
https://paste.helpch.at/degigipeqi.js Here you go
when running the publish task, I get an error too saying:
Credentials required for this build could not be resolved.
> The following Gradle properties are missing for 'AdventurousKlyNetMsg' credentials:
- AdventurousKlyNetMsgUsername
- AdventurousKlyNetMsgPassword```
I added the credentials in my `gradle.properties`
myDomainRepositoryUsername=username
myDomainRepositoryPassword=password``` this is in my gradle.properties
you should also replace myDomainRepository with AdventurousKlyNetMsg I'd assume
Yeah that was it!! thank youu
I'm getting an error saying:
FAILURE: Build failed with an exception.
* What went wrong:
Could not resolve all dependencies for configuration ':compileClasspath'.
Using insecure protocols with repositories, without explicit opt-in, is unsupported.``` This is when adding the published dependency to one of my projects though, not when publishing.
Plugin 1 (AdventurousKlyNetMsg) I managed to publish through adding allowInsecureProtocol = true
Using insecure protocols with repositories
Not using https, you'll need to optin on everything that uses it
What do you mean?
Oh
So plugin 2 needs to have allowInsecureProtocol=true in the publishing.repositories section?
It's my dad's server and he cannot add the SSL until next week, was hoping to use http for the time being till then since after next week ill be busy again
I added that line in plugin 2 though I still get the same issue when reloading the build.gradle
btw you are publicly sharing the ip, on the paste too
What
It's been leaked on 4chan a few weeks ago anyway by some people
Either way, did I do that right or am I missing something?
As long as you're fine with it
And yeah that looks correct
setAllowInsecureProtocol(true) seems to also be a thing, try that if it doesn't work
Oh I had it in the wrong place
well, by some pagination magic I managed to fix the performance without any libs lol
hell yeah
in my table component previously I would just pass all the rows and do the pagination inside the component, which would generate a shit load of html elements
now I just slice the data before generating the rows, and the table component just has a "fake pagination", which just calculates the pages and rows per page by the total amount of data
and I thought the issue was 50k rows of json
now it can handle ~100mil without an issue
phew!
although currently I do it file by file, my goal is to "load" and have an ability to search through all of them, but for that Ill have to increase the buffer size quite a lot lol
thanks for the idea anyways, totally forgot about virtualization
will most likely use it when I'll get in the big boy numbers
Good day. I'm not sure why you guys keep putting my new servers under review when my server follows all of the guidelines. I just recently made a new server for gamers but it has been under review for weeks. My other server that I tried to open was under review for months and I had to delete it because I couldn't engage with a community. Can you kindly check my discord server personally if you think something is wrong and then can you kindly allow it to go on disboard so I can start my community? It seems to me like you people aren't doing your job properly. My username is night_hawk4 and my new servers name was DREAMSCAPES.
buddy, this is a minecraft discord
?not-discord
Looking for discord support?
HelpChat is a Minecraft plugin and development support server and is not affiliated with discord in any way.
If you require support from discord, we recommend you to visit their official support website at https://support.discord.com
On this website, you can read their FAQs, or open a support ticket if necessary.
also even if this was an official discord support server, disboard != discord
Sorry I forgor to do my jorb
banned for forgor
how do you not only go to the wrong server, you completely ignore every piece of context, you go to #development for some reason???? which would be the wrong channel even if this was the right Discord, would probably get you muted out of annoyance
Is there already a test version for 1.21?
Unfortunately I couldn't find anything
Ah sorry π PlaceholderAPI
are you a plugin developer looking to integrate with it somehow?
in need of a dev for helping me with combatlogx
I want to bring back DeluxeChat, if there anyone wants to help me do it, write me in dm, i already have a good base for this plugin, but i'm stuck now, if there anyone who wants to help me, thank you
You want to do what? @silk swan
I want to make a chat plugin in the style of deluxechat, I loved deluxechat but as it is no longer being updated it is no longer sustainable in new versions, and so I would like to recreate it to continue support in new versions
Do you plan to use any of its code? π
Also, we do have a better replacement for it: ChatChat
ah, I didn't know that, looking around I hadn't found it, then okay, thank you very much

How can I display a sign and get the user input on my plugin? Do I need to use ProtocolLib ?
No
No
2030 as always
hello, I am creating a plugin and I want to make it compatible to several versions at the same time is there a way to do it ?
depends on the versions
chances are, it'll work even if you don't change anything
but generally you want to
- set the spigot version in pom.xml/build.gradle/build.gradle.kts to the lowest version you want to support because while newer versions might have additions, removals are rare
- If the lowest version is below 1.13, then
plugin.ymlshould not haveapi-version. If it's >= 1.13, then you should addapi-version: 1.13or whatever version
and most importantly - test! There have been changes across versions which might require checks (ex do x on 1.13 but y on 1.14)
this assumes you have a working plugin on a specific version already
ok thanks I found nothing on the web :)
I did actually make something in this style before ChatChat was a thing. Youβre welcome to fork it and add bits if you wish :)
Thanks
Hi i am tring to apply velocity api to my plugin but this error keeps going here is my pom.xml
Unresolved dependency: 'com.velocitypowered:velocity-api:jar:3.1.0'
hi! is there api for DeluxeMenu?
i want to open menu by code!
ping on reply please!!
idk if there is an api, but you can open the menu to the player making him perform a command or using the console command sender
him perform a command? how?
i don't know, it might not. If not, you can use the ConsoleCommandSender and send the command via console:
https://jd.papermc.io/paper/1.21/org/bukkit/Bukkit.html#dispatchCommand(org.bukkit.command.CommandSender,java.lang.String)
The command would be the dm open menu_name player
This player.getOpenInventory().getTopInventory().getHolder() != view.getHolder(); gives me the following error:
java.lang.IncompatibleClassChangeError: Found class org.bukkit.inventory.InventoryView, but interface was expected. The plugin is compiled with Spigots 1.21 API but is ran on a server with 1.20.4 which I assume has something to do with it.
Ping if you respond pls
uhh
can you give the stacktrace?
that's probably not where the error is coming from
Can't keep up! Is the server overloaded?
AMD EPYC 9654 96-Core Processor
32gb of ram
6 cpu cores
Purpur
and still overloaded
https://spark.lucko.me/BDMlvdkMVG
https://spark.lucko.me/oirdH21APi
spark
https://timings.aikar.co/dev/?id=8a5cb53512ac4022bc67cb760937803e#timings
https://timings.aikar.co/dev/?id=28e133e7dbfd4026a2e728f623fba565#timings
timings
is this regarding a plugin you coded or...?
server things
is it wrong channel
depends, do you have problems with reading or just didn't read?
(yes, read the channel topic)
its not configuration
cool my bad
#minecraft or #general-plugins is your best bet
How can I display a sign and get the user input on my plugin? Do I need to use ProtocolLib ?
Are there Any discord mods here?
Looking for discord support?
HelpChat is a Minecraft plugin and development support server and is not affiliated with discord in any way.
If you require support from discord, we recommend you to visit their official support website at https://support.discord.com
On this website, you can read their FAQs, or open a support ticket if necessary.
Are you just a mod for this discord server or discord itself
im not a mod here or discord itself
Hmm?
btw this is not a discord support server this is a minecraft discord, in case you were fooled at some point
a lot of people join here assuming this is an official discord support server for discord itself
Damn
become literate.
If in my plugin's main class I override getDataFolder(), does that mean I can use a directory in a custom path to store plugin config?
Ah it's final, shit
How can I change the data folder a plugin uses?
just use any other file location you want
you are not bound by the data folder
new File(getDataFolder().getParentFile(), "foo bar")
hey guys i'm trying to delete a server but for some reason the option isn't showing in my server settings. Any suggestions?
Sorry for the late response, went to bed before you responded and then I've been at work. Anyways, here is the full stacktrace:
[23:58:44] [Server thread/WARN]: [Yggdrasil] Task #25 for Yggdrasil v2.0.0 generated an exception
java.lang.IncompatibleClassChangeError: Found class org.bukkit.inventory.InventoryView, but interface was expected
at com.sniskus.yggdrasil.gui.Gui$1.lambda$1(Gui.java:72) ~[Yggdrasil-2.0.0.jar:?]
at com.sniskus.yggdrasil.util.time.Scheduler$1.run(Scheduler.java:26) ~[Yggdrasil-2.0.0.jar:?]
at org.bukkit.craftbukkit.v1_20_R3.scheduler.CraftTask.run(CraftTask.java:101) ~[paper-1.20.4.jar:git-Paper-399]
at org.bukkit.craftbukkit.v1_20_R3.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:480) ~[paper-1.20.4.jar:git-Paper-399]
at net.minecraft.server.MinecraftServer.tickChildren(MinecraftServer.java:1635) ~[paper-1.20.4.jar:git-Paper-399]
at net.minecraft.server.dedicated.DedicatedServer.tickChildren(DedicatedServer.java:446) ~[paper-1.20.4.jar:git-Paper-399]
at net.minecraft.server.MinecraftServer.tickServer(MinecraftServer.java:1514) ~[paper-1.20.4.jar:git-Paper-399]
at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1215) ~[paper-1.20.4.jar:git-Paper-399]
at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:319) ~[paper-1.20.4.jar:git-Paper-399]
at java.lang.Thread.run(Thread.java:833) ~[?:?]
Does not look like it is caused by another exception
Spigot has recently changed the type of some Inventory class from interface to abstract class, idk if that's the problem
Probably, I haven't faced this problem before tho, how do I solve it?
I get what the problem is, just have no clue how to solve it
Tried searching some before but found nothing I felt was useful
Welp, is the other way around
abstract class > interface
Actually idk how to fix this, probably a different class that extends/implements InventoryView depending on the version you are on 
I was thinking ab actual ppl, but that works too ig 
Good luck!
Thanks, probs will need it lol
thanks for the help
I genuinly have no clue how to do this. It's not like I'm creating my own InventoryView, I'm getting a bukkit one which is of the wrong type which throws the error.
tbh I had no idea what IncompatibleClassChangeError was
I probably should've looked it up before responding lol
Oh π
If you still need help I had to add support for the old and new InventoryView in one of my APIs, I used modules to do it
https://github.com/Rosewood-Development/GuiFramework/tree/master/InventoryView
Alternatively if you develop with the 1.20.4 API it will simply work on both 1.20.4 and 1.21 because of asm rewriting shenanigans as long as your plugin isn't a paper plugin
is there a way to access/clear the 2x2 crafting grid? players r using it to store illegal items to use them past the "safeguards" i have
just realized they can also bypass by holding item with cursor π
reminds me of when I made a item "tracking" library a while ago
but yeah
and you can also access/clear this as well
I don't remember how on the top of my head for this... but I know it's possible
π
probably getting slots or raw slots
wow thx π
lol
well there definitely exists a solution so don't be discouraged
that happened
fowrareda dwhat
ok i tried disabling inventoryclickevent if inventorytype is crafting
but it only works sometimes...??
https://github.com/dkim19375/ItemMoveDetectionLib
if you want you can take some inspiration
but the codes kinda spaghetti and it was last edited 2 years ago soooooooo
don't use the library directly because it's probably broken
but
Β―_(γ)_/Β―
event.getView().getTopInventory().getType() == InventoryType.CRAFTING
if i spam it doesnt detect the click wthhhhh
what do i do
ping if reply im going to bed its 1:30 am
//TODO prevent ppl abusing 2x2 craft grid (just disable it lol)
you sure it isn't desync
like the client thinks it exists but it doesn't actually exist (on the server)
Yes I tested and still let me bypass
sounds like drag event
even if you slide a single pixel you start dragging items, so you need to check for both click and drag events
can confirm the drag event is always to blame
ok yea i think that worked
but wth is this logic
if i drag anywhere in my inventory, its CRAFTING inventory, but if i just click, its PLAYER inventory
not even in the 2x2 grid, just anywhere in my inventory, that makes 0 sense
oh i think its cause for click event im using event.getClickedInventory() but for drag event im using event.getInventory() (getClickedInventory() doesnt exist)
anyway to fix that?
check the inventories you dragged across? the event gives you the raw slots, and you can get the inventory for a raw slot from the inventoryview
o ig i was just checking getInventorySlots() not raw ones and it was giving 0-4
ok ye it still does
HAHAHAHhahHAhahAHhahaahHAH i was putting the updated plugin jar on the wrong server!!!!!! !!1 11 11 11 !!!1!!!!
it worked, thx :)
I feel you
sanest mc dev
hey is this help for everything todo with minecraft development?
hjelp
more or less yeah
like dev as in coding, not just editing configs for a premade plugin
plugin development here mostly
not much else
is it possible to disable features within guilds?
?not-discord
Looking for discord support?
HelpChat is a Minecraft plugin and development support server and is not affiliated with discord in any way.
If you require support from discord, we recommend you to visit their official support website at https://support.discord.com
On this website, you can read their FAQs, or open a support ticket if necessary.
Oh i was going to ask about Server Software like making your own in a different language than Java π
well the protocol is well documented, but youd have to implement everything, every game mechanic from scratch and theres kinda no reason to do so
I decided to use Java but even then I gotta make the Connection Handshake myself right?
like I just wanna make a Proxy System
If you want a lightweight hub or smth, there is https://minestom.net/
I want my own Cloud System that creates servers, does maintainance, does loadbalancing onto the Proxies
why is PlayerMoveEvent#getTo() nullable? ping if reply
declaration: package: org.bukkit.event.player, class: PlayerMoveEvent
paper is different
declaration: package: org.bukkit.event.player, class: PlayerMoveEvent
idk y
spigot skull with crossbones emoji
u think its intended or?
my guess is that spigot annotated it incorrectly, and paper corrected it
Plus why would it matter why it is nullable, just throw a null check and call it a day
cause im using it to detect movement type (translation, rotation, both), so i need to either return one of those when getTo is null or return null, depending on what getTo being null means
its fine, i have it set as translation from when i first set it up so ill just keep it like that
What additional features does Paper's API provide compared to Spigot?
something you can find in their docs
I'm wondering how feasible it would be to add placeholder support for all mobs not just players. For example have this method:
// PlaceholderHook.java:
public String onPlaceholderEntityRequest(final Entity entity, @NotNull final String params) {
return null;
}```
Or was a specific reason that only players are used
not a bad idea
tbh I don't think the papi devs would make a big change like this tho
Making it an optional override rather than required be would ideal and support backwards compat
might be a good papi3 suggestion
although its current release date eta is already like 2030
wait 2030 isn't even that far away anymore
it might actually be 2030
maybe they'll add it for minecraft 2.0
Anyone experienced this issue in the past?
Sometimes the directory gets "locked" and I haven't really found the reason why or any workarounds. This happens when building reobf paperclip jar.
gradlew --stop 
how can i make a player glow with color using ProtocolLib?
Uhm so I am saving a region as a schematic using WE api, then I load it, and when I paste it programatically, it just pastes air in the area, if I paste it manually, it works perfectly. This means that schematic saving is not the issue, and it's def. either the loading of it or pasting of it.
WorldEdit worldEdit = WorldEdit.getInstance();
com.sk89q.worldedit.world.World w = BukkitAdapter.adapt(toWorld);
try (EditSession editSession = worldEdit.newEditSession(w)) {
Operation operation = new ClipboardHolder(clipboard)
.createPaste(editSession)
.to(from)
.ignoreAirBlocks(false)
.build();
Operations.complete(operation);
}
show loading the schematic into the clipboard
https://paste.helpch.at/quhalumeno.java all methods
that actually does work fine with fawe
fawe is not we
not saying it couldn't possibly be the cause, try without
oh yeah if that's we it will die
also the saveSchematic is kinda weird, completing the operation to copy to the clipboard after writing to file?
but the async task is raising the eyebrow more than that lol
I am using FAWE
and yeah will fix that
CuboidRegion region = new CuboidRegion(from, to);
BlockArrayClipboard clipboard = new BlockArrayClipboard(region);
ForwardExtentCopy forwardExtentCopy = new ForwardExtentCopy(
BukkitAdapter.adapt(fromWorld), region, clipboard, region.getMinimumPoint()
);
Operations.complete(forwardExtentCopy);
File file = new File(WorldEdit.getInstance().getSchematicsFolderPath() + "/ARegionReset-" + name + ".schem");
try (ClipboardWriter writer = BuiltInClipboardFormat.FAST.getWriter(new FileOutputStream(file))) {
writer.write(clipboard);
} catch (IOException e) {
throw new RuntimeException(e);
}
return clipboard;
so like this? Cause this didn't fix the issue xD
and it is still saving the schematic properly...
Can anyone help me to compile a plugin i have source code but I donβt know how to compile
lmao
Why are you laughing can you help me?
Gotta give more details but I will assume you are working on bukkit/spigot
https://www.youtube.com/watch?v=tnJZMaoMPhE&list=PLfu_Bpi_zcDNEKmR82hnbv9UxQ16nUBF7
Thanks
how can i make a player glow with color using ProtocolLib?
Cause you are probably trying to compile a paid plugin that is open source
im trying to compile a free plugin which is open source
why not just download it then if it's free
might be because the developer didn't upload the release
or he had done changes on the source code
if he had changes done on the source code, he better be able to compile it lmao
it is very likely to be a paid plugin that's open source
rite lol
well idk
so why not just download it? bruh
I want to edit the plugin name
ah lol
yeah i wasn't suggesting that was gonna fix the issue, but it wasn't correct before lol
have you tried running it sync ?
oh I fixed the issue, forgot to say, srry. now it's a different issue
the idea is to have a region in W2, that when I want I can save and it will paste that in W1 at the same location
Issue is, if I save and paste it while I am in W2 (the "original" region), W1 is not updated and when I go to W1, I have to save it again and paste it, then it works
hello, I have a small problem, I have a menu that allows players to launch a dungeon and you have to have 10k money to be able to launch the command that puts the player in the dungeon. The problem is that if I don't have the 10K I have a message in the console that tells me that the player cannot be below $0 but it launches the dungeon anyway while I would like it to cancel it if the player does not have the $10K
just put the dungeon startup code block inside of the statement of checker
Didn't know that complex stuff was allowed in DM
is it even about dm?
well if it so, just return at the point where it sends the user message data
hey I'm trying to update an abounded plugin WirelessRedstone and the plugin hasn't been updated since around the time where the signs were changed to have multiple writable sides, in the api docs it says to use getSide(Side) and SignSide.setLine(int, String)
Below is the old function
public boolean placeSign(String channelName, Location location, SignType type, int extraData) {
Block block = location.getBlock();
if (block.getType() != Material.AIR) {
return false;
}
if (!(CrossMaterial.SIGN.equals(block.getType()) || CrossMaterial.WALL_SIGN.equals(block.getType()))) {
block = CrossMaterial.SIGN.setMaterial(block);
}
if (!(location.getBlock().getState() instanceof Sign)) {
return false;
}
Sign sign = (Sign) block.getState();
sign.setLine(1, channelName);
switch (type) {
case TRANSMITTER:
sign.setLine(0, WirelessRedstone.getStringManager().tagsTransmitter.get(0));
break;
case SCREEN:
sign.setLine(0, WirelessRedstone.getStringManager().tagsScreen.get(0));
break;
case RECEIVER:
sign.setLine(0, WirelessRedstone.getStringManager().tagsReceiver.get(0));
sign.setLine(2, WirelessRedstone.getStringManager().tagsReceiverDefaultType.get(0));
break;
case RECEIVER_INVERTER:
sign.setLine(0, WirelessRedstone.getStringManager().tagsReceiver.get(0));
sign.setLine(2, WirelessRedstone.getStringManager().tagsReceiverInverterType.get(0));
break;
case RECEIVER_SWITCH:
sign.setLine(0, WirelessRedstone.getStringManager().tagsReceiver.get(0));
sign.setLine(2, WirelessRedstone.getStringManager().tagsReceiverSwitchType.get(0));
break;
case RECEIVER_DELAYER:
sign.setLine(0, WirelessRedstone.getStringManager().tagsReceiver.get(0));
sign.setLine(2, WirelessRedstone.getStringManager().tagsReceiverDelayerType.get(0));
sign.setLine(3, Integer.toString(extraData));
break;
case RECEIVER_CLOCK:
sign.setLine(0, WirelessRedstone.getStringManager().tagsReceiver.get(0));
sign.setLine(2, WirelessRedstone.getStringManager().tagsReceiverClockType.get(0));
sign.setLine(3, Integer.toString(extraData));
break;
}
sign.update();
InternalProvider.getCompatBlockData().setSignRotation(block, Utils.yawToFace(location.getYaw()));
return true;
}
and here is my updated one:
Sign sign = (Sign) block.getState();
sign.SignSide.setLine(1, channelName);
switch (type) {
case TRANSMITTER:
sign.SignSide.setLine(0, WirelessRedstone.getStringManager().tagsTransmitter.get(0));
break;
case SCREEN:
sign.SignSide.setLine(0, WirelessRedstone.getStringManager().tagsScreen.get(0));
break;
case RECEIVER:
sign.SignSide.setLine(0, WirelessRedstone.getStringManager().tagsReceiver.get(0));
sign.SignSide.setLine(2, WirelessRedstone.getStringManager().tagsReceiverDefaultType.get(0));
break;
case RECEIVER_INVERTER:
sign.SignSide.setLine(0, WirelessRedstone.getStringManager().tagsReceiver.get(0));
sign.SignSide.setLine(2, WirelessRedstone.getStringManager().tagsReceiverInverterType.get(0));
break;
case RECEIVER_SWITCH:
sign.SignSide.setLine(0, WirelessRedstone.getStringManager().tagsReceiver.get(0));
sign.SignSide.setLine(2, WirelessRedstone.getStringManager().tagsReceiverSwitchType.get(0));
break;
case RECEIVER_DELAYER:
sign.SignSide.setLine(0, WirelessRedstone.getStringManager().tagsReceiver.get(0));
sign.SignSide.setLine(2, WirelessRedstone.getStringManager().tagsReceiverDelayerType.get(0));
sign.SignSide.setLine(3, Integer.toString(extraData));
break;
case RECEIVER_CLOCK:
sign.SignSide.setLine(0, WirelessRedstone.getStringManager().tagsReceiver.get(0));
sign.SignSide.setLine(2, WirelessRedstone.getStringManager().tagsReceiverClockType.get(0));
sign.SignSide.setLine(3, Integer.toString(extraData));
break;
I get SignSide cannot be resolved, is it because I'm missing an import or am I misunderstanding the docs?
Here is the docs:
setLine Link icon
@Deprecated
void setLine(int index,
@NotNull
String line)
throws IndexOutOfBoundsException
Deprecated.
A sign may have multiple writable sides now. Use getSide(Side) and SignSide.setLine(int, String).
Sets the line of text at the specified index.
For example, setLine(0, "Line One") will set the first line of text to "Line One".
Parameters:
index - Line number to set the text at, starting from 0
line - New text to set at the specified index
Throws:
IndexOutOfBoundsException - If the index is out of the range 0..3
nvm after reading the api doc again and very slowly I got it lol
Is delux menue updated for. 1.21?
yes, read #general-plugins pins
Has anyone seen this before?
(Sorry for the picture, the error is from someone else)
something something arcane vouchers breaking on enable π€·
Yes but why 
the error is like 3 pixels tall idk
something about method not being available
idk the cause
π¬
hi
player has op, they can craft custom recipe
player doesnt have op, they cant craft custom recipe
im just using Bukkit#addRecipe(Recipe), i dont understand how op can even affect that π
issue was reported from a server admin, i dont feel like replicating it rn and probably wouldnt be able to cause no one else has reported it π
try using lp verbose
Β―_(γ)_/Β―
well ig you'd have to ask them to do so
someone probably knows the answer to the issue but I don't
π₯²
They didnβt even have luckperms installed
oh-
I had them install it and give themselves myplugin.* but still didnβt work
They have like 5 plugins, none of which do crafting stuff
wait wdym can't craft
like it just doesn't show up in the result?
Yeah
I do not understand how itβs possible
π
https://www.trustpilot.com/evaluate/srnyx.com
mmmmmmmmmmmmmmmmm
didn't see this until now
Omg what how u even find it
i decided to look through your bio lol
lol rate 5
π
Iβve flagged it so many times but trustpilot wonβt remove it. Theyβve removed other invalid ones Iβve flagged idk y not this one
Arent recipes added player-side too?
Yeah
I was doing this when working with them
Line 38-43
Its quite a mess but u can look here https://github.com/wxipwastaken/HeroSMPUtils/blob/master/src/main/java/network/geode/managers/RecipeManager.java
π
how do you guys write unit tests for dao classes? (as in how do you mock the db)
i was thinking i could maybe use h2 in-memory db but eh
sounds more like an integration test than a unit test
if your program supports sql storage then it should be fairly easy/simple to get it to use an h2 memory store
that's what luckperms does i believe for its sql storage tests
its more of an unit test but yeah h2 seems like the best option
if you were actually mocking the database then yes
but h2 is a real database
so its an integration test
shut the fuck up
average discord user nicknamed ANNOUNCEMENTS
Question about some depreciation
The method copyHeader(boolean) from the type YamlConfigurationOptions is deprecated but in the docs for spigot api there is no info on what to use instead, could someone point me in the right direction?
lmao deleted
https://paste.helpch.at/ebinacuxum.css help π
Just do it
Dont open this channel again smh Adam
It was reported by a single person and I didn't update the plugin in a while. One second π
we have a small ormlike inhouse framework, i had the task of implementing tests for its methods so yeah unit tests
but if youre using an actual database (like h2) then its an integration test
if you were using something like mockito to mock out the class that actually accesses the database, then it would be a unit test
interesting, we usually call the generic or rather overall tests integration tests
had to look up the definitions and it seems like im basically doing both for different tests, they are small in scale with mock objects but DO connect to an external db
I have a question about BukkitRunnables with runTaskTimer. I have 3 in one class because I have seperate times for my HideNSeek plugin. It starts with HidingTimer() then SeekingTimer() then Restarts(). But issue is I am having is that multiple of them are running even though I cancel them & return based on variables. I am confused because I see examples of that same thing I've done and supposedly they work.
public void HidingTimer() {
new BukkitRunnable() {
int timeLeft = hidingTime;
@Override
public void run() {
if (!hasGameStarted) {
StopGame();
this.cancel();
return;
}
int minutes = timeLeft / 60;
int seconds = timeLeft % 60;
String timeString = String.format("%02d:%02d", minutes, seconds);
sObjective.setDisplayName(ChatColor.GREEN + "Released In " + ChatColor.RED + ChatColor.BOLD + timeString);
hObjective.setDisplayName(ChatColor.GREEN + "Seeker Released In " + ChatColor.RED + ChatColor.BOLD + timeString);
if (timeLeft <= 0) {
isHidingPhase = false;
SeekingTimer();
Player seekerPlayer = Bukkit.getPlayer(seekers.get(0));
if (seekerPlayer != null) {
seekerPlayer.removePotionEffect(PotionEffectType.BLINDNESS);
}
this.cancel();
return;
}
timeLeft--;
}
}.runTaskTimer(plugin, 0, 20);
}
probably would need more code, but what specifically do you mean by multiple of them running?
and are you sure that you're calling HidingTimer() only once?
also unrelated im assuming you are coming from c#, but methods are camelCase in java rather than PascalCase
and we probably need more code to see where these methods are called, chances are these are cancelling and you are running more
You would be correct.
So, I thought when you cancelled it it stopped it from running. You would call it again to run this and this cancel out of it unless It dosen't.
?
yo
what do you want to tell us
"the plugin"
that's still like 0 information
Do you even have proper jdk version for the plugin you're compiling?
y6es
Send a screenshot.
no perms
Download JRE for that version.
ok leme try
click ctrl alt shift s
did
and i think theres like a JDK option
is it red?
still says invalid
oh
do you have a jdk installed?
like did you download and install one from the internet
yea
i tried 2 versions
java 17
and java 21
nopoe didnt work after downloading once again
still the same error
should i try reinstalling ide
I don't think reinstallation would fix it
I can't really go in detail right now though because I'm kinda busy but maybe someone else can help
but it should be fixable through this menu
aighyt bro
I am having a hard time finding anything on setting custom skins through spigot. I just want a simple way of setting skins & resetting. Would anybody have examples for 1.21
Like custom models or npc skins?
Not NPCs actual players.
Oh, I could be wrong but not fully sure if thatβs possible..?
public void SetSkin(Player player) {
PlayerProfile profile = player.getPlayerProfile();
int randomSkin = new Random().nextInt(skins.size());
PlayerTextures texture = profile.getTextures();
try {
texture.setSkin(new URL(skins.get(randomSkin)));
} catch (MalformedURLException e) {
throw new RuntimeException(e);
}
profile.setTextures(texture);
profile.update();
}
I saw something about player profiles and wanted to check out to see if that would work.
Hmm
Myguy there has been multiple custom skin managers for spigot.
Not fully sure, the only time I use profiles is for player heads
I said I could be wrong, meaning Iβm not fully sure..
Isn't that a bit complex.
I mean yeah I guess but it's probably your best source
I don't know of any other disguise plugins like that still currently in development
I am doing a minor little thing and its such a pain.
i remember changing a players skin using nms was like
profile properties.removeAll("textures"), applying the new texture, hide the player then show the player, send removed player packet add player packet + update name
like it was weird
but it worked
thats exactly what it is but the packets names have changed
public void SetSkin(Player player) {
CraftPlayer craftPlayer = (CraftPlayer)player;
GameProfile profile = craftPlayer.getProfile();
ServerGamePacketListenerImpl connection = craftPlayer.getHandle().connection;
connection.sendPacket(new ClientboundPlayerInfoRemovePacket()));
int randomSkin = new Random().nextInt(skins.size());
Property property = new Property("textures", skins.get(randomSkin));
plugin.getLogger().log(Level.WARNING, skins.get(randomSkin).toString());
profile.getProperties().removeAll("textures");
profile.getProperties().put("textures", property);
connection.sendPacket(new ClientboundPlayerInfoUpdatePacket(ClientboundPlayerInfoUpdatePacket.Action.ADD_PLAYER, ((CraftPlayer)player).getHandle()));
}
I got it to not make any errors but I just think its just more figuring out if I am doing the proper thing with the packets.
i would try this
You may need to ClientboundRespawnPacket(CommonPlayerSpawnInfo, (byte) 0) aswell
Have you done custom skins before?
i created a command that allows players to take another players skin at one point
best way to work with custom skins is to track how Minecraft does it and then copy it
that way u don't have to just keep trying and failing
I just want to use a simple system use mine skins.
have my config read the urls and picks a random one boom.
Its just more or less figuring out how to do this. I am not very familiar with Minecraft Networking and seems like a pain.
there's a tutorial online about creating a player with NMS and he goes over some skin stuff
smth like that might be what you need
Yeah, but the methods has changed myguy.
1.16.5 vs 1.21
They have diff names
are you sure the method has actually changed or maybe they are just using different mappings
It used to be named PacketPlayOutInfo something
thsts the same thing as Clientbound
ah damn, nvm I was working with packets in different mappings recently and got confused
In WorldEdit, you can paste with the -o command in order to ignore all the relative positions and paste at the original copy spot. That's for the plugin.
Currently, Iβm using the API, and when copying it takes locations (the corners), but when pasting, it only uses one location to paste. I want to paste the schematic at the copied location (essentially allowing me to βresetβ an arena map), but I donβt see an option like ignore relative paste or anything like that.
For example, Operation has a to, which accepts a BlockVector3 but it's just a single location. I'm not sure how the pasting system would work (like which corner would I paste to?).
final Operation operation =
new ClipboardHolder(clipboard)
.createPaste(session)
.to(BlockVector3.at(x, y, z))
.ignoreAirBlocks(false)
.build();
Given that I have the two corner locations, how can I acheive it so it pastes directly between these corners.
Would it be ClipBoard#getOrigin be the location I paste to
hi! im creating a mini-game plugin and I need to unload and load a world. There is an issue with this way, but I dont find what is wrong, anyone knows? The first link is the issue, the world is not loaded correctly. The secong link is the code.
https://streamable.com/sjuy0f
https://pastes.dev/Bor3Q0Bf0V
it seems to work
[17:52:37 INFO]: [ChunkHolderManager] Halted chunk system for world 'world_nether'
[17:52:37 INFO]: Preparing start region for dimension minecraft:the_nether
[17:52:37 INFO]: Time elapsed: 56 ms```
but it does not be load correctly
hello
I'm looking for a developer who is willing to update an outdated plugin to 1.20.6. I'll pay
I hope this is the right channel to ask
public void SetSkin(Player player) {
protocolManager = ProtocolLibrary.getProtocolManager();
PacketContainer packet = new PacketContainer(PacketType.Play.Server.PLAYER_INFO);
WrappedGameProfile profile = new WrappedGameProfile(player.getUniqueId(), player.getName());
int randomSkin = new Random().nextInt(skins.size());
Skin skin = skins.get(randomSkin);
WrappedSignedProperty texture = new WrappedSignedProperty("textures", skin.getValue(), skin.getSignature());
profile.getProperties().put("textures", texture);
protocolManager.sendServerPacket(player, packet);
}
I am now using ProtocolLib. I am not sure how to replace a players skin at this point. I've looked everywhere for refs but they have no use to me cause they are using some sort of api they built that does other things.
this is still a thing in 1.20
hey yk this code works perfectly if you run it when the player joins
except you didn't actually specify the player id in the client remove packet
I am not trying to change the skin when they join.
yes but that is a big clue
that it's probably not very hard to make it work from there
I don't even think I create a remove packet
yea you didnt do anything with it
So where is it lmao
well you did create it but didn't actually remove anything
Am I suppose to access the packet variable and add/remove
ill lyk if i figure out how to do it on demand
gonna analyze the packets sent from server to client rn to see what minecraft is doing
Ah you using the code I sent?
damn it changes in the tab list but not from the goddamn world
with a bit of modifications your code.. sorta works... the issue is the client doesn't realize it needs to change its skin
you can force it to by for example, /killing the player
but there's probably some more clever way
no.
Its just the proper packets aren't being sent.
its either player update packet or despawn then respawn the player
public void SetSkin(Player player) {
protocolManager = ProtocolLibrary.getProtocolManager();
PacketContainer removePacket = protocolManager.createPacket(PacketType.Play.Server.PLAYER_INFO_REMOVE);
removePacket.getUUIDLists().write(0, Collections.singletonList(player.getUniqueId()));
protocolManager.sendServerPacket(player, removePacket);
PacketContainer addPacket = protocolManager.createPacket(PacketType.Play.Server.PLAYER_INFO);
addPacket.getPlayerInfoActions().write(0, EnumSet.of(EnumWrappers.PlayerInfoAction.ADD_PLAYER));
addPacket.getPlayerInfoDataLists().write(1, Collections.singletonList(new PlayerInfoData(
new WrappedGameProfile(player.getUniqueId(), player.getName()),
player.getPing(),
EnumWrappers.NativeGameMode.SURVIVAL,
WrappedChatComponent.fromText(player.getName())
)));
int randomSkin = new Random().nextInt(skins.size());
Skin skin = skins.get(randomSkin);
//WrappedSignedProperty texture = new WrappedSignedProperty("textures", skin.getValue(), skin.getSignature());
//profile.getProperties().put("textures", texture);
protocolManager.sendServerPacket(player, addPacket);
}
There is an remove & add.
I did this and when I do /kill my skin is an alex.
you need to send it to everyone
not the player being their skin changed
@deep patrol
If you sendServerPacket. Does that update it for the player or everybody else.
Huh
Yes.
My code.
addPacket.getPlayerInfoDataLists().write(1, Collections.singletonList(new PlayerInfoData(
new WrappedGameProfile(player.getUniqueId(),
the uuid here needs to be the targer person
and the packet needs to be sent to all players
(or the ones close by)
i dont use protocol libs
so i am not sure the exact stuff in it
I do have the mappings for it but its even more confusing.
I just didn't know at this point.
How would I do this without protocol lib? Creating a packet
ClientboundPlayerInfoRemovePacket removePacket = new ClientboundPlayerInfoRemovePacket(Collections.singletonList(player.getUniqueId()));
public void SetSkin(Player player) {
CraftPlayer craftPlayer = (CraftPlayer)player;
ServerPlayer serverPlayer = craftPlayer.getHandle();
GameProfile profile = serverPlayer.getGameProfile();
ServerGamePacketListenerImpl connection = serverPlayer.connection;
ClientboundPlayerInfoRemovePacket removePacket = new ClientboundPlayerInfoRemovePacket(Collections.singletonList(player.getUniqueId()));
connection.sendPacket(removePacket);
int randomSkin = new Random().nextInt(skins.size());
Property property = new Property("textures", skins.get(randomSkin).value, skins.get(randomSkin).signature);
profile.getProperties().removeAll("textures");
profile.getProperties().put("textures", property);
ClientboundPlayerInfoUpdatePacket addPacket = new ClientboundPlayerInfoUpdatePacket(ClientboundPlayerInfoUpdatePacket.Action.ADD_PLAYER, serverPlayer);
connection.sendPacket(addPacket);
Level level = serverPlayer.level();
CommonPlayerSpawnInfo playerSpawnInfo = new CommonPlayerSpawnInfo(
level.dimensionTypeRegistration(),
level.dimension(),
0,
serverPlayer.gameMode.getGameModeForPlayer(),
serverPlayer.gameMode.getPreviousGameModeForPlayer(),
level.isDebug(),
true,
Optional.of(GlobalPos.of(level.dimension(), serverPlayer.getOnPos())),
serverPlayer.getPortalCooldown()
);
ClientboundRespawnPacket respawnPacket = new ClientboundRespawnPacket(playerSpawnInfo, (byte) 0x01);
connection.sendPacket(respawnPacket);
skinStorage.put(player.getUniqueId(), randomSkin);
}
I fixed it the only issue when I use the respawn packet it takes forever to long back in the tab still shows nothing and the skin layers are glitched but when I do /kill they are fine.
might have to do with packet order or smt
i havent done skins before
you could probably kill them clientside worst case
with packets
You don't need to its just respawn but I am not sure how to do it without it taking 10 years to findout.
It wouldn't matter because you cannot cancel the death event.
as in send the death packet
send the other player info update packets
that fixed the tab stuff for me
gaslighting me is very productive
you can also use Paper's profile API and it'll take care of everything for you :)
https://mclo.gs/659IHvB Moin with me it does not recognize it as PlaceholderExpansion
Please can anyone help me
I've already found a solution
Hi Prestley<3
does anyone know a way show ActionBar title in 1.20.1?
I used me.lemonypancake's ActionBarAPI back in 1.19.4
Problem solved! Thanks guys
Guys, how do you guys reload your plugin when you guys are developing?
Am i the only one who thinks reopening the server takes too much time?
if you use the paper plugin on gradle you can rerun etc quite easily
as in update file, rerun the server etc
or you can use a custom build script
That's probably more convoluted than it needs to be.
You could probably use the plugin Aki mentioned and run a debug over the run server task and then you could do it from there.
Holyyy
Never knew this feature
this is crazy
life changer
Thanks alot!!!
@stuck hearth love you
does Bukkit.getPlayer("SomeName") return a player if there's a player SomeNameTwo online?
i believe so, it gives the closest match afaik
yeah I guess so too
I suppose it's for mistypes or for not needing to type full player name
have to re-do most of my stuff to getPlayerExact now 
i wonder how many plugins are using getPlayer instead of getPlayerExact
feels like that could cause some issues
some possible exploits βοΈ
most of them, most devs don't even know about that behaviour or that other method
who even needs the closest match
my favorite part is giving it an empty string returns the first player online in the getOfflinePlayers list

Ah yes, the "expected behavious"
Is that just a case insensitive search?
getPlayer? No. It does partial matches as well
Oh god, I was focusing on that break and I didn't see the very last return π
Welp, time to change the code of all of my plugins 
also getPlayerExact isn't an exact match either, it's case insensitive :^)

anyways, is it possible to create a chest (visible, interactable) for a specific player only? Is it possible using packets?
Yes, why not, but you probably need to use packets for interaction as well
i mean uh you can probably do that with just the api, with the inv open event, checking the block and opening your own inventory instead
ya but if you wanted a block that existed for only one player you'd need packets
oh yeah i missed that part
there's sendBlockChange or w/e but you'll have to deal with the server sending back the correct block and stuff
yea that would be annoying
So there is a conflict I think where Player#getLocation is marked with @NotNull but OfflinePlayer#getLocation is marked with @Nullable. As a result, Checker Framework is acting up and saying that the method returns an @Nullable Location, and I have to cast (@NonNull Location) every time I use the method so it doesnβt mark it as an error.
Does anyone know how I could fix this issue. I hate seeing the redundant casts in my code
I'd assume this should be handled by checkerframework, but I didn't find anything about that
Who tf is annotating these Bukkit classes β οΈ
// ignore all
I think the OfflinePlayer method is nullable because the class doesn't necessarily represent a player that has joined the server. Although idk why it has a getLocation method π
from my understanding it even returns a location if the player is offline, but only if the player played on the server before?
Yeah
I mean it makes sense then this way, but the return type is basically covariant with respect to nullability and I'd expect checkerframework to deal with that properly
Yeah I assumed that the lower classes annotations should override any above classes annotations
Oh well. Maybe Iβll just add a method to my class which gets the location anyways and annotate it with @NonNull. I have a GamePlayer class that wraps a Player object anyways
hey, i been trying to use placeholderapi in my plugin (not create my own placeholder, use statistic placeholder) and idk what i been doing wrong
post ur code to paste.helpch.at and the submit the link
we cant try to help without seeing ur code of what youve been trying
also show the placeholder youve been trying to parse
the full thing
so %yourplugin_placeholder% for example
Ahh ill try when i will get back home
Does anybody know how to create a cloudflare pages app using typescript?
This is the command that I use and it generates the template with js 
npm create cloudflare -- <directory> --framework react --ts true --deploy false
Is this channel just for dev support in general
or like specifically for minecraft development
Guys, I am currently using SQLite to store all my user data and things.
However, I have a concern about server lag.
I made a separate leveling system in my plugin and might have to save it to db every second, will this lag my server if a lot of players use it?
or should I make a system that loads everything into db every certain period?
NVM making a system that writes back to DB every certain period
it's general but the chances of you getting support with other things goes down exponentially in relation to degrees away from minecraft dev
Ok I got everything mostly working now just that one problem keeps persisting
I have to use the ?v2 flag at the end for one page or it will show up as not found and same with some static files like css and js
Some static files i need to go up to v5 to get the actual version stored in the folder
can you pastebin your nginx config
I already fixed it by now
I jus gave up and switched from Flask to Django and now it works fine
nice
almost at least my css is still kinda crap lol
but that is just bcs i suck at making good css ig
I have a few inputs created with this function https://paste.helpch.at/qiwasasemu.js, but as soon I add a handler for onChange I can not type in the input anymore π any idea why? π
const [className, setClassName] = useState('');
[...]
createField('class', 'Class', setClassName)
you have to specify the value of the field
value={className}
onChange={e => setClassName(e.target.value)}
What are you trying to do?
Because right now you are causing the component to re-render on every key press, which is why it loses focus
display a set of fields based on the value of a select (for option a display 1 field, for option b display 3, etc.), then use their values for a request
ofc the code is a mess
there can be 1000 reasons why it behaves weird
A select or a text field? 
Select, this (Class) is one of the fields controlled by it
Then why are you updating the text field on change? Shouldn't the select be the one updating the component?
I want to store the value of the input in that state, is onChange not the function I should use?
or is it onInput 
The issue is the state, because the state is attached to the component it causes a re-render on value change which isn't what you want, just use a variable to store the input instead
this is react, right?
Yes
yeah the issue is if a state in your component changes, this function gets called, which causes the field to be re-rendered, so in this case every time you call setClassname
shade net.kyori.option
yup, that worked
yup
Pointers have been there forever
And are pretty useful if you're using a platform that doesn't suck
Or even if you are
step 1 dont use checker framework
Yeah static code analysis
also u dont have to annotation spam cuz it inserts them into the bytecode at the end
oh? wdym
assumes @NonNull for everything unless u mark @Nullable
if u decompile the final product it inserts all annotations even if u didnt
hmm why so
because like if you forget to annotate it then it's safer to assume nullable
and then it'd trigger the code analysis if you need it notnull
hm that's true
also guess what pulse
Good shit good shit good shit
I do in fact remember
It was a very long time ago lmao
lol yeah
@void orchid bird?
Yeah haha
π
i remember when i first joined the server Gaby kicked me cause i was being annoying lmao
nicee
did I? lol
lol
TOCTOU!
for all checkerframework knows, this.announcement could have changed by a different thread by the time you use it again
put it into a local variable then use that in both places
that's its whole purpose π
lol I never knew
I just assumed it was like other libraries
where it just has the annotations + IDEs do the stuff
if you forget youll get an error because checkerframeworks analysis is sound actually nvm soundness isnt rly that related its more that it just checks at all
wdym
or I guess if I try setting it to null
yeah
idk I still think nullable is better but I guess you can't really have it notnull accidentally so its not a big deal
Oh that's why
I ended up just making my classes extend a higher class so it doesn't have to pass null for an argument to set this.announcement to null
oh yeah whoops I just ignored your question lol
but kotlin has that same behavior as well
can someone help me to make a meun close when an object has been clicked? and make it so i cannot take out stuff or add stuff into the menu
public void onInventoryClick(InventoryClickEvent event) {
if (event.getView().getTitle().equals("Customize Kit")) {
event.setCancelled(true); // Prevent item taking or dropping
// Allow players to move items around in the GUI
if (event.getCurrentItem() != null) {
Material type = event.getCurrentItem().getType();
if (type == Material.BLACK_STAINED_GLASS_PANE) {
event.setCancelled(true); // Prevent interaction with black stained glass panes
} else if (type == Material.RED_WOOL) {
// Close the GUI when red_wool is clicked
Player player = (Player) event.getWhoClicked();
player.closeInventory();
} else if (type == Material.LIME_WOOL) {
// Save the customized kit for this player
Player player = (Player) event.getWhoClicked();
savePlayerKit(player);
player.sendMessage("Your customized kit has been saved!");
}
}
}
}```
this aint working for me
you can't call closeInventory directly in the click event, you should use the bukkitscheduler to close it on the next tick
https://jd.papermc.io/paper/1.21/org/bukkit/event/inventory/InventoryClickEvent.html
Methods that change the view a player is looking at should never be invoked by an EventHandler for InventoryClickEvent using the HumanEntity or InventoryView associated with this event. Examples of these include:
HumanEntity.closeInventory()
HumanEntity.openInventory(Inventory)
HumanEntity.openWorkbench(Location, boolean)
HumanEntity.openEnchanting(Location, boolean)
InventoryView.close()To invoke one of these methods, schedule a task using
BukkitScheduler.runTask(Plugin, Runnable), which will run the task on the next tick. Also be aware that this is not an exhaustive list, and other methods could potentially create issues as well.
im sorry for disturbing i have fixed it thanks though!
all good
β€οΈ
Hey guys, is there anyone here that would like to be a dev on my server? Weβve been having issues and need help!
It is a velocity server
Just dm me if you can help out
u have a whole server on a proxy, impressive
Well soon it will be public (hopefully soon)
it actually is or u didint get my sarcasm?
Lol
??? Iβm confused π
brother
u need to calm down man
its just useless information with the context, u ask ppl to help ur server dev wise, and the information u choose to share is that u use the most popular proxy
i dont know if its just me but most of my server development happens on actual minecraft servers
It is an actual Minecraft server
theres so much u could had shared, gamemode, even in general where u need help etc but u share what kind of proxy u use
A proxy is connected servers..
thats it, poked fun at that
(Iβm still confused)
brother, a proxy is what proxies connections to your minecraft servers
Wut
π
me too buddy
My question is what is wrong with a proxy server, and wdym βactual Minecraft serversβ
nothings wrong with it, its just not the most important information to give when looking for devs
its like when a mechanic asks what car u have and u say a blue one
And what do you mean βactual Minecraft serversβ
Iβm using paper
i think you guys are both overthinking this too much π₯²
hypixel (which is a network) is commonly referred to as a server,
and Wuzzy's main point is that there needs to be more information if you want people to help (and it's unlikely for people to DM with no info)
also this isn't really the right channel
#general-plugins or #minecraft could probably work depending on the case
or #1257956027026903050 / #1257956028063027243 if you want
I did in request free
creating H2 database in bukkit
it should create it when connecting to database
how ever what path should be there
since it doesnt allow to create file
huh
tony falk adventures
someone should make a comic
bro will bash anything that isnt made by him
his code is the cleanest
his name is.. Tony, Tony Falk
what π π
Basically h2 creates file on connection now , u need to write the entire fucking path to ur plug-in folder otherwise it get denied no permission
Path#toAbsolutePath ?
sounds like a you problem
yeah no
lmao what
How do I upload the a PlaceholderPAPI plugin to the eCloud?
what on earth are you on about
If you dont know what ecloud is google it i aint your search engine lmfao
he's promoting his smoke shop!!!1
I been there it's great
Fr man
ecloud is a part of placeholderapi?
Yeah a fine smoke shop
respond to #placeholder-api message
I'm working on a plugin to track things that players do ingame, if I want to listen to the event last, it's MONITOR right that I listen to?
yes
Is there a way to set different Java versions for different tasks? I want my build task to use 17 while the runServer task has to use 21, any ideas?
is it part of like the gradle plugin?
the plugin would probably run java -jar server.jar allowing it to change the java version via some configuration
but I never used it so idk
but I don't think gradle itself runs on any specific java version
you can specify the launcher used in the runServer task
or the compiler toolchain used in the compile task
if you give me half an hour to get out of bed I'll give you an example 
alternatively use java 21 toolchain for everything, and set the compiler release flag to 17
those are different, the first one is referring to the task javaToolchains, the second one isn't in the tasks scope so it's using the project's javaToolchain
I hate that
just use the -release flag when to compile
java {
...
toolchain.languageVersion.set(JavaLanguageVersion.of(21))
}
tasks.withType<JavaCompile> {
options {
release.set(17)
}
}
that seems to have worked, how do I check if it's compatble with that
compatible?
i mean if the compiled jar is now compiled against j17
tbf this will also compile tests for 17 which sounds undesirable in this case
lmao didnt see u alrdy said taht
is it possible to make like a mcmmo leaderboard
with like holograms
1-10 power level display
everything is possible
show your pom.xml/build.gradle
hey there guys, im making a iceboat racing plugin for my server. and this is the error i found
alright sure.. wait
It seems like you're including the PAPI plugin inside your jar
Can anyone help me convert a source code to a .jar file.
https://github.com/BetterGUI-MC/BetterForms
if you add line 26 to the placeholderapi one as well then it should work
by default, the scope is compiled, meaning that it'll be compiled into the plugin as well
tried it and doesn't seem to work.
π€
did you try mvn clean package?
hmmm
Open the jar and check
should i just manually open my plugin jar?
7zip for example
it's just a zip file
yep, im confused right now.. could you explain?
Can anyone help me convert a source code to a .jar file.
https://github.com/BetterGUI-MC/BetterForms
a jar file is just a zip file, so you can open it with winrar or 7zip or whatever your preferred zip archiving tool is
there isn't really a lot to explain, a jar file is just a zip file
yeah
yeah it shouldn't
alright so how do i get rid of it?
how are you building/compiling your plugin?
also you might wanna update the maven-jar-plugin, the latest version is 3.4.2 lol
https://maven.apache.org/plugins/maven-jar-plugin/
doubt that's gonna fix the issue but uhhh yeah
nice
Can anyone help me convert a source code to a .jar file.
https://github.com/BetterGUI-MC/BetterForms
hello, I'm trying to implement adventure api in a spigot plugin, but I'm getting a NoClassDefFound
Logs: https://mclo.gs/tTmIk9G
Plugin class: https://pastebin.com/P1ZvfFhF
Build file: https://pastebin.com/rHCvq5bx
You have to bundle adventure-bukkit with your plugin JAR file
you need to use shadow if you want to shade dependencies (creating a fat jar by including the dependencies in it)
https://github.com/Goooler/shadow
and run the shadowJar task instead of jar/build (or make build task depend on shadowJar)
Quote from emily.ar that best explains what you have to do
What is the best way to spawn loots in a map? in chest and barrels
cache locations and/or chests
then populate
if you want to populate without predetermined chest locs
look into procedural gen algorithms
https://hub.spigotmc.org/javadocs/spigot/org/bukkit/event/world/LootGenerateEvent.html there is this event, maybe it helps
declaration: package: org.bukkit.event.world, class: LootGenerateEvent
Hello, I would like to publish my Money API on Github so that others can use it. Is anyone familiar with Jitpack and could explain how to set this up?
can you link the repo?
iirc jitpack usually doesn't require any extra setup
this is the repo: https://github.com/DevHarmonizer/PixelPayAPI
there are at least 2 red flags
in your repo
can't say that my repos are better so it evens out
im here for tips so im happy to hear it
nah i don;t have tips, i like sometimes like to shit on other peoples work for no actual reason
so do you know how to include Jitpack in my API?
open jitpack site it literally tells you what to do
This is the way, it'll verify it's even a valid version to use
I think I have managed it, could someone possibly test whether it really works and then write to me privately?
Jitpack will tell you when you request a version on the website.
It'll attempt to build it, and if it can't it'll have a red paper thing you can click and see the log
Or green if it's good, log is still there either way
ok thanks
da maven repo as an image
amazing
that is very nice
What differences are there between CompletableFuture#handleAsync(...) and CommpletableFuture#supplyAsync(...) outside of the latter apparently being static?
one creates a cf and one adds a completion stage on top of another cf
And which is which?
I assume handle adds and supply creates? Given supply is static and handle is not, therefore requiring a pre-existing CF instance
Also, is there any other notable difference, or could I use them interchangably?
Like could I switch
CompletableFuture<Something> cf = new CompletableFuture<>();
cf.handleAsync((something, ex) -> ...);
with
CompletableFuture.supplyAsync(() -> ...);
and it would work the same?
Actually, I can already see the differences here
the lambda passed to handleAsync is called when the receiver completes
handleAsync is used to process the result of a CompletableFuture when it completes, either normally or with an exception
CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> {
// Some computation
return 1;
});
CompletableFuture<String> handledFuture = future.handleAsync((result, ex) -> {
if (ex != null) {
return "Failed: " + ex.getMessage();
} else {
return "Result: " + result;
}
});
supplyAsync is used to start an asynchronous computation that supplies a result
CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> {
return 1;
});
You won't be able to upload images here directly to avoid spam, so please use https://imgur.com/upload or similar service to upload images/screenshots.
i'm wondering if there's a way to make a initalize an NMS ServerPlayer without calling getPlayerAdvancements()
https://imgur.com/a/vMoVYkz
because it's really unoptimized by pufferfish/vanilla server
and it makes the server lag
by fetching an NPC's advancements
and in this case the NMS NPC is used for making per/player custom tablists
I don't really wanna rebuild pufferfish to just fix this bug
but I might have to
but i'm here to ask that if there may be another way to fix this
how can I do that?
^ found it
might try but i will check if i can get around it using reflection
damn because i use purpur applying patches will be alot harder
maybe i'll try my luck with this one
If this is all you're doing using packets is probably the better way to do it
I dont think you can do it without using ServerPlayer
public ClientboundPlayerInfoUpdatePacket(EnumSet<ClientboundPlayerInfoUpdatePacket.Action> actions, ClientboundPlayerInfoUpdatePacket.Entry entry) {
this.actions = actions;
this.entries = List.of(entry);
}```
you can pass in an entry which is less complex
```java
public static record Entry(
UUID profileId,
@Nullable GameProfile profile,
boolean listed,
int latency,
GameType gameMode,
@Nullable Component displayName,
@Nullable RemoteChatSession.Data chatSession
)```
most of the other packet stuff is done with entity id's isn't it
you absolutely can do this without the extra boiler plate, just gotta be a big boy and figure it out
In 1.21 you must provide ServerPlayer in a ClientboundPlayerInfoUpdatePacket
and yes that what I use.
maybe its possible to circumvent this stupid change by just initalizing a ClientboundPlayerInfoUpdatePacket using reflection
Yea I can try, idk why the f they would do this lol
to just require ServerPlayers instead of entries lol
thanks this worked! π
is it ok to ask questions here?
yes, although note that this is coding help
perfect
thank you
I'm trying to make a custom fox entity by extending EntityFox. Its going well so far, but the method to add trusted players is friendly in nms meaning I can't call it from my subclass. What's the best way to add player UUID's to the fox's trust list?
wdym "is friendly"?
access modifier
friendly isn't an access modifier
but there seems to be a getTrustedUUIDs() method that you may be able to override
oh
another name is default
its no modifier
