#help-development
1 messages · Page 1328 of 1
is there any guide on the forums for mod x plugin communication?
In regards to spigot plugins that act as the service layer between client side mods.
Plugin messages
might be doing something silly, using paper 1.21.11 jar, 1.21.11-R0.2-SNAPSHOT, getting this when I try to set gamerules?
Class org.bukkit.GameRule does not have member field 'org.bukkit.GameRule MOB_DROPS'
happening with a few, SPAWN_MOBS is doing it too
yeah, these are the fields that the server has [06:34:59 INFO]: [Pink-Core - INFO] ANNOUNCE_ADVANCEMENTS, COMMAND_BLOCK_OUTPUT, DISABLE_PLAYER_MOVEMENT_CHECK, DISABLE_ELYTRA_MOVEMENT_CHECK, DO_DAYLIGHT_CYCLE, DO_ENTITY_DROPS, DO_FIRE_TICK, DO_LIMITED_CRAFTING, PROJECTILES_CAN_BREAK_BLOCKS, DO_MOB_LOOT, DO_MOB_SPAWNING, DO_TILE_DROPS, DO_WEATHER_CYCLE, KEEP_INVENTORY, LOG_ADMIN_COMMANDS, MOB_GRIEFING, NATURAL_REGENERATION, REDUCED_DEBUG_INFO, SEND_COMMAND_FEEDBACK, SHOW_DEATH_MESSAGES, SPECTATORS_GENERATE_CHUNKS, DISABLE_RAIDS, DO_INSOMNIA, DO_IMMEDIATE_RESPAWN, DROWNING_DAMAGE, FALL_DAMAGE, FIRE_DAMAGE, FREEZE_DAMAGE, DO_PATROL_SPAWNING, DO_TRADER_SPAWNING, DO_WARDEN_SPAWNING, FORGIVE_DEAD_PLAYERS, UNIVERSAL_ANGER, BLOCK_EXPLOSION_DROP_DECAY, MOB_EXPLOSION_DROP_DECAY, TNT_EXPLOSION_DROP_DECAY, WATER_SOURCE_CONVERSION, LAVA_SOURCE_CONVERSION, GLOBAL_SOUND_EVENTS, DO_VINES_SPREAD, ENDER_PEARLS_VANISH_ON_DEATH, ALLOW_FIRE_TICKS_AWAY_FROM_PLAYER, TNT_EXPLODES, LOCATOR_BAR, PVP, SPAWN_MONSTERS, ALLOW_ENTERING_NETHER_USING_PORTALS, COMMAND_BLOCKS_ENABLED, SPAWNER_BLOCKS_ENABLED, RANDOM_TICK_SPEED, SPAWN_RADIUS, MAX_ENTITY_CRAMMING, MAX_COMMAND_CHAIN_LENGTH, MAX_COMMAND_FORK_COUNT, COMMAND_MODIFICATION_BLOCK_LIMIT, PLAYERS_SLEEPING_PERCENTAGE, SNOW_ACCUMULATION_HEIGHT, PLAYERS_NETHER_PORTAL_DEFAULT_DELAY, PLAYERS_NETHER_PORTAL_CREATIVE_DELAY, MINECART_MAX_SPEED, and these are mine https://sourceb.in/qEXCPV1hYh ?
Are you developing for spigot but using paper jar for server ?
yeah, thats something i've always done with no issue as I thought it was backwards compatible, is it not anymore?
Paper hard forked so there can now be bigger changes.
Someone please correct me.
I think you need multi-module dev setup to create parts for spigot and paper if you want to support both.
ah, thanks for that, the branch im working on for the project hasn't been transferred to folia which is something that we're doing slowly yet, so once that happens, I'll probably end up using the paper api anyway - ill just leave the missing ones commented for now, thanks 🙂
I had a question what is considered a good tps for 500 villagers inside of one chunk? without the AI turned off?
I am making my own custom TPSResilience plugin right now and I have been able to get 13.78 tps at 722 chickens and 655 villagers in one chunk. it isnt great but I dont think its bad?
Try playing survival with that TPS then.
It's bad
Sorry I mean its not bad in retrospect of not limiting spawn rates and removing AI functions from villlagers I am kinda curious what other servers tps would be at at that many villagers from my understanding tps would start plummiting at 50 villagers 500 is definitely a stride and 1,000 has been achieved with turning off the AI that the villagers use.
I am still refining currently what is occuring is that collisions are causing issues which I am fixing that as we speak.
You’d want tps to be 20 you’re welcome. Mspt 50 or less
The idea is to create server resistance against people who like to lag out servers so we can identify it before it gets out of hand.
@rotund ravine No durr, but again I am trying to compare to other servers with high entity situations like villagers.
it helps me understand where and what I can refine for my plugin
I am running a factions + survival server on one map on one server with both claims occuring on the same map, I know I will get people who troll which is why I am trying to create my own solutions to problems ahead of time.
nothing what spigot provides will save you here. most big servers either have multiple servers clustered together to spread the load or use "optimizations" like entity stacker. they also (most of the time) have their own server software fork, where they build in optimizations such as async entity ticking and stuff.
I see, I was able to get to 750 entities in one chunk with 20tps but my plugin ran into issues past that. Thats super interesting about multiple clusters, I plan to run this on a dell r720 with 48 cores. Interesting I will have to implement my own parallel processing for mobs it might actually help with what I am trying to accomplish, I decided to add a secondary system which stacks mobs by closes neighbor if over the 300 base entity limit. Good to note you can parallel process them W reply.
750 villager entities to be specific
parallel processing for mob AI?
many factors to consider with that, it's not smooth sailing unfortunately
Also with an R720 expect far worse performance than your pc. Core count won't be of much use
My mistake I am tired
"
Async is a Fabric mod designed to improve entity performance by processing entities in parallel using multiple CPU cores and threads. It aims to maintain stable TPS (ticks per second) even with large numbers of entities, such as 9,000 villagers, by leveraging multithreading.< multi threading leveraging."
It seems this is difficult as we cannot modify how minecraft itself handles it. I am instead taking the approach of manipulating the AI functions to see if that helps push me into the 1000 villagers range in a chunk.
You are more than likely correct, I do wanna fix that at one point but I just recently got into creating my own plugins. So I am simply having fun and seeing the limitations to minecraft with quick wins and losing where I need to to figure out a architecture that might allow me to fix these issues.
Why you need so many villagers in a chunk
U are gonna fry the client
No matter how beefy
I've seen many plugins which claim to fix large entity count stuff and none really ever work well. Best course of action is just entity stacking
I am testing my plugins resilience since it is a custom plugin. I am attempting to run a factions / survival server on one map while attempting to keep it semi vanilla including redstone (other than custom plugins that reduce TPS issues from autofarms)
this, most likely. by giving the bad-intend users a wider range of abusing the system, you give them the chance to have impact on your players
The problem with async AI is that chunk access isn't threadsafe
Entity stacking is great I am implementing that but allowing a base amount of mobs that stick to original AI functions.
i think best option would be to write a detection system for the bad-intends, rather than trying to fight them
which is really hard, since you have to differentiate "i want to have a HUGE chicken farm!" from "i will crash the server with LOTS of chicken!"
There's a billion solutions for that
game over once someone builds a KFC fabric
just not allowing chicken to spawn. boom, checkmate
That's like the use case for stacking plugins
Excluding vanilla spawns
Only area based merging
yeah you're right. i was joking anyways. but in terms of villagers which have a profession it's not that easy i fear
Agreed its more that villagers cause higher tps issues because of their AI and how it works their tickrate cost per say.
To get all trades you need what like 40
I have every spawner in the game in my /shop I do not doubt someone will find an abuse.
yeah, but you can't just stack them together since you can't cover all trades in a x40 villager
so you basically have to let them slide
You can dumbify villager ai if in closed area or sum
sure you can detect A TON of villagers and automatically merge them as a safety thing
Technically the correct method is to disable their AI but struggling is more fun.
In retrospect the best decision in these cases is to used stack mobs, and limit mob counts per chunks. I guess I like to see the hordes of mobs in my grinders which I dont doubt others enjoy too its why I am attempting to have fun tackling these sorts of problems.
just write a plugin which automatically turns villagers with a profession into a static shop. if one already exists, others get merged into it, giving you a multi-page shop
^^ not a bad idea lowkey
- Limit smart villagers in chunk
- Villagers exceeding the limit become dumb
- Alternatively player can dumbify a specific villager to not hit the quota
With a name tag for example
Yeah thats essentially what I am doing I call it "sleep" mode. 300 are enabled in 1 chunk at a time the rest are put in "sleep" minecraft had a limit on how many mobs can be in one chunk I disabled it and got around 1,000 villagers at 10 tps ;-; but ill keep playing around with it I was thinking of taking those 1,000 entities and stacking them in stacks of 10 for example which leads to 100 entities but it feels like cheating doing so ngl.
at 750 I get around 18-20 tps which isnt bad at all.
Just define a hard limit
Soft being smart limit
Hard being smart + dumb
And that's your solution
And honestly that can work for any mob
I think your missing the point, the point is I want the max amount of mobs possible with minimal tps reduction without using generic solutions But I appreciate the solution and will likely use that for my implement till I come back to developing this plugin.
Hmm, what's the point of having this many mobs in a chunk tho
As I said, no PC will handle that with playable fps
Without crazy culling
And even with that you'd need them not close together but separated
Of course THATS the point. If people who abuse this system will crash their pc before the server.
i feel like his intention is to not reduce the vanilla feeling while providing max performance at any cost
we will have information of where its occurring and cull the enormous amounts of mobs.
GodCipher gets it!
Interesting!!!
wouldn't that break some logic, for example farms.. chicken laying eggs etc?
Not sure, but for villagers it seems valid
You can simulate the trading menu and villager's state
so saving performance on the server in expense of the player
Fake vs real has no difference for the client
would prefer stacking over that honestly
well my code already have a re enable state for mobs that are in sleep mode allowing for user to interact with villagers that are in sleep mode, the multi page and multi stacking might not be a bad idea, but differentiating them when you are trying to place names might become risky.
well a player that is playing the server normally and walks into their chunk at 10 fps will realize hey maybe this is to much for my pc to handle ill cool down.
I wonder what's the biggest hit for the client from an entity
Probably doors / minecarts/ tnt or the armor stands on pistons getting pushing up with slime.
So collisions and other calcs
Ye
Collisions are hard to calculate because its always calculating 1 block at a time forward backwards left or right.
3d essentially
Wonder when it's gonna be on gh
gh?
Afaik development rn isn't public
It's for c2me mod
But can be ported to spigot etc
Noice
I can't see servers benefing from accelerated chunk gen
Why so
Then you can get one with a gpu
I guess
Usually you need a gpu cluster you can add gpu's sometimes like my dell r720 has a 1080 ti on it.
If you're a big single map server you'll benefit from that
The cost would be valid for the gain
Well you wouldnt need a beefy gpu either. since gpu's process so fast. depending on how it works of course.
I'd say even integrated cards would bring significant gains
Def won't need anything current gen
Or even last
If anyone wants to mess with the AI generated slop plugin im making I wouldnt mind sending it over.
Oh gosh what is it
Its essentially a plugin that assists in reducing tps issues from mobs but I am updating it.
I can send you the goal that I have for the plugin if youd like (kinda long for this chat and unsure if its welcomed to be posted here)
Post it on GitHub I'll have a look
Sent
use the .bat to build the .jar just search .jar to find it.
at 1000 mobs with 19.98 tps hmm lets see how much more abuse it can take.
given datacenters are going all in on AI, server manufacturers are surly to follow the demand meaning more servers will come with GPU's out of the box
this means hosting centers will end up with them as well
different boxes for different purposes
compute nodes generally don't
AI nodes do
storage nodes don't
you aren't gonna toss a gpu on a storage box for the sake of maybe repurposing it for AI in the future
that is not what I am talking about
more servers will come with GPU's out of the box
You'll have more purpose-built AI machines
manufactures typically limit the varieties they sell
This means, it will most likely just be standard that servers will just have GPU's
leaving the customer to remove such things if they don't want it
in fact, even if they were to keep such things separate hosting centers may still order them as the cost may not be significantly different in having a GPU come with it.
gpus are quite expensive tho
if we're gonna see hosting centers having them it will be for a good reason
for consumers they are. For datacenters and hosting it is cheaper because they buy in bulk
even if you buy in bulk it's still expensive
it is still cheaper
and nobody will put gpus in their data center without a demand from costumers
majority of costumers don't train ai
if it makes sense
gpu's are not just for AI, however datacenters don't always get the choice of what the box comes with
if the demand is high enough for the manufacturers to focus on putting GPU's into server boxes, they may just streamline their process where they just put GPU's into all boxes. This keeps cost down on your assembly line by not having multiple varieties of assembly lines or too many
this means for customers regardless of who they are, except personalized contracts, would not have a choice getting a gpu in their box when they purchase it. Most hosting places would just leave them in as they would need to figure out what to do with all the GPU's they rip out
not sure why
the basics of economics disagrees on that
otherwise no one would bother putting in massive bulk orders or limit bulk orders. This would remove marketing in negotiating contracts on bulk orders
normal consumers obviously wouldn't benefit but that is because typically your average person is not able to order the minimum amount in regards to bulk to where the cost is lower vs buying individual
Or just throw a 1080 ti in it and call it even
eyeballing the current prices of gpu hours on gpu hosting and the supply-demand graph for gpu's, i don't think that's going to happen
^ 1080 ti's are 100$
besides, for things like ai/llm's which are the main driver behind the gpu hype right now, you typically don't just want one gpu, but multiple
so the box in your datacenter coming with a gpu doesn't really help
the current meta of gpu compute and cpu compute being sold and housed separately is probably going to continue
Does anybody know how to import https://github.com/tr7zw/Item-NBT-API
import de.tr7zw.itemnbtapi.NBTItem; is not working
does it have a maven repo?
yeah, i added
compileOnly("de.tr7zw:item-nbt-api-plugin:2.15.5")
yeah
its under dependinces
dependencies {
compileOnly("io.papermc.paper:paper-api:1.21.11-R0.1-SNAPSHOT")
testImplementation(platform("org.junit:junit-bom:5.10.0"))
testImplementation("org.junit.jupiter:junit-jupiter")
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
compileOnly("de.tr7zw:item-nbt-api-plugin:2.15.5")
}
you need to specify the repository otherwise
i think i did
repositories {
maven {
name = "CodeMC"
url = uri("https://repo.codemc.io/repository/maven-public/")
}
maven { url = uri("https://repo.papermc.io/repository/maven-public/") }
}
you're missing this
good
and then here's my plugin.yml
name: EnderBite
version: 1.0.0
main: io.github.meletion.enderbite.ExamplePlugin
description: Enderbite Plugin
author: Meletion
website: https://meletion.github.io
api-version: '1.21.11'
depend: [NBTAPI]
wait where
ahh
still doesnt fix my problem though lol
thx for that though haha
don't need it twice haha
just wanted to show you how ugly it can get later
I think it is, minor versions were added at some point
ah i see
Tho why would you need NBT api in 1.21
im using craft engine and i want to pull down custom data so i can program in sfx and right click detection
1.21.11
is my version im using
I mean surely they have an api for that
who
spigot or CE
CE
java is more complex though, like i could do a ring of flame particles with for loops
Does anyone know a fix for this
https://privatebin.net/?8ab60a0d742cc6d5#4fbRLPgisPWnwCmW1uUQ6bJgLvkERKxVGc11TVLugdBZ
/home/deck/IdeaProjects/Enderbite/src/main/java/io/github/meletion/enderbite/ExamplePlugin.java:13: error: package de.tr7zw.itemnbtapi does not exist
import de.tr7zw.itemnbtapi.NBTItem;
^
did you reload in gradle?
Do you have it on your compile classpath
so you're not using the api?
1 line
How does something like this even happen
Like genuinely
No shading
One class
HOW DOES ONE ACHIEVE A LINKER ERROR IN PURE JAVA
it might be the unsafe api or how it's called
No-
when resolving interface method 'boolean FloodgatePlayer.sendForm(Form)': PluginClassLoader @30135202 of the current class, and the class loader PluginClassLoader @44afefd5 for the method's defining class, FloodgatePlayer, have different Class objects for the type Form
sounds like ABI incompatibility
Ah not me alr
are you building against and running the same version
A guy using my plugin got this and I can't really reproduce it
hm? Is org/geysermc/cumulus/form/Form loaded twice in two different class loaders?
But I can tell you that I use the geyser api by linking its built jar as a runtime dependency
Yeah how-
Make sure you're not shading the Form
Am not
this can also happen if there has been ABI breakage in between the artifact you're building against and they are running
e.g. if Form used to be an abstract class and is now an interface, or vice versa
right that too
i don't remember if it will emit this specific error, but it will look very similar
Ohh
it will still compile (is API compatible) but the binaries (the B in ABI) are no longer compatible since the bytecode is different
Alr I'll check if that's the case
Ye ye I see
java.lang.IncompatibleClassChangeError: Found interface org.bukkit.inventory.InventoryView, but class was expected
yeah it will look like this
if the type changed
so I don't think that's whats happening
have them send you the jar they're using an unzip it and see if it has the form class or whatever else inside it
you're declaring whatever that is as a dependency as well, right
i know the paper guys do weird classloader shit with dependencies for paper and i think possibly velocity plugins
Could also be one of them hotswap plugins installed
though idk if they exist on Velocity
How would I detect when a player equips armor via right click? Minecraft version 1.8.9
playerinteract event
on highest priority
check for is cancelled
if not it should go through as equiped
@solid heart
This would also trigger on something like a block place, right?
What if the player is already wearing armor? I guess I just have to check their inventory for that
this one works for either main hand or offhand
yeah, check armor slot if it's empty
Version 1.8.9 but yeah
ah then just player.getitem in hand
Dumb question, I just wasn't sure if there was an easier way. Thanks for 🦆
There's a lot of ways to equip armor...
I might just make an event for all of them
equip like via a plugin?
Well in 1.8 yes.
I mean a lot of different things to check if you want to know when a player's armor changes
yeah well
if it's only what players can equip then interact is your go to
sure you'll need a list of materials
but that's about it
or map actually
get that O(1) contains
How would a map help here?
you can get the slot of the armor type pice
Not sure I understand
Why is that faster?
you're gonna check later the material on equip no?
and if the slot of armor is empty
Integer slot = map.get(iteminhandtype);
if (slot != null && player.getinventory.getArmorContents()[slot] == null {
//item is armor and can be equiped
}
you can even replace the integer with method functions
for get helmet, chestplate
and not call on the array every time with the slot
Ahh I see
So in the map, all helmet materials would have a value of 0, and all chestplates 1, etc?
i think so yeah
i don't remember exactly how the indexes are put in the armor contents array
Probably not substantially faster but I see what you're saying
it is faster than having all the armor items type in a list
every call would iterate through quite a few armors
and you also won't get the slot of the armor type
Definitely faster yeah
Just, not that many types of armor and equipping an armor piece does not happen very frequently
well, you can do it any way you like
So probably little noticeable impact, but definitely faster
Yours is cleaner
it is true too
Yeah
you can make the map static final
so you don't create the map every time you interact
that wouldn't make sense
Yep, toss it in the ol' Util class
or you can put it somewhere in the class tree where it would make sense
but static final makes the most sense to me for something that will remain the same all the time
also make sure it's immutable 😄
lol apparently the paper hangar guys forgot to actually put auth on the upload api
Anyone could've uploaded any plugin "update" with malware and infected any server downloading from hangar
For God only knows how long
is that a site?
Basically their spigot forums/resources
Doesn't matter that much since probably all of 20 people use the site
So how do I get my Maven project pulled from Github to properly download sources and stuff because none of the bukkit stuff and a lot of other stuff isn't resolving
Also I have no build or run configurations
I tried to clone https://github.com/Bounser/Nascraft/
I'm not sure how to build it
click install
it'll download all the dependencies
install in maven's lifecycle
it's on the right marked with an m in intellij
no
click lifecycle
and then click package
or install
if you don't care about your local repository package is sufficient
Ohh I remember this kind of thing from Gradle
they do the same task so yeah 😄
Yeah I know it's just been like 2 years since I used Gradle and I never really learned it
location of system modules is not set in conjunction with -source 15
what do I have to set to fix this
It's giving me CLI flags but I don't know what GUI options they correspond to
Does this actually mean that they are using JDK 15?
Seems really old
<properties>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
</properties>
put this in the pom above dependencies
or add them to your existing properties
if they have one
class file has wrong version 61.0, should be 59.0 ?
This is after trying to install JDK 15, clean, and then install
make sure you have a jdk of at least 21
Do I set Language level to 21
I set it to 21 and it seems to install fine, but I still have no build/run configurations in IntelliJ, which thing do I have to run to get those
compile seems to work for building the thing
So is there a good way to just put that in the build configs
the jar should be in the target folder
It does
Just mostly asking if I can link the Maven scripts to the main run/build options
what do you mean by build/run configuration
like gradle run script?
maven doesn't come with something like that
we don't have a main in plugins like you would in standalone applications
oh
Well thank you for your help 😄
no problem
to load a plugin just drop it in the server
the one you find in target
@Override
public void open() {
Config config = Config.getInstance();
gui = Bukkit.createInventory(null, config.getCategoriesMenuSize(), category.getFormattedDisplayName());
// Main category item
gui.setItem(
config.getCategoryItemSlot(),
MarketMenuManager.getInstance().generateItemStack(
category.getMaterial(),
category.getFormattedDisplayName()));
// Fillers
Component fillerComponent = MiniMessage.miniMessage().deserialize(Lang.get().message(Message.GUI_FILLERS_NAME));
ItemStack filler = MarketMenuManager.getInstance().generateItemStack(
config.getCategoryFillersMaterial(),
BukkitComponentSerializer.legacy().serialize(fillerComponent)
);
for (int i : config.getCategoryFillersSlots())
gui.setItem(i, filler);
player.setMetadata("NascraftPage", new FixedMetadataValue(Nascraft.getInstance(), 0));
update();
}
```In the plugin on my server, the category menu gets filled as normal. However, when I build the plugin myself, it shows up like the below image. There should be a bunch of items in there. Not sure what's going on ?
Let me know if more context is needed
error?
It doesn't throw any
Do you have the same config?
yes
[10:30:37 WARN]: [Nascraft] path to 'plugins/Nascraft/data/sqlite.db': '/Users/lthoerner/IdeaProjects/Nascraft/server/plugins/Nascraft' does not exist
[10:30:37 WARN]: [Nascraft] Task #6 for Nascraft v1.9.3 generated an exception
java.lang.NullPointerException: Cannot invoke "java.util.HashMap.keySet()" because "debtors" is null
at Nascraft-1.9.3.jar//me.bounser.nascraft.managers.DebtManager.lambda$checkMargins$0(DebtManager.java:44) ~[?:?]
at org.bukkit.craftbukkit.scheduler.CraftTask.run(CraftTask.java:78) ~[paper-1.21.11.jar:1.21.11-110-c59990d]
at org.bukkit.craftbukkit.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:474) ~[paper-1.21.11.jar:1.21.11-110-c59990d]
at net.minecraft.server.MinecraftServer.tickChildren(MinecraftServer.java:1761) ~[paper-1.21.11.jar:1.21.11-110-c59990d]
at net.minecraft.server.MinecraftServer.tickServer(MinecraftServer.java:1616) ~[paper-1.21.11.jar:1.21.11-110-c59990d]
at net.minecraft.server.dedicated.DedicatedServer.tickServer(DedicatedServer.java:427) ~[paper-1.21.11.jar:1.21.11-110-c59990d]
at net.minecraft.server.MinecraftServer.processPacketsAndTick(MinecraftServer.java:1672) ~[paper-1.21.11.jar:1.21.11-110-c59990d]
at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1340) ~[paper-1.21.11.jar:1.21.11-110-c59990d]
at net.minecraft.server.MinecraftServer.lambda$spin$2(MinecraftServer.java:388) ~[paper-1.21.11.jar:1.21.11-110-c59990d]
at java.base/java.lang.Thread.run(Thread.java:1474) ~[?:?]
[10:30:57 WARN]: [Nascraft] path to 'plugins/Nascraft/data/sqlite.db': '/Users/lthoerner/IdeaProjects/Nascraft/server/plugins/Nascraft' does not exist
[10:30:57 WARN]: [Nascraft] Task #6 for Nascraft v1.9.3 generated an exception
java.lang.NullPointerException: Cannot invoke "java.util.HashMap.keySet()" because "debtors" is null
at Nascraft-1.9.3.jar//me.bounser.nascraft.managers.DebtManager.lambda$checkMargins$0(DebtManager.java:44) ~[?:?]
at org.bukkit.craftbukkit.scheduler.CraftTask.run(CraftTask.java:78) ~[paper-1.21.11.jar:1.21.11-110-c59990d]
at org.bukkit.craftbukkit.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:474) ~[paper-1.21.11.jar:1.21.11-110-c59990d]
at net.minecraft.server.MinecraftServer.tickChildren(MinecraftServer.java:1761) ~[paper-1.21.11.jar:1.21.11-110-c59990d]
at net.minecraft.server.MinecraftServer.tickServer(MinecraftServer.java:1616) ~[paper-1.21.11.jar:1.21.11-110-c59990d]
at net.minecraft.server.dedicated.DedicatedServer.tickServer(DedicatedServer.java:427) ~[paper-1.21.11.jar:1.21.11-110-c59990d]
at net.minecraft.server.MinecraftServer.processPacketsAndTick(MinecraftServer.java:1672) ~[paper-1.21.11.jar:1.21.11-110-c59990d]
at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1340) ~[paper-1.21.11.jar:1.21.11-110-c59990d]
at net.minecraft.server.MinecraftServer.lambda$spin$2(MinecraftServer.java:388) ~[paper-1.21.11.jar:1.21.11-110-c59990d]
at java.base/java.lang.Thread.run(Thread.java:1474) ~[?:?]
```I got this warn on plugin startup. No idea if it's related
might be
I don't know why it says path doesn't exist, it definitely does
if plugin doesn't load properly it can't pull items from config
'/Users/lthoerner/IdeaProjects/Nascraft/server/plugins/Nascraft' does not exist
It does tho lol
do you start the plugin from this location?
I start the server from ...server/
let me check rq
might be a first-startup warning
Mb, red herring
It was just cuz first startup
No errors or warnings
Still not working tho
I tried to do that with println but it doesn't seem to work
It prints out some text but not the actual object
But maybe I forgot how to do debug messages in Java lol
I'm used to Rust
it debugs whatever you gave him to do
would normally do eprintln!(":#?", item)
@Override
public void open() {
Config config = Config.getInstance();
gui = Bukkit.createInventory(null, config.getCategoriesMenuSize(), category.getFormattedDisplayName());
// Main category item
gui.setItem(
config.getCategoryItemSlot(),
MarketMenuManager.getInstance().generateItemStack(
category.getMaterial(),
category.getFormattedDisplayName()));
// Fillers
Component fillerComponent = MiniMessage.miniMessage().deserialize(Lang.get().message(Message.GUI_FILLERS_NAME));
ItemStack filler = MarketMenuManager.getInstance().generateItemStack(
config.getCategoryFillersMaterial(),
BukkitComponentSerializer.legacy().serialize(fillerComponent)
);
System.out.println("Item adding to GUI:");
System.out.println(filler);
for (int i : config.getCategoryFillersSlots())
gui.setItem(i, filler);
player.setMetadata("NascraftPage", new FixedMetadataValue(Nascraft.getInstance(), 0));
update();
}
```Yeah I added these `println`s but I have no idea whether I did it right so I can't tell if it's not generating anything or if it's just written wrong
[10:46:44 INFO]: [Nascraft] [STDOUT] Item adding to GUI:
[10:46:44 WARN]: Nag author(s): '[bounser]' of 'Nascraft v1.9.3' about their usage of System.out/err.print. Please use your plugin's logger instead (JavaPlugin#getLogger).
[10:46:44 INFO]: ItemStack{BLACK_STAINED_GLASS_PANE x 1, UNSPECIFIC_META:{meta-type=UNSPECIFIC, display-name={"text":"","extra":[" "]}}}
Oh wait that's filler stuff
let me check the item itself
[10:53:05 INFO]: [Nascraft] [STDOUT] Item adding to GUI:
[10:53:05 WARN]: Nag author(s): '[bounser]' of 'Nascraft v1.9.3' about their usage of System.out/err.print. Please use your plugin's logger instead (JavaPlugin#getLogger).
[10:53:05 INFO]: ItemStack{GRASS_BLOCK x 1, UNSPECIFIC_META:{meta-type=UNSPECIFIC, display-name={"text":"","extra":[{"text":"N","color":"#8C8C8C","bold":false,"italic":false,"underlined":false,"strikethrough":false,"obfuscated":false},{"text":"a","color":"#8E8B8C","bold":false,"italic":false,"underlined":false,"strikethrough":false,"obfuscated":false},{"text":"t","color":"#8F8A8C","bold":false,"italic":false,"underlined":false,"strikethrough":false,"obfuscated":false},{"text":"u","color":"#91898C","bold":false,"italic":false,"underlined":false,"strikethrough":false,"obfuscated":false},{"text":"r","color":"#92878C","bold":false,"italic":false,"underlined":false,"strikethrough":false,"obfuscated":false},{"text":"a","color":"#94868C","bold":false,"italic":false,"underlined":false,"strikethrough":false,"obfuscated":false},{"text":"l","color":"#96858C","bold":false,"italic":false,"underlined":false,"strikethrough":false,"obfuscated":false},{"text":" ","color":"#97848D","bold":false,"italic":false,"underlined":false,"strikethrough":false,"obfuscated":false},{"text":"b","color":"#99838D","bold":false,"italic":false,"underlined":false,"strikethrough":false,"obfuscated":false},{"text":"l","color":"#9B828D","bold":false,"italic":false,"underlined":false,"strikethrough":false,"obfuscated":false},{"text":"o","color":"#9C808D","bold":false,"italic":false,"underlined":false,"strikethrough":false,"obfuscated":false},{"text":"c","color":"#9E7F8D","bold":false,"italic":false,"underlined":false,"strikethrough":false,"obfuscated":false},{"text":"k","color":"#9F7E8D","bold":false,"italic":false,"underlined":false,"strikethrough":false,"obfuscated":false},{"text":"s","color":"#A17D8D","bold":false,"italic":false,"underlined":false,"strikethrough":false,"obfuscated":false}]}}}
Strange
It seems like it's not even doing this more than once
So this is just the header item
i hate component::tostring
mmm yes i certainly want to know all the 25 things that are unset on every individual component
that is not even toString, that's just the json serialized which does have all those fields specified because spoogot legacy serialization
Ignore this I put the logs in the wrong plce
Is there any way to debug a Spigot plugin with an actual debugger like I would with Fabric mods
Instead of just logging
yeah
The home of Spigot a high performance, no lag customized Bukkit Minecraft server API, and BungeeCord, the cloud server proxy.
every time i think "i should probably do this" i like never do
or overriding hashCode
i just use data classes (or records in the rare cases I'm forced to use java)
records my beloved
i had a project that used records and then someone PR'd fixes for stuff for it and undid my record classes
does anyone wanna help me with making a server?
In what way
I am driving myself insane trying to build and test this plugin Nascraft. The release works, but my build does not. I have not made any changes other than loading it in Java 21 instead of 15.
Would anyone be willing to help me debug it? I am so confused and I really feel like I'm missing something stupid and wasting all my time. I'm not well-versed enough in Spigot development or Java tooling in general to navigate this fluently, I only know enough to understand the actual code.
its like a simple project just a server with Survival Creative Skyblock and lifestel
nothing that out of boundaries
Are you saying helping find and configure plugins?
the server itself im think to be ran on custom plugins actually
Who's paying for the server?
i have a custom panel up already so i dont really need to worry about that
Why would you develop a custom lifesteal plugin when there is already an amazing, open source one available, developed, in part, by @mortal vortex
i probs use a public one rather than code one from the ground up
only my text package override tostring, otherwise it's just default
and neither do i override hashcode as i don't use my objects as keys
most often keys i have are uuids and strings
hey, i want to ask something about nautical ranks v2, can someone help me?
What's the question
the plugin version is 1.20.6, my server is in version 1.21.11, i've added viabackwards. does the recource pack will still work if i add it to the server?
That's more of an itemsadder question
But i'd assume so
can't you test this yourself?
i've tested it, its worked, thanks for help
does anyone know how to give fly permission/feature to spesific rank only in their own claim?
What does it result in?
weird
Hey! Quick question plz, is there a way to cancel camera and player movement completely? (Like the same feel when an armor stand is spectated)
Why not spectate an armor stand? Cuz I cannot customize the spectator bar
Yeah there was a bug that allowed you to do so. I'm not sure if it's still around, but basically you'd send the spectate packet to a player that isn't in spectator mode while they're mounted to an entity
Should lock the camera and as a bonus it'll still send movement packets you can capture to do some cool stuff
Oo that’s sick! I hope it is still there, and turned into a feature.
yeah java has some weird usecases where arrays can be comma terminated. You can also do this with enums,
so something like this is still valid
It’s for convenience
yup
So you can quickly add more entries later
I knew that for enums, didn't know for arrays
hey what's the resolution for bedrock, so they can see rank prefix, i've tried to make my own but, itsvto small for bedrock i use nautical ranks v3
spigot doesnt support bedrock so this is a plugin question
I also dont understand the question
i cant share the screenshoot here, maybe you'll understand the problem
?verify
!verify
Usage: !verify <forums username>
?img
Can't send images? That's because you're not verified! Use !verify to complete verification.
Alternatively, you can upload screenshots to any image hosting site and share the link.
Here's some screenshot utilities that you can use to upload images.
Lightshot: https://prnt.sc
Imgur: https://imgur.com/upload
Flameshot: https://flameshot.org
Minecraft font in editor is crazy
lmao makes it easy to read
i honestly don't notice it anymore
Hello, how can I cancel the opening of the villager inventory in order to do something else ?
Is it inventory open event ?
Guys someone left a bad review on my resource
Saying that it doesn't work at all
EVEN THOUGH IT DOES
And now my resource has 1 star
can i do anything about this
You can reply to it
And hope they remove it
Bruh
Welcome to the world of reviews
😭
Your response isn't very professional lmao
have u considered making it Work
It does
can you change the syntax of your question, its hard to understand. Does Nautical Ranks v3 work or not?
Can you not just see the ratio / resolution that Nautical Ranks uses?
i couldn't find anything abt this sadly, unless im looking in the wrong place ;c
but there has to be a way... cuz a server called wynncraft somehow does it, the player is in survival or adventure mode (idk which) and their camera is hard locked in place... they cannot move it
What about it do you want to find?
how on earth do i freeze the camera 😭 i cant figure it out for the life of me.. the closest i got is readjusting the player's yaw but that produces a jittering effect
tbh i wana disable everything.. that why i wanted to have the "spectate" effect but in survival.. so i assumed if i can find a way to freeze the camera in place, sneaking, looking, walking will not affect the camera movement
Did you send the spectate packet
they sent the packet of bananas
that's what I tried at first lol, it implements Cancellable
okok seems better to try, thanks
hello, is there any way to replace a mob safely and without lag?
my problem is, im trying to replace all the bats which spawns, for blazes
and that is causing infinite blaze spawning
because im cancelling the bat spawning event
set a boolean flag in your listener to true to represent recursion
then check for it, clear it, and immediately return if it's set
that said infinite recursion shouldn't happen in the first place if your spawning only runs when a bat spawns; as you're not spawning bats, but blazes
and that is the crux of the issue most likely, they were not even checking
what is the best gui for using custom chest size and anvil gui?
the one that works
The problem is the game will keep trying to spawn bats until the mob cap is full
Bats are in the AMBIENT mob group, and are the only entity in it, so turning them into blazes means it will never fill
yeah
so set the limit to 1 and don't kill the one bat
Now you don't get natural spawning of them
ok, so the 1 bat must die then XD
then the fix is letting 1 bat alive in the chunk?
have no idea, but something tells me that would oddly work 🤔
It would just be a matter of determining when the bat should die and then how many blazes you want to spawn in and then spawn in another bat lol
honestly at that point you might almost as well do the spawning yourself
i only want to replace the bats for blazes, so the bats don't appear anymore but the blazes do
i think minecraft try to spawns more than a bat for chunk
pretty sure you can just make the bat invisible
or do what vcs2 said, just handle spawning yourself
that should work
kind of silly but would somewhat work
the only issue i foresee is that if someone kills the blazes, they won't respawn
until the player either kills the invisible bats somehow or gets them to despawn
the player simply unload the chunk
you could associate each blaze with its bat and kill the bat when the blaze dies 🤡
that actually would work
mount the bat on the blaze so despawning won't desync it
for the bat, use the entity visibility api rather than potions, so the player client won't know about it at all
just don't mount the other way, otherwise the blaze will fly off somewhere
custom blaze ai ™
if i wanna make an simple plugin with custom sized gui and anvil gui where i can enter text. do i need any api or how?
you need the bukkit api at a minimum
thinking about this, arn't squids ambient too?
i think they might be water-ambient
or maybe that was fish;i don't remember, the categories make no sense
guess not now that I look at it
none of the water mobs are technically ambient since i think they all drop something or do something, but there is a water-ambient category with some random assortment of mobs in it
interesting
Yep
its called Water_Ambient
declaration: package: org.bukkit.entity, enum: SpawnCategory
i guess they're sort of ambient in that you can get their drops through fishing anyway, so disabling their spawning doesn't break the game
I'm making a plugin, where do I download the spigot api
?bt
?maven
The home of Spigot a high performance, no lag customized Bukkit Minecraft server API, and BungeeCord, the cloud server proxy.
thanks
it didnt worked
if the bat is a passenger of the blaze, minecraft stills spawn bats
ok after a long try.. it works tho there's an issue
when i right click it kicks me with the msg saying 'cannot interact with self'
Capture that packet and cancel it
sorry, how will that help?
Right clicking causes the client to interact with itself
Blocking that interaction will stop the server from kicking the player
hey, what would impact more in the server, having 200 entities in the world or cancelling an entity every tick continuously?
Time to test and see
in my opinion, my server is lagging when the plugin is cancelling the mob spawning like 20 times in 1 second
but idk if that is correctly
depends on the time span
well, not really. having the entity has always more impact
i mean listening the mob spawn event, cancelling it and spawning other mob instead
that will cause infinite spawning, but if i limit like 2 mobs per chunk, it will keep cancelling like 50 times per second continuously
basically the same just with an extra step i'd say
oh the infinite spawning
yeah make sure that you don't trigger your own event
you can just set a flag
customSpawn = true
spawnMob
in the next event you check
if customSpawn
customSpawn = !customSpawn
return
or you store the uuid of your custom spawn and check in the next event if that triggered the event
if it is infinite spawning and you limit every chunk to cancel the events if there are more than 2 mobs in the chunk for example, that will keep cancelling infinitely entities and will not cause lag?
i think we're not on the same page here. what are you trying to do? just cancelling vanilla spawns to a certain limit per chunk, or replacing zombies for example with your own custom mob?
hijacking the spawn logic to not write your own
replacing all the bats for blazes when spawning
gotcha, and what's the issue you're facing?
if i listen the event and cancel the bat spawn to spawn the blaze instead
it will cause infinitely blaze spawning
you can code for example to limit if there is 2 blaze in the same chunk then cancel the event to don't keep spawning
well, your fix would be to only listen for bats 🤔
blazes will keep spawning infinitely
if minecraft detects that there no are bats then it will continuously trying to spawn them
ahhhh okay that makes sense
yeah i can see where your impact on performance thoughts are coming from
but with this, the plugin will be cancelling for example 50 spawning events por second
and it will cause so much lag
hmm, can you show us the code and run spark profiler so we can see where exactly the lag is coming from?
?paste for code
Looking to paste something? Try a code block or one of the following websites:
- https://pastes.dev/
- https://sourceb.in/
- https://mclo.gs/ (best for server logs)
i mean, its just an event handler onmobspawn, if a bat spawns, you cancel it and spawn a blaze instead
it would impact in the lag if there is many people in the server
for only one or few players i don't think it should
anyone experienced with making gradle plugins by any chance 
it's very aggressive and will generate a lot of garbage trying to find valid spawning positions nonstop
got an issue at work where it compiles both java + kt but only bundles java code in the .jar
sounds like an easy fix is to toss kt out the window
yeah so there is my question
it's like 3 classes of kt
are 200 entities better for the server than being cancelling 50 spawning events per second infinitely?
my answer is to try and avoid doing that if at all possible
it might not be as catastrophic for bats, but for monster spawns that's an easy way to brick the server
for the mounting, i suppose you can just not mount the bats on the blazes if that's the issue
hello guys! I have a question about a custom gui that i need to make.
I need a sort of new menu like the furnace, brewing stand etc... something that has a totally different graphics if you know what i mean, is there anyone that knows how to do it?
My first instinct was to use a plugin to check for the slots, make some slots of the generic54 unusable and a texture pack to cover them. But idk if a generic_54 can have a different texture based on a nbt tag (so i can use the same generic54 to create multiple custom GUIs)
you can but minecraft doesn't count the bats mounted so it try to spawn more
the spawns going out of sync probably shouldn't be a big issue, since blazes despawn as well
so not mounting the bats shouldn't be that critical of an issue
the fix i think its the best option is letting the bat spawn
make it invincible, invisible, and with noai
then spawning the blaze with him
myeah that should be fine
minecraft spawn like 15 bats in total per player
is 15 blazes and 15 bats without ai better than cancelling 50 spawning events per second continuously?
definitely
thanks
?ask
If you have a question, please just ask it. Don't look for staff or topic experts. Don't ask to ask or ask if people are awake or available. Just ask the question to the channel straight out, and wait patiently for a reply. Make sure you use the right channel regarding the topic of your question. Create a thread in case the channel is already in use!
hey I was wondering how would I make a custom scoreboard? Just where to start and how I would set it up. I basically just want a scoreboard with 2 teams that you can change the name and color of with a score (not the mc score) that you can change just by doing commands or using a listener to check if players have write clicked with a certain item in their hand
I know how to do a lot of this stuff, but not how to set the scoreboard up
teams for the sidebar? @knotty gale
yeah basically, I just want one thats extremely customizable and easy to control with fast updates
if anyone is looking for a plugin developer, im that guy, dm me, i charge cheap.
if you want to use both prefix and suffix you'll need to do some checks
you'll need to move the colors from the prefix to the suffix
i have a website where i create mods/plugins and publish them , i need some devs to help me out here.
thx
enjoy 😄
?services
If you wish to request or offer development/art/building/administration services, please do so at https://www.spigotmc.org/forums/services-recruitment-v2.54/
hey everyone! Does anyone know if/when the next version of specialsource is going to be released? (for java 25 support :D)
Around the time the next Minecraft drop is would be my guess
since that's when it's required
If you cannot wait you can just build the latest commit yourself and use that
yess already did that, just curious about the release, tyvm
im trying to make an plugin where you can change your player tag name color. but it will show in the chat and tab but not if go in f5 or othe players see your player tag color above your head just the regular white one
teams are an easy way of doing this
but then if like 10 players change their color there will be 10 different teams
that's fine
can i also make it compatible with minimessage for custom text colors? and would this affect like performance on server?
Pretty sure team colours only support the original 16 colours
If you want full rgb you’d need a text display Or something
couldnt u just set the list name for tab? and handle the chat seperately?
i did but i also want to other player see the colored name above the player, so player tag
!verify
Usage: !verify <forums username>
!verify Xenonical
This account is already verified!
Tuff
ah okay, i understoof it as you not wanting that sorry
like an api or what?
they're entities on newer versions of minecraft @high vessel
designed for displaying text
such as?
There's BlockDisplay entity and TextDisplay entity
Oh yeah item displays too
and then an armor stand is always inside a player?
you'd use a text display instead of an armor stand
I've also noticed text displays being non-tracking.
idk if thats something you set but its cool.
Armor stand nametags always revolve to face you.
it's adjustable
they can be set to not track (aka billboard) billboard only vertically, only horizontally, or both
"both" being the one used by armor stands and player names
does anoyne know why isPreferredTool returns TRUE when I test breaking a leaf block with a pickaxe
I thought it would be only true for shears
Preferred != Best
Returns if the given item is a preferred choice to break this Block. In some cases this determines if a block will drop anything or extra loot.
One would imagine from this, it means whatever breaks it with a speed > base
lol then thats weird
Pretty sure it’s mostly for blocks that require a specific tool to drop items
at 2x durability use isnt it
at least for swords
wait i think thats only for bamboo
swords break most things slightly faster but also take double damage doing so
to teleport a player to another server on a bungee proxy, would the best way to do it be to make a bungee plugin that handles teleporting player between servers and using the teleport methods from that plugin in my spigot plugins
If you just want to send a player to a different server you can use the Bungee messaging channel
The home of Spigot a high performance, no lag customized Bukkit Minecraft server API, and BungeeCord, the cloud server proxy.
so id be able to move a player to another server then teleport them without needing to use bungee?
If you want to teleport them to a specific location on the other server you'd need a plugin on that server to do so
ok thanks
Technically no, you could use plugin messaging to send them to the server and then plugin messaging again to teleport them
🤔 There is no message to teleport?
you write a plugin that teleports players on command and deploy it on the destination server
No but you can send arbitrary data with plugin messaging
on command as in over plugin messaging
And have another plugin read that message on the destination server
And you'd need a plugin to recieve that
Yeah
yeah but why did you say no to me saying that you need a plugin to handle the teleportation then
Oh I thought you said you’d need a bungee plugin to handle that
or the rcon port 🤡
If you want to get super technical and all the servers are on the same filesystem you could have the plugin edit their player.dat on the other server to modify their location :p
Can a bungee plugin even move players? I don’t really know what the proxy is capable of
not without the sort of plugin messaging discussed above
that state exists on the backend server and so to change it, it needs to be done by the backend server
similarly to how the state of what backend a player is connected to exists on the proxy, and to "send" players to other backends, the proxy needs to do that
there is built in handling for a plugin message that does the latter however, so it can sort of be "done" by a backend server, but only in the sense that it tells the proxy to do it
errrr so dont smite me for what im about to ask but, my goal is to move a player from server A to server B at a certain location, i wanna give them effects, spawn particles when they teleport so its cool on both servers, i asked chatgpt and it says i need to use a bungee plugin to communicate this so now im confused
I would just use a spigot plugin and plugin messaging
The plugin will need to be on both servers
?pmc
yeah i was gonna add it on al my servers
is there a way i can create complex block displays? looking to create a sort of grenade thingy
Custom models with item displays
Or just multiple block displays
There’s a tool to make stuff with them, one sec
Uhh
Spigot doesn’t really like teleporting stacked entities
But you can unstack, teleport, and restack
my idea was for a grenade with gravity that i can throw, wait a few seconds and then it explodes
does this actually allow exporting the models as anything more useful than some dumb summon command
that's what im thinking 😭
if you can use a resourcepack, the better option is to open up blockbench and create an item model, then spawn an item display
this'll perform better, generally look better, and is easier to deal with since there aren't a bunch of entities you have to move and rotate around independently
without a resourcepack, the best i can think of is to get the command, spawn it in singleplayer, save it into a structure and then bundle the structure with your plugin jar... or manually writing in all the entity offsets and rotations in java sources
i've wanted to use this blockdisplay site for a long time but importing the models in any sensible way into a plugin always kills off my interest
aw, shucks 🙁
i'm willing to do a great many things, but writing a parser for some 100-levels nested summon command with 25 passengers per entity is not one of them
the player gets moved to the server but they dont get teleported to the location
You could technically just use NMS to parse it and then export it as something else
connecting to the server takes time
your plugin message telling the destination server arrives there before the player does
Yeah you can’t send a message to an empty server either
how would i go about doing this then
honestly a cookie might work better here
You could also store the teleport location in the players cookies and check that in the join event, however modified clients could technically mess with that cookie data
who knew teleporting players between servers would be so complicated 😭
you could have a plugin on the proxy after all, and have it relay the plugin message to the destination backend once it sees the player is connected
would it be best to use a database to store the location they want to get to, when they join, get the location and teleport them?
that is also an option, though i would probably use a messaging service like rabbitmq instead
Tbf the switch is done by the proxy, so it shouldn’t vary much in how long it takes
a database is kind of the wrong tool for this
Could just hardcode a delay
idk i dont rly wanna do that cuz ppl will load at different speeds
i think as long as the player is past the login phase, plugin messages will go through
but you will want to record them in memory on the backend and act on them once the join event fires
so i should have plugins on my servers and a plugin on the bungee to check when a player connects to the server?
well if you use the delay approach, you only need plugins on backends
Delay is less than ideal
What if you were thr last player you were teleporting from
🤡
I think an empty server can still send messages
Also connecting to other server can take a varying amount of time
Maybe?
just use a messaging service
They cannot
plugin messaging is trash
ye i rly dont wanna use a delay
Ah, unfortunate
Plugin messaging goes through the player connection
so either you have a proxy plugin relaying the message, or you have a dedicated messaging server/service relaying the message
Clearly you just need a dummy player on each server!
i think ill just use a database to store the intended destination
It's nice when you use it for what it's intended for
Ie allowing custom data to be sent between client and server
Tbf I don’t know why bungee can’t just keep a dummy connection open to each backend server
Not the cursed stuff Bungee does
fair enough
I guess at that point bungee might as well open a proper socket between the proxy and backend
Though that would require another port
it should be doable over tcp and the main port as long as the backend is spigot and rigged to handle that
i guess the reason is that it's kind of feature creepy
don't really want to maintain a fully fledged message queue impl in bungee
though one thing the connection would be very nice for, is checking when backends shut down/start up
Not plugin messagins
It’s also easy to spoof if you don’t know what ur doing
Since it’s sent through the player
Doesn’t it get sent from the server to the bungee and then the bungee to the other server, over the players connection
I don’t think it reaches the client
Since that would require the client to then send a packet back and I don’t see how you would force it to do that
it doesn't rely on the player's client, no
but it's a bit unclear whether or not the client receives it
the client can also opt to send a plugin message of its own accord, and the proxy will relay it to the backend
there was a forcelogin exploit related to this in authmevelocity recently, where a client could just send the "player x is now logged in" message (which was supposed to be sent by authme on the backend), and the proxy would treat it as the ground truth, since it didn't bother checking whether the message came from the player or a backend
in sum trust nothing you see and send nothing you don't want to be seen
I've seen 2 of these exploits in the past year
Both bungee and velocity have a "Plugin Message Event" where you can check the source of the message
Ideally you can block it at the proxy level and prevent it from reaching the backend server
Venturechat allowed anyone to spoof cross-server messages
CommandAPI would throw an error and print the entire payload (and people used this for DOS attacks)
I think coreprotect had sumn about it but you needed some crazy debug mode on
Worldedit should be safe
I don't recall if lunar's apollo was safe but likely yes
from.getWorld().spawnParticle(Particle.DRAGON_BREATH, loc, 3, 0.01, 0.01, 0.01, 0.03f);
why am i getting this error?
java.lang.IllegalArgumentException: missing required data class java.lang.Float
That particle needs a final float param
whats the prefered place for loading player data from db these days (which event)
playerjoinevent has the downside of data being not available if something needs it before data got fetched
is asyncprelogin fine?
yes
w/checking the result as well right
well thats obvious nvm
is it relatively new tho
i know the whole joining mechanism changes a lot
especially recent versions
Async pre login has existed since pretty much forever
lmao
hm?
he said "lmao"
Block the thread on async prelogin
uhh save it on a cache for 20 seconds
grab it from a cache and throw it on a map
or invalidate the cache on disconnect / quit
thing is if every plugin does this the client might timeout
but if it's a couple and latency is minimal I'd say it's the best alternative
and if you're sharding or something use a distributed lock
like an etcd lock or a redisson RLock or something
You get around this by starting the fetch on its own thread on a lowest priority listener and blocking on it on a monitor priority listener; everyone performs their work concurrently
exactly
good job
we love you vcs!
hi all, im coming back to plugin development after a few years and want to know if these are still viable options
command api: https://docs.commandapi.dev
inventory api: https://github.com/stefvanschie/IF
sure are
alright thank u
@young knoll
Hey all, I'm in the market for a new in-game Broadcast Plugin. We currently use BroadcastPlus by LOJJ_Scaler, but the plugin doesnt support HEX formats, or anything to support custom colors. Anyone know of an alternative for what Im looking for? Any information is greatly appreciated.
(a) This is #help-development, intended for help regarding writing your own Spigot Plugins.
(b) the plugin listing says; "It supports Hex Colors". Are you using the right format?
move to #help-server
My apologies, I did not see the Help server page; I don't use this server often. @mortal vortex I'll have to look at the formats again, but I'll switch to the right channel
Yeah, Discord can be a pain in the ass now, whenever you join a server just hit that "Show All Channels" button.
Good to know. I'll do that right now 🙂
Huh where / what is it hiding by default
Does it just pick random channels
I think its most frequented channels.
IRC was better
ideally if Discord has a falloff, Spigot should move to like XMPP or Matrix
i didn't like irc too much
but i can't deny it gets the job done without infringing on privacy
XMPP or Matrix are a bit nicer.
They both offer channels, and markdown support which i believe IRC does not.
And obviously, you dont need to be constantly online to grab old messagees.
matrix i believe it's p2p no?
or is it with hosted servers?
wait let me check
ah nice
you can host your own servers if you want to, but don't have to, and it's not p2p
i still remember the skype days where your ip was up for grab by anyone
matrix is cool but i dont like any of the clients
also i cant use a terminal client because of course matrix needs reactions, gifs and html formatting
irc with bouncer is really alright tho. but of course thats not accessible at all
when update SpecialSourceMP because there is a problem with Java 25 compilation
only usable if you left things opened, otherwise useless after about a day or so
we definitely could. I mean irc makes a great backend or jumping off point for this
it is in fact what discord did
you sure can use a TUI client for matrix
it's not like people don't do that with discord already
i don't really mind the age restrictions and id verification, but i do wish there was like a proper government mandated audit that the data really is "deleted quickly" so they don't end up accidentally leaking 70,000 more users' dox like last time because bob from accounting set the mysql password to 123123123
a chat app is just not worth your biometrics and personal identity information
what's tui?
granted you don't have to provide them, you can just not do that and you'll be restricted of "safety features"
It’s a type of HRT
but many people would be missing out on heaps of things
honestly this is probably going to be the new normal going forward, i expect to see most of social media and most of internet 2.0 requiring id verification within 5-10 years
it's sort of understandable as well, kids really are exposed to all sorts of shit they aren't supposed to be exposed to on the internet
grooming is just one of the many problems
I don’t think there’s a problem with this system. You only need to verify to see NSFW content.
If you’re a child this is good— no nsfw.
If you’re an adult— who cares? Porn sites exist. You don’t need Discord for NSFW content, so you certainly don’t need to verify.
i mean ideally this would be solved with better parenting and maybe babby-mode on hardware rather than in each individual app, but unfortunately i don't think there is any way for the government to make people be better parents
so we're stuck with a technofeudal surveillance state
Some people think parenting is sticking an iPad infront of a kid because it stops them from screaming.
We can’t live idealistically thinking that people will monitor their children properly.
microsoft already demands a trusted platform module for win11 compatibility
no reason they can't demand a babby platform module
apple is even harder locked down
either way, the main problem with this system as it's implemented right now is that it has been proven again and again that companies are 🅱️ tarded and can't be trusted with personal information, let alone biometrics, because it always gets leaked within 1-2 years
they also can't be trusted to "delete it quickly", whatever that means in practice
LOL yeah and now Discord, Roblox and everyone else are resorting to a third party certification agency.
It just makes it easier for a centralised attack.
If all of the internet relies on the same identity auth platform, then a single leak is 2/3rds of the world exposed.
it's a 🤡 world
we'll see if the US or the EU or someone manages to push through some double-blind id system where the app doesn't know your identity, only that it's valid, and the certifying party (i.e. the gov) doesn't know which apps you use
i kind of doubt it, especially with where the UK is looking to be going, but one can hope
lmao
I mean
i seriously doubt the US would, but EU is pushing for this EUDIW or however you spell that that would allow for that, platform simply asks the government (really the only entity that should have your personal identity information) "is this person of age"
part of our culture has to do with unsupervised access
absolutely
Europe's pushing Chat Control
kangarko reference
true
and that's a little fucked
part of us being so desensitized is all the shit we've seen growing up
I've been doxxed a couple times on this discord server alone
well... somebody has
the info wasn't 100% accurate but close enough
ultimately they can't ban computers doing math so I'll still be having e2ee with my life sweeties
only if the services are p2p
services that provide e2ee would require a backdoor afaik
they'll backdoor your computer and tell it to do math that records your screen and keystrokes and sends it to the Ministry of Love for review
glad to see I am not the only one thinking a bunch about a discord alternative
self host matrix for you and your friends and call it a day
I've been considering this but Matrix seems like a mess at this point honestly
not really
people just don't like decentralised because all they want is install, hop in and chat
come to think of it
i've been trying to think of a reasonable and simple way to age verify my players for a good while, to turn off the ingame profanity filter
https://telegra.ph/why-not-matrix-08-07 was reading this the other day
just ask for their id and pictures of their face duh
last time i asked here someone recommended i set up some microsoft app or something where people would have to log in with their microsoft account and offer all their personal details
but now, can't i just have a nsfw discord channel and see who can post there 🤡
isn't discord planning on using some algorithm to determine our age
feed all the data to chatgpt and ask it to make an educated guess
I saw a great meme the other day (unsure if true) about using garrys mod to pass the face-based age verification
it isn't just that, it suffers from the open source curse, UX is overall a mess
and claim your family will die if he gets it w rong
i've considered this, but iirc the tos on openai prohibit using their models to "classify" people based on behavior
idk, it's fine at least within the circles I'm in, but I can understand it not being for the masses
so this means that we should not speak coherently then
i already feed all the data to chatgpt to dispense "good boy points"
Also, on the #help-development front... I came here cos BuildTools.jar is failing on my new Debian 13 container 🫠
which can be used in the web shop
[INFO] Reactor Summary:
[INFO]
[INFO] Spigot-API 1.21.11-R0.2-SNAPSHOT ................... FAILURE [ 0.668 s]
[INFO] Spigot-Parent dev-SNAPSHOT ......................... SKIPPED
[INFO] Spigot 1.21.11-R0.2-SNAPSHOT ....................... SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.724 s
[INFO] Finished at: 2026-02-12T12:54:19Z
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.13.0:compile (default-compile) on project spigot-api: Fatal error compiling: error: release version 17 not supported -> [Help 1]
"address not found" great lol
use java 21
I have java 21 🫠
then set your java home as Illusion mentioned
java -version
or use the specific java version for the build
I found the same issue in a year-old forum post and wrote up my details there:
https://www.spigotmc.org/threads/why-do-i-keep-getting-this-error.674028/#post-4933902
debian 13 doesn't seem to have JDK 17 in its packages
release version 17 not supported -> [Help 1]
might have to go to backports
or yeah "C:/Users/Illusion/.jdks/..." -jar BuildTools.jar --rev 1.21 is what my script looks like
From my thread:
I think the issue is that the Spigot-API package has still a compiler release of JDK 17 set, whereas Spigot-Server is set to 22:
$ grep 'maven.compiler.release' Spigot/Spigot-API/pom.xml
<maven.compiler.release>17</maven.compiler.release>
$ grep 'maven.compiler.release' Spigot/Spigot-Server/pom.xml
<maven.compiler.release>21</maven.compiler.release>
weirdly though I wouldn't have thought this would be an issue (compiling a jdk17 target on jdk21)
doesn't matter about the api. The API can be compiled with a later version. The server can not be compiled with an older version
$ java -version
openjdk version "21.0.10" 2026-01-20
OpenJDK Runtime Environment (build 21.0.10+7-Debian-1deb13u1)
OpenJDK 64-Bit Server VM (build 21.0.10+7-Debian-1deb13u1, mixed mode, sharing)
This error happens when a JDK is not installed
hmm ok so adding --rev 1.21 to the buildtools CLI call is having more success
It's usually caused by Ubuntu users wrongly assuming that the JRE release of OpenJDK means the jdk is installed
openJDK still has 2 release versions?
you can still get a jre if you want, it is just not the standard anymore given they push for people to create specialized images with jlink
seems its behind in terms of the official road map of java on that o.O
OpenJRE 🤡
Ubuntu has that in their package repositories and I believe they ship the JRE version by default or smth
well hot damn
due to the amount of people installing that
it appears I indeed only installed default-jre / openjdk-21-jre
and this is why I just stick with Oracle JDK
just install sdkman and direnv 🤑
Oracle 🤮
Well, I rather have things work the first time and so far oracle JDK has done that
"but at what cost"
and I typically get better performance with oracle jdk over openjdk
not sure whatt you mean by this
the cost is larry ellison's private island
oracle is one of the worst companies to ever grace this green earth
and yet you are using java
thanks to sun engineers not oracle
Ellison Files when?
sun engineers haven't touched it in over a decade
most of java hasn't been touched in over a decade tho amirite wheyoooo
in fact, java would have died if Oracle didn't buy them out
to be fair everything new or useful or interesting language-wise has been in the ice for a decade
i guess we did end up getting virtual threads after 4000 years of waiting
Oracle only owns the trademark. Most java decisions are made by the Java Community Process. Oracle isn’t spearheading development at all
I discovered recently that Oracle contract lock-in and strong-arming is so bad that it turns out entire companies exist to assist with Oracle contract negotiations: https://palisadecompliance.com/oracle-negotiations-contract-management