#development
1 messages · Page 95 of 1
should i do
private record AtlasKey(String canonicalPath, GlyphRange glyphRange) {}
private final ConcurrentHashMap<AtlasKey, TextureHandle> fontAtlasHandles;
or
private final Map<String, Map<GlyphRange, TextureHandle>> fontAtlasHandles;
-# typo so i edited
why is one concurrent and the other not
barring the concurrency diff, these don't even have the same usecase anyway 😭
they're not identical
in that case (A x B) -> C is equivalent to (A -> B) -> C A -> (B -> C)
wait that's the wrong way round
brain not working
now I think
both is concurrent
unless u mean that the inner map need to be explictly concurrent
proof?
counter proof: i dont dig it

Hello guys. Im currently developing a plugin and want to use a menu from Deluxe Menu. Can you help me and maybe tell me what the most elegant way is?
could someone help me with my plugin its not realy working (in InteliJ) bukkit is in red and almost everything else too
im in #164280495964815360
for example: https://i.imgur.com/pL2iYC5.png
I fixed Some parts but now minecraft automaticly deactivate it
that's not really a plugin issue
Hey there, friends. I had a sort of... Ambitious idea, and I wasn't really sure where to start on the development side of things. So I thought I'd ask for some suggestions; I'm trying to create a Minecraft Roleplay Server, kind of 'Civilization' style with different nations to side with, quests to do, and jobs to take up. It would play a bit like an MMO, but I want a focus on people being in-character, Roleplaying, and giving them reasons to work together. (Such as goblins roaming in groups, and being hard to solo. Maybe more dark-souls style combat where there's a lot of punishment, so traveling solo is hard). I'd have custom monsters, a big expansive world (but only certain areas would have harvestable nodes that respawn over time), and I wanted players to be able to talk to the NPC's using a chatbox or something similar, and while it can't do anything other than talk, I think it would be neat for it to be AI based chat with the NPC's (They'd be able to read from world lore and create their own history in the world to interact with players or to maybe come up with quests). Honestly, I don't know what plugins I'd need, where I'd begin on setting things up, or how to start. Any help in pointing me the right way is appreciated. :) DM's open!
Hey Guys can someone help me with my discord server and my minecraft server
Explaining what you need help on is appreciated
Can someone explain how I can create a circle radius of 10 around a player's location?
wdym "create"?
Create a radius of blocks*
so you want to place blocks in the world around the player?
sin/cos :))
if you're creating a radius of blocks then you need to use something like this
if you don't want to bother trying to understand it just scroll down to "algorithm" (though the explanation is really quite reasonable and only requires basic algebra knowledge to follow, you should have no problem implementing it)
usually with circles you'd use trigonometry but it's not as simple here since you want the circle to be continuous
and it's not possible to guarantee that by just iterating degrees
this reminds me of voxel raycasting
I remember seeing in spigot forums people doing raycasts for blocks or entities via iterating by a small step and checking if anything is in it
which is not only horrible for performance but it's also provably inaccurate 😭
Is there any1 here who knows how to fix ghost blocks on bridging server?
define ghost blocks
Bassically there is a mode when u bridge from start to end, and ppl are crazy with it so sometimes if they fall in the void server teleports them back to start and some blocks stay in their place
When u walk on them server think u are flying
ghost blocks are entirely clientside so theres not really a fix for them
this isnt the channel to ask that
either #minecraft or #general-plugins
But there are servers who fixed that
Csn some1 help
Simple question, on latest version using paper api, do I absolutely have to switch over Kyori Adventure API's Sound system to play sound?
is it possible to remove a open-command, so i can just link them when i want to?
@lime ravine #general-plugins
Makes sense, cus there's no way someone older making mods for free when you got job or work to do lol
some jobs pay real salaries
$50k+ yearly
but obviously most people aren't doing that
Hello, is there a way I can get placeholderAPI to work with folia? I tried to use it but its marked as not supporting folia, I am working on my own plugins and need a placeholder for other plugin support
have fun patching papi with ur own code to make it support folia
i think there's a fork on GitHub that uses one of many "universal scheduler" libraries that you can try
oh, it looks like it was merged July 1st actually! There just hasn't been an actual release since then
Try this build: https://ci.extendedclip.com/job/PlaceholderAPI/212/
Hey guys, do I need to add a craftbukkit dependency when using NMS packets?
there are several different methods, but adding the craftbukkit dependency would work, although in order to do that, you just have to run BuildTools and change spigot-api to spigot
alternative methods include:
paperweight-userdev(if using Paper)packetevents(doesn't require any NMS)
Can you provide example image of what the dependency should look like?
what do you have so far?
like your current dependency
<dependencies>
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot</artifactId>
<version>1.21.1-R0.1-SNAPSHOT</version>
<classifier>remapped-mojang</classifier>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>craftbukkit</artifactId>
<version>1.21.1-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
</dependencies>
have you tried to see if that works?
the second one might not even be needed
but I haven't used this approach in forever so 🤷
It doesn't :((
Im gonna try without the second
Im trying with a simple packet related code block
@EventHandler
public void onSneak(PlayerToggleSneakEvent e) {
((CraftPlayer) e.getPlayer()).getHandle().connection.send(new ClientboundAnimatePacket(((CraftPlayer) e.getPlayer()).getHandle(), 0));
}
what happens?
Use https://paste.helpch.at/ for errors, logs and configs. So we don't spam the discord.
is there anything below that?
what if you try removing the second dependency?
if that doesn't work, then try reading https://www.spigotmc.org/threads/spigot-bungeecord-1-17-1-17-1.510208/#post-4184317
I personally don't use this method, so I can't really help much besides providing that link (which should hopefully help)
or
Thank you, I think I might have pinpointed the issue
https://github.com/SpongePowered/Configurate
does anyone use this and have something that can deserialize itemstacks?
can you not just serialize to base64?
especially if you're Paper-only, iirc they have some really nice ItemStack serialization stuff built in
You might be able to abstract configurate under a custom DynOps impl (just make sure its lossless), after you've implemented that its then a simple task to convert between
(File Data) <-> YourDynOps <-> NbtOps (possibly skippable) <-> ItemStack CODEC
but if you dont wna do that paper does this for u (including invoking data upper fixing) with ItemStack#serializeToBytes ItemStack#deserializeBytes (ItemStack <-> byte[]) or ItemStack#serializeStack ItemStack#deserializeStack (ItemStack <-> Map)
I was looking to load items from a config is the thing, trying to use the same format as bukkits config system is
So players can define their items and stuff and i just load ItemStack with configuratate on a custom serializer but when i try it, it seems to not like itemmeta
smth like this
2:
==: org.bukkit.inventory.ItemStack
v: 2230
type: ENCHANTED_BOOK
meta:
==: ItemMeta
meta-type: ENCHANTED
stored-enchants:
PROTECTION_ENVIRONMENTAL: 1
that format is lossy and in some aspects broken
paper now serialises that to snbt instead to make sure it's lossless
how would you have a user config items and load them then?
the other option im thinking is the string format
minecraft:diamond_sword{Enchantments:[{id:"minecraft:sharpness", lvl:3}]}
what server version are you on ?
1.20.4
currently
Bukkit.getItemFactory().createItemStack(node.getString());
was thinking i just do this then
with that format above
right sure that's the old format, as long as you don't plan on updating because then you can't automatically migrate the configs lol
well, the format used in the command is different, it follows the data components format, see the examples in the wiki https://minecraft.wiki/w/Commands/give#Examples https://minecraft.wiki/w/Argument_types#item_stack
but paper's ConfigSerializable will safely serialise to snbt (which is different from the command format) to prevent the stupid old lossy/broken conversion, but as long as you use the ConfigSerial it should be fine once you upgrade, just make sure to recursively serialise the whole thing
i dont plan on serialzing rn, just deserializing
think ill definetly need a better solution otherwise
how can this shit be so aids
damn
whats snbt and how do i use it
just take an itemstack and run /paper dumpitem, at least i think that command existed in that version
you'll see
but in that case i'd go down the route conclube mentioned with using internals
but, y'know, stuff has changed since then
why not take an item from in-game and serialize that?
rather than having to write a whole load of itemstack crap in the config
then you can modify the written stack
i have tried to Itemstack#serialize but it dies when configurate tries to put it into the yaml
man this shit is so aids
are you recursively serializing it tho?
as in, some values might be instances of ConfigurationSerializable which need to be serialized
does it not just do it itself?
configurate or ConfigSerializable?
i guess configserializble? im just doing ItemStack.serialize()
because spigot/old paper don't do that by themselves https://hub.spigotmc.org/stash/projects/SPIGOT/repos/bukkit/browse/src/main/java/org/bukkit/inventory/ItemStack.java#491-493 it's the YamlConfiguration that takes care of the recursive serialization when saving it
i mean i don't know anything about configurate but if it's anything like gson, you could just register a hierarchical type adapter for ConfigSerializable and it will just handle it when it encounters it
public class ItemStackSerializer implements TypeSerializer<ItemStack> {
@Override
public ItemStack deserialize(@NotNull Type type, ConfigurationNode node) {
Object raw = node.raw();
if (!(raw instanceof Map)) {
return null;
}
@SuppressWarnings("unchecked")
Map<String, Object> data = (Map<String, Object>) raw;
return ItemStack.deserialize(data);
}
@Override
public void serialize(@NotNull Type type, ItemStack obj, @NotNull ConfigurationNode node) throws SerializationException {
if (obj == null) {
node.set(null);
return;
}
node.set(obj.serialize());
}
}
this is all i wanted to do
well sure, but then it does not know how to serialize the ItemMeta
just register an adapter for ConfigSerializable instead
of specifically ItemStack
ok i need to see how to do that then
Boxpvp setup for only 7.99$
Hey everyone, does PlaceholderExpansion’s onRequest method always run on the main thread?
death
iirc this depends on the caller of replacePlaceholders method.
methods run on the same thread they were called with in java, so here's how you can find out:
- go to PAPI source
- find that method
- see if it actually handles the logic, or if it requests it from the main thread and blocks until it receives it
Hey there, I’m looking for a long-term language buddy to chat, learn, and laugh with. I like keeping things light but consistent, so we can really grow together. If you’re up for fun convos and steady progress, let’s connect. No pressure, just good vibes and learning.
i love good vibes and learning
sorry i only opt for bad vibes
bastard!!!
😱
What is the easiest way to load offline player data? Like checking a player's coordinates.
probably just storing it yourself
although you can also use PDC and store it on the player/offlineplayer
I want to access a lot of it though. I really need to just load the NBT. I know it can be loaded but was always a bit difficult.
oh whoops I misread the question
although I mean why not store it yourself?
it probably won't take that much storage anyways
I don't know how to actually read the raw offlineplayer data though
seems like you can get statistics already from OfflinePlayer
maybe you can try looking at the server code to see how the minecraft server loads the player data
I'm having trouble with using the right data for storing data about breaking blocks getType seems to use plural version of block type ?
Material.matchMaterial does not match Block blockBroken = event.getBlock(); WHY?
do you have an example?
for example, I'm pretty sure that CHORUS_PLANT is the "block" version of CHORUS_FRUIT
so you have to watch out for those differences
assuming that's what you mean
this is not seeing real block name for CARROT, POTATO and BEETROOT
final String worldName = blockBroken.getWorld().getName();
List<String> crops7 = new ArrayList<>(Arrays.asList("CARROTS", "WHEAT", "POTATOES"));
List<String> crops3 = new ArrayList<>(Arrays.asList("BEETROOTS", "NETHER_WART"));
if (crops7.contains(blockBroken.getType().toString())){
Ageable ageable = (Ageable) blockBroken.getBlockData();
if (ageable.getAge() == 7) {
PlayerStatSpecification specification = new BlocksBrokenSpecification(player.getUniqueId(), 1,
worldName, blockBroken.getType());
// Update value to new ageable7 stat.
plugin.getDataManager().setPlayerInfo(player.getUniqueId(), stat, specification.constructQuery());
}
}else if (crops3.contains(blockBroken.getType().toString())){
Ageable ageable = (Ageable) blockBroken.getBlockData();
if (ageable.getAge() == 3) {
PlayerStatSpecification specification = new BlocksBrokenSpecification(player.getUniqueId(), 1,
worldName, blockBroken.getType());
// Update value to new ageable3 stat.
plugin.getDataManager().setPlayerInfo(player.getUniqueId(), stat, specification.constructQuery());
}
}else{
PlayerStatSpecification specification = new BlocksBrokenSpecification(player.getUniqueId(), 1,
worldName, blockBroken.getType());
// Update value to new stat.
plugin.getDataManager().setPlayerInfo(player.getUniqueId(), stat, specification.constructQuery());
}
}```
ah
seems to be a similar case
the block version is different from the item/food version
and that's a minecraft-internal design, not really spigot's choice to have them separate
in my Plugin I use Material match and it don't like CARROTS so you can get the data from the other plugin
carrots is the block type, carrot is the item type, the fact that Material mixes both block and item type into a same class has always been an issue
so getting the material from the block will yield the block type name, which is carrots, and that works perfectly fine with matchMaterial
@minor summit maybe, but ,my plugin is built on 1.6.5 so the pural of crops it rejects
no missed a number 1.16.5
idk, it works fine for me
class TestPlugin extends JavaPlugin {
@Override
public void onEnable() {
getSLF4JLogger().info("Material.matchMaterial(\"CARROTS\") = {}", Material.matchMaterial("CARROTS"));
}
}
[10:08:21 INFO]: [test-plugin] Material.matchMaterial("CARROTS") = CARROTS
[10:08:29 INFO]: This server is running Paper version git-Paper-794 (MC: 1.16.5) (Implementing API version 1.16.5-R0.1-SNAPSHOT)
like that's just how things work, carrots is the block and carrot is the item, there is a Material for the carrots block, Material.CARROTS, and for the carrot item, Material.CARROT, same for potatoes/potato or dkim's example with chorus_plant and chorus_fruit and many other materials
and Material.matchMaterial works perfectly fine with all of them
it's literally just a string match against the material names
nothing fancy
no
Unfortunately, a month ago, my Upwork accounts ( of any country)had been suspended for some reason
I really wonder why 
@minor summit I didn't code that section of the plug-in when I get home maybe somebody could help me figure out what's wrong cuz what I see what you posted it should work but it doesn't for me
sure
fortnite emotes plugin
no point of making "hello world" plugins
no
something simpler dawg
emotes are absurdly hard to do
thats like
yeras of mc plugin dev experience needed
ts shit aint mods
hardest part of emotes plugin is making the actual emotes with blockbench
i suck at that lmao
me too
i suck anything related to blockbench
in config I change Carrot to Carrots and I get this
CARROTS indeed is not an item; it's a block
so you cannot use it in an ItemStack
yes I caught that after I posted it
, just not sure why it's check if it is a item not a block
I think an item, by definition, is something that can show up in the inventory
so by allowing non-items in ItemStacks, it can cause further issues and confusion down the line
this is the code using itemstack when it is really checking blocks ``` public boolean initRequirement(String[] options) {
String materialName = null;
int amount = 1;
String displayName = null;
boolean useDisplayName = false;
if (options.length == 1) {
amount = Integer.parseInt(options[0].trim());
}
if (options.length > 1) {
materialName = options[0].trim().toUpperCase().replace(" ", "_");
amount = Integer.parseInt(options[1].trim());
}
if (options.length > 2) {
displayName = options[2];
}
if (options.length > 3) {
useDisplayName = options[3].equalsIgnoreCase("true");
}
ItemStack itemStack = null;
if (materialName != null ) {
Material matchedMaterial = Material.matchMaterial(materialName);
if (matchedMaterial == null) {
this.registerWarningMessage("Material '" + materialName + "' is not a valid material.");
return false;
}
itemStack = new ItemStack(matchedMaterial, amount);
}
this.wrapper = new BlocksBrokenWrapper(itemStack, displayName, false, useDisplayName);
this.wrapper.setBlocksBroken(amount);
if (amount < 0) {
this.registerWarningMessage("Amount is not provided or smaller than 0.");
return false;
} else if (this.wrapper == null) {
this.registerWarningMessage("No valid block provided.");
return false;
} else {
return true;
}
}
I added a band aid just before it checked the data to fix it if (block == CARROT) block = CARROTS; if (block == POTATO) block = POTATOES; if (block == BEETROOT) block = BEETROOTS;
custom world gen
buddy noone wants to do that for free
so Im trying to use the PlaceholderAPI dev api, and its not working. none of the classes get imported from gradle or anything
repositories {
maven {
name = "placeholderapi"
url = uri("https://repo.extendedclip.com/content/repositories/placeholderapi")
}
maven {
url = uri("https://repo.extendedclip.com/releases/")
}
}
dependencies {
compileOnly("me.clip:placeholderapi:2.11.6")
}
```https://wiki.placeholderapi.com/developers/using-placeholderapi/#gradle
I don't know what is wrong
no errors?
when reloading gradle
I don't get any errors, it works perfectly fine- however it doesnt add any of the classes
so you can't import anything?
nope
wtf I just reloaded it and it worked
i swear that did not happen earlier
thank you
im using ProtocolLib and trying to disconnect the player, I figured out how to disconnect the player but ProtocolLib still processes the packets, How should I properly disconnect and cllose the connection?
disconnect the player? Why don't u just kick him
Why though? Why don't you just kick with the api?
this feels like it would be extremely likely to cause problems with other plugins
since you're basically "silently" removing the player
which surely is not good practice
not everything needs to be packed based
fine
I suppose it depends what plugins you are using, but some of them could listen to PlayerQuitEvent or whatever, and if removing them by packet doesnt trigger it, it could lead to potential issues
and honestly I don't see the gain of doing it via packets
There is no gain only problems
im developing a anticrash
anticrash?
do you need to develop it?
no, its just for fun lol
Best anti-crash is probably to update your server :')
iirc you need to close the connection at Netty level, something like (if you're using NMS)
((CraftPlayer) player).getHandle().connection.disconnect("Some reason");
I'm not using NMS
yeah I'm not sure if you can do that without NMS
you can if you just kick them through the api
how are you developing an anticrash without nms or netty
Put the kick code inside a runTask
how
nvm
I needa check if a player is online (ProtocolLib packet handling after kick)
so i dont process extra packets
nvm
there is a isOnline function 💀
@fiery osprey what is your reason for doing everything packet based besides "I am making an anti crasher"
(which btw is irrelevant, just cause it's an anti crasher does not mean it all needs to be packet based, you should still not be doing these things via packets as previously said, it would break a ton of other plugins relying on it)
how to make 1.8 plugin in intellj
what
make a 1.7 plugin and add +0.1
anytime
i think you have to set the spigot api version to 1.8 in your build.gradle
iirc
or are you asking for like a full on tutorial on how to make a plugin
that will work
not much different than any other version tbh
Hello, May I ask how I can apply for an ecloud account?
You're first step would be to link us to the repo of the expansion you're looking to upload
Alright, here’s my expansion https://github.com/Null-K/Expansion-CraftEngineAddon/tree/master
Is there a reason it's not built into the plugin?
I'm not the author of the plugin, I just made an expansion for it.
Ah I see, best thing to do would be to pr the orginal plugin adding the expansion into the source. This way there's no expansion to download and the versions will always be aligned
I’d prefer to keep it as an external expansion. This way, I can update and maintain it independently without affecting the original plugin.
I'm not sure why this returns null for rsp
if (rsp == null) {
return false;
}```
Maybe because the service isn’t registered at that point in time
make sure you have an economy plugin installed
(Vault doesn't count)
Besides Vault, did you install any other plugins that register an economy system, like Essentials or XConomy?
And add dependsOn vault
Thanks guys it was the simple thing of course, I must of deleted essentialsX and didn't realize I didn't put it back
-# must have*
I'm making a plugin that will have a custom value type. Different sets of armor and swards give you different value type that changes the damage players deal and receive based on those values. My question is should I update the value I could do it when the player changes the item they are holding or changes their armor pace. Alternatively I could add up the values for the player and mob when damage is dealt and I'm adding the costum damage values. I don't care about how easy it would be to implement I just need it to be very efficient as it will happen a lot.
(Im using maven and it's a Bucket plugin)
bucket
why not just add data to the armor and weapons then calculate the damage based off of that
While see for example if i had an ice weapon and my enemy had some ice armor i would do more damage but i would do less if I had a different type.
sob just check if the armor is ice armor and the weapon is ice weapon when calculating damage
Can you make an enum class where you just save all your items? and than make an element enum class or some sort that and take the item from the item enum class and the element from the element enum clas
How to check ExutableItem in your inventory to exchange a custom item for something else
That is helpful thx. But it doesn't answer my question. Should i run code that checks all the Metadata of the armor when damage is done or when armor is equipped / sward swapped to?
the 2nd one is unnecessarily complicated, slow, and bug prone
there's no event that tells you if a player's armor was changed
since another plugin might change the data of the item stack, which would not call an event
I answered your question earlier
.
Oh sorry i missed that thx👍
2nd one being mine right? What bugs could appear in it? Cause i've used this logic for almost everything i've done and i havent found any bugs
someone know the name of class in cobblemon when can find capture method
done what exactly? attached data to player that you change on armor swap and then you compare against that data when doing damage calculations? or wdym?
I also already described what bug it could have
looking for developers to help code in Maveen DM ME
Do it cause im curios
I already described it
right below the other message
Ive done his ideea or some similar stuff and i had no problem
but why would you do that
and it would obviously break if the item is modified and an event is not thrown
which can happen for a myriad of reasons
Oh wait nvm im stupid 💀 i was thinking of something else when i responded to that guy
Yeah i can see the bug
what are you coding in maven
https://github.com/sspacepro/dungeoncreate all the stuff in (elementArmor is for testing not exacly how i will implement it in the future)
guys. I am making a plugin rn and I am currently using this code
@EventHandler
public void onInventoryDrag(InventoryDragEvent event) {
String title = ChatColor.stripColor(event.getView().getTitle());
String menuTitle = ChatColor.stripColor(manager.getConfig().getString("menu.title", "Your Backpack"));
if (!title.equalsIgnoreCase(menuTitle)) return;
// Cancel any drag that touches the top inventory
for (int slot : event.getInventorySlots()) {
if (slot < event.getView().getTopInventory().getSize()) {
event.setCancelled(true);
return;
}
}
}
@EventHandler
public void onInventoryMove(InventoryClickEvent event) {
if (!(event.getWhoClicked() instanceof Player player)) return;
String title = ChatColor.stripColor(event.getView().getTitle());
String menuTitle = ChatColor.stripColor(manager.getConfig().getString("menu.title", "Your Backpack"));
if (!title.equalsIgnoreCase(menuTitle)) return;
// Cancel all click types in top inventory
if (event.getClickedInventory() == event.getView().getTopInventory()) {
event.setCancelled(true);
}
}```
for canceling movement in the GUI
but its not working
I am able to take out items of the GUI
menu:
title: "&8Your Backpack"
size: 27 # Must be multiple of 9
items:
border:
material: GRAY_STAINED_GLASS_PANE
name: "&r"
lore: []
slots: [0,1,2,3,4,5,6,7,8,9,17,18,19,20,21,22,23,24,25,26]
Config ^
@dawn viper
mind helpin rq
you should consider using UUID's for your menus, matching them based off the title is not secure at all. add some debugs and see where its going wrong:
@EventHandler
public void onInventoryMove(InventoryClickEvent event) {
if (!(event.getWhoClicked() instanceof Player player)) return;
Bukkit.broadcastMessage("Debug: InventoryClickEvent triggered for player " + player.getName());
String title = ChatColor.stripColor(event.getView().getTitle());
String menuTitle = ChatColor.stripColor(manager.getConfig().getString("menu.title", "Your Backpack"));
if (!title.equalsIgnoreCase(menuTitle)) return;
Bukkit.broadcastMessage("Debug: InventoryClickEvent title matched for player " + player.getName());
if (event.getClickedInventory() != null && event.getClickedInventory() == event.getView().getTopInventory()) {
Bukkit.broadcastMessage("Debug: InventoryClickEvent top inventory matched for player " + player.getName());
event.setCancelled(true);
}
}```
DeluxeCombat incident 🐸
pretty sure this was the exploit in that anticheat plugin too wasnt it hahah, cant remember which one
but remember seeing a video on it
it was Vulcan. They had an admin GUI that allows you to change plugin settings with it. And you could access it by renaming a chest with that title and placing it. And one of the settings you could change is add a command to run when a cheat is detected so people would make it op them and then use that cheat. It was so bad that they released the updated version for free to everyone so it also doesnt affect people using cracked versions of the plugin.
You are supposed to use an InventoryHolder to check instead of the title.
officially you arent supposed to do that i think haha
Spigot says you shouldn't but don't provide any good reason as to why, Paper recommends it
oh i didnt know paper recommended it
lovely
oh yeah i think the problem was that getHolder() can unintentionally cause loads of data to be loaded/cloned
but paper fixed that with the false param i guess
PlaceholderAPI can parse multiple deep placeholders through one call right? For example if I first input %plugin_player_name% and that returns %otherplugin_name_color%Player Name, that would work right?
In this case plugin also uses PlaceholderAPI.setPlaceholders for the player_name placeholder
If I recall yes
It cascades
Aight ty
you sure about this? I am pretty sure I tested this before and it parsed multiple layers...
That's why expansions like parseutil exist
interesting, wonder why it worked last time
maybe it was something different
sorry for the misinformation in that case!
It worked for me. Note that plugin also calls PlaceholderAPI.setPlaceholders before returning the value
But yeah it doesn't check through layers automatically
🙂 that is not the same as setPlaceholders doing it automatically
No, I kinda misunderstood what was going on when trying to workout the issue lol
is parseutil a plugin?
But it can be done automatically with just a simple loop no? Just checking if the returned string contains % and if the string was changed
parseutil is an extension, or just util, I can't remember
And yeah, you could simply check the output, ig thats what the expansion does.
Couldn't find this, the one I found is called reparser
Well just because it contains % doesn't mean it contains a placeholder or a valid one, so it would loop infinitely
@dense drift Unknown expansion.
And how would you track if the string was changed
@dense driftThe eCloud is currently non responsive, please report this to staff in https://helpch.at/discord
-list
F
I cant remember exactly the name, but @marble heart knows more for sure
i m not aware of such expansion
.equals() would suffice right? If it returns true, no more valid placeholders exist in the string
yes
utils_parse @marble heart
Smh
declaration: package: org.bukkit.inventory.meta, interface: SkullMeta
declaration: package: com.destroystokyo.paper.profile, interface: PlayerProfile
@here
1.21.10 paper
When I join my server and when I leave, I always go to the same place after I leave. Is this problem only with me
what does that mean
When I join in my server and go to break a stone or something, and after I leave the server, I am always teleported to the same coordinates
1.21.8 does not have this problem
ask in paper's discord
I'm currently attempting to recompile https://github.com/cijaaimee/Slime-World-Manager
they use nms code but the paper jars i downloaded don't have the nms classes. and SWM uses maven😭 so i cant use papers gradle plugin. does anyone have a workaround?
run BuildTools
and it'll get the org.spigotmc:spigot dependencies from your local maven repo
you don't need paperweight for NMS
do what dkim said
Help me pls
Cannot resolve me.clip:placeholderapi:2.11.6```
use https://repo.helpch.at @keen lynx
HelpChat's public Maven Repository for our projects.
hey can u help me?
when is LootGenerateEvent being called?
I set a chest with (for ex).:
/setblock ~ ~1 ~ minecraft:chest{LootTable:"minecraft:chests/desert_pyramid"} replace
but when I open it it's not being called.
nor does it work for chests already in the world, so idk
Late reply but found this:
WILL be called by plugins invoking LootTable.fillInventory(org.bukkit.inventory.Inventory, java.util.Random, LootContext)
From paper javadocs
not really? why would it be? lol
in spigot's api (or paper's) is there an event which listens to the formation obsidian thru lava and water?
BlockFromToEvent?
I am not sure why but it randomly started working, I must've changed something
not really useless. there are some things that we want to remove from loot tables, for ex. we have a custom enchantments plugin and some datapacks have loot-tables that can generate any enchant, including custom ones, we don't want that
and also we want to make some other items unobtainable
sure I could just go through all the datapacks and edit their lootables (or override vanilla ones), but this is, imo, faster
its BlockFormEvent i think
BlockFromToEvent is for position change
Does anyone know how to add custom rgb gradient to luckperm ranks?
animated rgb
Ping me please
I believe those are done via placeholders, not sure which one though
I see thanks tho
It doesn't support 1.2.1.8 tho!
is there a way in DM to make items that have a default stack size of 1 (cakes, for example) display stacking count?
I have an item thats a cake with amount 3 set, and it only displays as 1 cake in a menu
this happens because minecraft java edition a cake is 1 slot each, i'm pretty sure amount will not work in non-stackeable items, although minecraft bedrock allows cakes to stack up to 64.
u can't change this, but you can get illegal stacks in EssentialsX, i really don't know if you can use stacks of non-stackeable items in dm.
correct, was just wondering if there was a way using the new item attributes, since one of them is to set an item stack size
yeah i mean, you can change the max_stack_size data component and then change the item's amount, that will work fine on a cake item, but don't ask me how to do that on DM, lol
recommend me some 1.8 forks i can use
please
i see FlamePaper, PandaSpigot
they both seem to be updating still
None, stop using over a decade old versions
its unfortunately not by choice 🙁
Also, wrong channel
Everyone has a choice
which is best
#minecraft or #general-plugins i'd assume
Hi everyone,
I’m extending the supported versions for my plugin which currently supports 1.17-1.21.1 into 1.21.2+.I'm using packetevents to detect the movement keypresses to move the cart vehicle and I’ve run into a movement issue on 1.21.2+ (works fine on older versions).
Problem:
When the player presses and holds W, the minecart moves only once (one tick).
It does not continue moving while the key is held.
Releasing and pressing again triggers another single move.
Older versions (<1.21.2) using STEER_VEHICLE work perfectly with hold-to-move.
What I Know:
- In 1.21.2+, STEER_VEHICLE is replaced by PLAYER_INPUT.
- PLAYER_INPUT is only sent when input changes, not every tick.
Question:
- How do I make hold-to-move work on 1.21.2+ with PLAYER_INPUT?
- Do I need to assume input persists until a packet says otherwise? Or is there a better way to detect continuous key hold?
- Any help or working examples would be greatly appreciated!
PacketEvents Version: 2.10.0
Spigot Version: 1.21.4-R0.1-SNAPSHOT
Full listener code: https://pastebin.com/PVgr2B1K
Thanks in advance
you want to do the second option, but you need to be a bit careful as that packet is sent with jump etc even when the input does not change
especially with movements on half blocks etc
Hey! Thank you so much — your advice was spot-on and fixed it perfectly!
PLAYER_INPUT is sent every tick, even when movement inputs don’t change. I was overthinking it with stale cleanup and persistence logic.
is there way to stack 2 same item with different itemmetas using packetevents
Does anyone know what the replacement for SimpleBuilder using TriumphGui is in recent versions? The basic builder for GUIs. It seems like all types now are specific and not sure how BaseGuiBuilder should be implemented
in v4?
using 3.1.13
I used 3.1.10 before, which included a class called SimpleBuilder for guis
Ah looks like it was renamed to ChestGuiBuilder
Uh, why do you need to use the parent builder class? 
Just using ChestGuiBuilder, makes it easier to have the same configurations for many GUIs in a plugin. For example all GUIs I use disable all interactions.
How can I load texture gui heads really fast in a GUI? I have 1,000 player usernames and I need to display all of their heads in a GUI but I get rate limited
yeah not many other options
Any idea how I can use a command registered in DeluxeMenus to open a different menu depending on the world the player is in?
dont think u can do that with DM alone, ud probably want to get or make a plugin that runs a different cmd for the player based on criteria, when they do the plugins cmd
If there is a mineshaft in my server, with which plugin can I put levels on the different mines?
For example, when players reach this level, they should have access to this mine
wrong channel
hi guys, im getting some errors when putting vault like a dependence of my plugin, it says that the repository doesnt exist but im putting exactly the same in vault's github
and idk whats happening because i try with like 10 different repositories
oh wait nvm i solved it
good job
So, I finally built plugin, but it's up to date? idk what to do, who can help?
That doesn’t seem like a problem to me
Question regarding JIT for Java: So I didn't actually know this was a thing that optimizes your code at runtime before now. If I understand correctly, it basically caches loops etc in overhead and then reuses it if used many times. Doesn't this mean that it's not necessary to cache so many things in applications? For example user data
I havn't looked into this a lot, so I might be completely wrong
I dont think it necessarily caches any results, but it may simplify some instructions
and it definitely won't cache user data
more than likely whatever the JIT compiler is doing u dont have to worry about, but im no expert
Yeah that was probably a stretch lol
That's probably true, I just understood it as simplifying by adding overhead to store often used values
well, JIT basically compiles bytecode into native machine code at runtime, just before (many) execution(s) (hence "Just in time")
without it JVM would have to interpret ALL the bytecode line by line, which is way slower, so JIT converts "hotspots" (frequently used code, like loops and methods) into machine code, does inlining, loop unrolling, removes dead code (iirc)
next time the method runs it, in theory, should be way faster (another reason why benchmarks need warm-up)
you can see what JIT does by using
-XX:+PrintCompilation
JVM flag
Yeah it definitely doesn’t do anything data wise
Ahhh that makes more sense yeah lol. So this can only be done at runtime because the jar should work for all operating systems right? I assume that's why it's not just directly compiled to native machine code instead of byte code to begin with
yes
yes
and also doing it at runtime often allows you to make better, more targeted optimisations
because you can analyse how the code actually behaves at runtime rather than just at compile time
Interesting, potentially exceeding c++ performance at stable runtime then perhaps? As that's just compiled once I think atleast
im sure it can in some cases although it will vary a lot
there are still some overheads in java that you cant really optimise away
Yeah makes sense. I always just had the idea that java is a very slow language, but for some cases it would be fast then I'd assume
imo java is unfairly considered slow
and once the jit kicks in it's usually "a bit" slower than a native lang but rarely "significantly" slower
iirc after the initial warm-up java is within 5-10% (may vary) of C++ in terms of performance
That's pretty good I'd say
sounds about right yeah
for sure
apart from really performance critical stuff i think it's fine
fun fact GraalVM JVM comes with both JIT and AOT
yeah graal is cool too
Then the compiled application wouldn't work for all operating systems tho right?
correct
From their website
Are There Any Issues With AOT, Then?
Yes, there are.
When Graal/any AOT compiler creates those native executable, it needs to do static code analysis with a so-called closed-world assumption. Effectively meaning that it needs to know all classes that are reachable at runtime during build time, otherwise the code won’t end up in the final executable.
And this means that everything which involves dynamic loading, such as reflection, JNI or proxies - all the good things that a lot of Java libraries and projects use - is a potential issue.
you typically AOT compile and then put it in a docker image or something
Ahhh yeah as it just runs in unix / linux or whatever anyways
So not runnable on windows?
no you can compile to a windows binary too lol
docker just gives you portability across platforms
for free
and last point missing from screenshot
This is not an issue when putting, for example, your server executable into a Docker container, but more on that in a second.
brister mitten is a better source than blog screenshots
what about Mitter Bristen
bad source
tldr AOT bad JIT good 😎 ✌️
no! JIT bad AOT good!!
if james gosling was alive today and was gay: i am quite fond of MEN
i can 😎
Probably a dumb question, but how does steam and game platforms in general then make sure the games support required platforms? Do you download an os-specific binary when downloading the game?
yeah i think so
pretty much, yes
iirc Steam automatically detects your platform and downloads whats needed
Makes sense, I always just thought it was one .exe file that works on basically all platforms lol
or it may just be bundled or whatever, for ex Unity games (I think)
If it’s an exe there are only really 2, or nowadays just 1 platform you need to support anyway
That being 64 bit windows
Yeah probably not many playing on linux systems
sadly no
cool shit
On a similar note I remember reading about I think one of the older fallout games which rather than implementing proper localisation they just packaged like 20 versions of the game into 1 so the download size was massive
just bethesda things
based?
One of the civ games packed like 11 different intro videos for each language making the videos larger than the actual game.
I remember ripping it
Now games just package unoptimized textures/models and download size are still massive, it never changes 😔
i remember when ps5 came out and everyone was saying file sizes are going to be so much smaller now!!
whatever happened to that
Wishful thinking
Hardware changes are so random. I remember calling up LG to see if one of their Blue-Ray burners could read DVDs and CDs as well, he said yes, but that the new cases didn't have slots for them and that they were basically going out of business making optical drives.
I thought people would just adopt HDDVDs abd Blue-Rays not just abandon optical media all together...
yeah that's literally happened with Helldivers 2 lol, I think on PC it's like 140GB and on console it's like 30GB, because they copy pasted all the assets a bunch of different places to help HDD seek times
but like, nobody uses HDDs anymore, and even less would be using it if it wasn't 140GB, so it's like a self-fulfilling prophecy lol
id be surprised if an ssd isnt part of the minimum specs for that, considering its only on new gen consoles
Laughs on bf6
(Which is known to be hella optimized and compressed)
I'd be very curious to see ssd vs hdd total percentage on steam, but they only have specific data like that for graphics cards 😔
yeah if i remember, it's really not much, and it's not worth 5xing the size of the game to do it
and then people have to put it on their bigger HDD because it's so big, like ugh lol
its surprising when i hear friends of mine putting beafy ass games on an HDD, but have a GPU that the price of like, 2-3 3TB SSDs
seems fine, ||pranked by staff||
Hey, I'm kinda stuck with the following issue and I would really appreciate some advice.
I'm a dev for an kingdom server which runs on spigot and version 1.21.8.
And I've been tasked with the following:
In the kingdom server we wanna run a texturepack for a better playing experience, but with the use of modelEngine we wanna use custom textures for every kingdoms weapons & armor.
For example KD1 gets red swords and armor & KD2 blue swords and armor, etc.
So that when a player runs the texturepack they can see from which kingdom someone else is based on the armor they have on.
And besides that we also have the texturepack for mythicmobs for some bosses which you can fight.
What would be the smartest approach? seeing as it only possible (I think) to serve only one texturepack at a time.
You can serve multiple resource packs at the same time
really? Could you please elaborate?
Using Paper api or Adventure api, you can just do Player#sendResourcePacks with multiple packs (possible since 1.20.3)
No idea if Spigot has a way for that, they are always mega outdated
I understand, however, what would be an smart approach towards what im trying to achieve? Is there an plugin you can recommend for spigot 1.21.8 which could help me?
seeing as my server isn't running on paper
Probably wouldn't be hard to manually merge the two packs, I mean it's just files at the end of the day
But no I don't know of any plugin that does that, this channel is for coding, if you are looking for plugins you'll probably have better luck in #general-plugins or even #minecraft
Any particular reason to run spigot? There is like no reason to not run paper nowadays
its prefered by the head dev and owner of the server
merging isnt really that big of a deal, that I agree with you on. But how would you visualize the diffrent textures per kingdom?
You can just apply a custom texture to the armor using item components
well then say its not possible if you are using spigot 😎
its just adding a custom item
and it'll show up for everyone as the custom texture
this is trivial with ItemsAdder for example
or any such plugin
or you can even do it manually and it's not hard
Hello M0dill.I am developer.I hope to collaborate with u.if u are interested in me,pls DM me
hello! no!
Hello Emily do you want to collaborate with me??
how
Idk do something cool or stuff like that
oh okay
What about me 🥺, we can totally recreate hypixel skyblock together right?
Just like, you do the work, and I slap my name in the authors
i can slap you, yeah
Kinky
Is this what hell is?
This is just like that time bender did wrestling !
Wow no Yoshi hot pocket
Just make hypixel with kotlin 🥀
someone has an open source version of Hypixel Skyblock made with Minestom
why is ij saying this, is he stupid
He‘s smart enough to understand that methods aren’t always idempotent but not smart enough to understand that it is in this case
damn
so what kind of values could V be in HoverEvent<V>
cuz like when I'm trying to do a replacement I need to assume V is a component
can it be anything else?
ah perhaps translatablecomponent
that's a component too tho
surely it's just always a component
oh it can show items and entities and stuff cool
It can be:
- Component - Normal hover
- ShowItem - Self explanatory
- ShowEntity - Self explanatory
- String - Show achievements
so would only need to replace placeholders on HoverEvent<Component> right
Probably yeah
cool
Doubt anyone would go as far as wanting to replace things on item's name/lore or entity's name only when being shown in chat lol
are hover events only for chat?
Chat and dialogs are the only places I can think of
luckily dialogs aren't implemented in adventure yet it seems
so don't have to worry about those
Yeah it's just a component it doesn't matter where it is it'll behave similarly
what in the fk, is this just your usual IJ bug?
Could be a wrong file format too?
hello
I am searching for a python dev with also a little knowledge about html, css and javascript. there is a little thing that has to be done on my open source project. you can see a detailed description about what has to be done in the issue.
https://github.com/VulcanoSoftware/VulcanoCraft-plugin-repository/issues/14
as a reward you get a thank you in the readme.md, and if you like you may also put some free ads on my readme.md so you can advertise your services.
thanks in advance, i am looking forward to work with you ❤️
Not the right channel, #1434110119737692234
Hello, is there a way to disable the worldborder collisions in spigot 1.21 ?
I want to set 2 click requirement in deluxemenus , one is currency and 2ed is lp permission . I already do the currency permission but I can't do the lp permission , can anyone help me . I want that if somebody have the enderchest.size.4 perms in lp then he have the permission to click this option in deluxemenus
either #1434110119737692234 or #1434110121558020117
hello peeps
boolean success = Bukkit.getServer().unloadWorld(gameWorld, false);
if (!success) {
Bukkit.getLogger().severe("Failed to unload world " + gameWorld.getName() + " for reset!");
return;
}```
what reasons would cause unloading a world to fail? Is it possible to unload the main world?
Can’t unload the main world. Atleast on spigot.
is there a good way to reset it? As in delete everything and have it regenerate?
specify a different world in server.properties as a "primary" world, keep it as is so players can go somewhere when you reset the actual primary world.
can you do that programatically?
without restarting lol
I ended up just not using the primary world and basically ignoring it
wdym?
yeah I think this is what M0dii meant as well
Does anyone know of any ways to fix Logger (java.util.logging.logger) not parsing colour in console?
[20:23:34 INFO]: [ShopGUIPlus] Wackenzie bought 1 x §f§f§x§f§f§8§9§9§fᴄ§x§e§e§9§5§9§8ᴏ§x§d§e§a§2§9§2ᴢ§x§c§d§a§e§8§bʏ§x§b§d§b§b§8§5 §x§a§c§c§7§7§eɪ§x§9§b§d§3§7§7ʙ§x§8§b§e§0§7§1ᴇ§x§7§a§e§c§6§ax§x§7§8§e§7§7§d §x§7§7§e§1§8§fᴘ§x§7§5§d§c§a§2ʟ§x§7§3§d§7§b§5ᴜ§x§7§1§d§1§c§7s§x§7§0§c§c§d§aʜ§x§6§e§c§6§e§cɪ§x§6§c§c§1§f§fᴇ for $50 from fall shop
I've previously done the Bukkit#getConsoleSender#sendMessage way but I'd prefer to maintain use of Logger in this specific case. I'm tempted to do some ANSI parsing/mapping but it would be nicer if Java/Mojang/Bukkit has some sort of provided solution. 😄
not using legacy colors should do the job
legacy colors hate aside, think ASL uses the logger and colors
maybe check that out
Help me out here since my brain ain't braining at 2am, what format replaced legacy?
Is it mini-message or is that something different?
yes and no. Legacy colors refer to using § (& for users), the "new" (not new, mojang introduced this YEARS ago) is components for coloring/decorations/etc. Minimessage just allows you to do the latter easily.
Ah, right. I assume Logger doesn't support components then?
this is kinda going off afonso
but you can use adventure, which, based off of its github, has a logger module
so if you want seamless integration, you can convert legacy → component → log via adventure
it seems to also have an ansi serializer
Pretty sure paper has a "ComponentLogger" which allows you to use info, warning, etc and support it
And this is when I want to kill myself because I'm supporting as low as the weakest of the weak - Spigot 1.8
yeah you can still use it
just have to shade adventure
and use the ansi serializer
I'm assuming the logger module is for this
but ansi should work
Not sure about spigot (but who cares about that one)
I agree too
wdym
Well if using paper you dont have to shade anything
And yes think it might use ANSI internally (ComponentLogger)
it wouldn't matter if spigot/paper/etc supported ansi tho or used it internally
since you can shade adventure as a whole and print it out directly to console (or logger ig)
idk
¯_(ツ)_/¯
Try and see ig
Well, I always am.
Rightfully so. 

how can I get rid of this suspicious remove warning, I'm not iterating over the the same array, will it get fix if i extract it into a method ?
Oh god, so many static methods 😭
What exactly is the warning? I'd assume is related to an index out of bounds but you have created a new array list so that confuses me
doesnt it suggest to use an iterator?
I am on the phone, can't read much of the code
For each would be better yeah, no reason not to
what does the warning even say?
That is just how ImGui is, same for LWJGL, most of the calls are just static methods
suspicious remove in a loop
and that is all the warning is, no suggestion for fix
extract it does remove the warning
like this ?
List<Set<InputKey>> update = new ArrayList<>();
for (Set<InputKey> keyCombo : keyCombos) {
if (keyCombo == combo) continue;
update.add(keyCombo);
}
Project.updateInputActionKey(actionName, update);
Do you want to remove it only from update or also from keyCombos?
just for the new update list, the key combo list need to remain unchange until the end of frame
God that sounds like hell
NOOP
I am on the phone but sounds about right
You could also just use streams to filter the original arraylist
People forget those exist. I was one of them until I started using kotlin xD
dont worry, i do use stream here and there
? they are bindings for a C API, making them non-static is counterproductive here
why wouldn't it be static?
Can you send a screenshot of the exact warning?
I think this warning is actually valid
because with your current code, I think it skips over a value every time that remove gets called
smart intellij
jetbrains recommends using removeIf() instead
it should probably put that in the warning message tho
yeah... but im not remove on the same list that is being iterated ?
oh 💀
yeah I can't read
your message or your code
wait
nvm
ig just gotta suppress it
Looking for plug-in developer
hello
how'd you find HelpChat?
once you talk a bit more, you will be able to access channels where you can request plugin developers
Did not know it was a C API
Ah, maybe the description of the intention tells you what’s up
why not build the list as you iterate through and skip elements you don't want rather than copy the entire list and remove just one thing each time?
that is what the logic is currently
intention ? you mean the remove's doc ?
i... don't think it is? you are making a new arraylist from the iterated one as a source, and then removing the current index
oh you mean that, the list is being use to render the list, and the data is sync at the start of next frame so i intend to keep the rendering list intact
Alt+Enter and then there should be something like Edit Intention somewhere
I Accesses it from the official paper MC server which led me to server that's called sisycraft and then I was led here
that you were
this isn't a recruiting server, but if you have a specific plugin request you want to make you can head to #1434110121558020117 / #1434110119737692234
I like how you say this isn't a recruitment server then just lead me to which techniquely is a requirement channel but alr
a requirement channel?
Just a typo
those aren't recruitment channels either
it's against the rules lmao
those are channels for requesting projects, like i said
if you have a specific plugin request you want to make
Oh I guess that's what I'm looking for
[18:58:23 WARN]: Caused by: java.lang.NullPointerException: Cannot invoke "String.toCharArray()" because "text" is null
[18:58:23 WARN]: at PlaceholderAPI-2.11.7.jar//me.clip.placeholderapi.replacer.CharsReplacer.apply(CharsReplacer.java:45)
[18:58:23 WARN]: at PlaceholderAPI-2.11.7.jar//me.clip.placeholderapi.PlaceholderAPI.setPlaceholders(PlaceholderAPI.java:71)
[18:58:23 WARN]: at PlaceholderAPI-2.11.7.jar//me.clip.placeholderapi.PlaceholderAPI.setPlaceholders(PlaceholderAPI.java:99)
[18:58:23 WARN]: at ValorSky-Crates-0.0.1-SNAPSHOT.jar//fr.valorsky.crates.utils.messages.MessagesUtils.sendMessage(MessagesUtils.java:20)
[18:58:23 WARN]: at ValorSky-Crates-0.0.1-SNAPSHOT.jar//fr.valorsky.crates.crate.CrateManager.setCrate(CrateManager.java:29)
[18:58:23 WARN]: at ValorSky-Crates-0.0.1-SNAPSHOT.jar//fr.valorsky.crates.commands.CrateSetCommand.onCommand(CrateSetCommand.java:19)
[18:58:23 WARN]: at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
[18:58:23 WARN]: ... 23 more
String parsedMessage = type.imageName + PlaceholderAPI.setPlaceholders(player, rawMessage);
someone one know ?
it says what the issue is, rawMessage is null
you cannot pass null as a string here
my bad u_u
no problem
#general-plugins message
step 1 - stop making your entire server via DeluxeMenus
@marble heart tell em
Might wanna ask in #general-plugins, this channel is for coding
what type of coding?
Any honestly
i dont understand, to be honest, im tryna add papi dependence and it just keeps saying it doesnt exist and then, i put the url on my browser and it said not found. (Maven)
<repositories>
<repository>
<id>placeholderapi</id>
<url>https://repo.extendedclip.com/releases/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>me.clip</groupId>
<artifactId>placeholderapi</artifactId>
<version>2.11.7</version>
<scope>provided</scope>
</dependency>
</dependencies>```
am i missing something
Use repo.helpch.at instead @limpid hinge
thanks
i'm trying to build jextract but i got this error when trying to build it:
* What went wrong:
Execution failed for task ':compileJava'.
> Error while evaluating property 'javaCompiler' of task ':compileJava'.
> Failed to calculate the value of task ':compileJava' property 'javaCompiler'.
> The configured executable does not exist (D:\Code\Java\Lib\jdk-21\bin\javac)
I checked my JDK and the javac.exe is actually there
||(For some reason, they only say the gradlew.bat file was enough on windows, but in the build file, the fix is to add .exe to the javac)||
Hi
Hi
is it possible to prevent natural dragon egg spawning after first dragon defeat?
idk, probably
I couldn't find how to implement it can you help me if possible
https://www.spigotmc.org/threads/how-to-stop-the-dragon-egg-from-generating.533303/ check out one of the last comments on this thread
Thanks.
just crossposting this here if you saw the thing in # minecraft dont mind this
If there's anyone here who is familiar with Forge modding (the actual development process) please shoot me a dm, I want to do a silly but complex thing that might not even work and I'd rather prevent wasting tens of hours 
I tried the code and logic from this forum thread, but I couldn’t get it to work properly. It has many edge-case scenarios.
if you dont want players getting the dragon egg, could always void it if they try to pick it up rather then having to deal with those edge cases
tho if ur on paper you can also use DragonEggFormEvent
this is the code for creating the dragon egg
seems like podium always spawns at x=0 z=0 and the y value is defined by the heightmap whatever thats gunna mean
idk if the Y position is exposed by the spigot api and if the dragon egg always spawns in the same position other then the Y value. if it does spawn at the same x and z position you could always loop over the 320/256 possible y positions, look for the egg and then replace it with air
ok thanks i will look into this
You can also use mixins to override this method to disable the spawning or make a paper fork to remove it 
Thanks this works 😃.
@proud pebble @river solstice well well well
https://www.minecraft.net/en-us/article/minecraft-new-version-numbering-system
CornerHard's Twitch VOD (at 55 min): https://www.twitch.tv/videos/2612345784
Plushies: https://www.makeship.com/shop/creator/phoenix-sc
Merch: https://phoenixsc.store/
Cape: https://store.badlion.net/shop/PhoenixSC
---------------------------------------------------...
lol
real tho
i completely forgot i said that lol
atleast minecraft 2 isnt in our future lol
the only possibility of getting minecraft 2 relies on jesus returning, and therefore the year system resetting to BC2 (before christ 2) and AD2
or... we just wait until 2102
hm, might be 102.whatever then, maybe in the year 3002
Minecraft 2 already exists. Was released in 2013
that would clearly be version 1002 
hi! Is there a new way to remove/put "textures" on GameProfile? tried .remove/removeAll as it used to be, but nothing. Long time not using nms
EntityPlayer ep = ((CraftPlayer) p).getHandle();
GameProfile gp = ep.getBukkitEntity().getProfile();
PropertyMap pm = gp.properties();
Property property = pm.get("textures").iterator().next();
pm.removeAll("textures");
String textureVal = "ewogI...";
String textureSignature = "TsE43...";
pm.put("textures", new Property("textures", textureVal, textureSignature));
what version is this
Latest, sorry! 1.21.10
Yeah. Need to read abt PlayerProfile
gameProfile.getProperties().removeAll("textures");
gameProfile.getProperties().put("textures", new Property("textures", "value", "signature"));
this works for me on paper with https://docs.papermc.io/paper/dev/userdev/
Nup. That's what Im actually doing right now! Think it's an ImmutableMap and since that, it can't change. Although, Im reading the class you've sent, it may solve my problem. Do you know if it changes the skin for all players or only for itself?
i just need to add this to suppress the warning ?
I mean I don't really know how to help you with this since you are on spigot
the api doesnt match
/**
* Changes the PlayerProfile for this player. This will cause this player
* to be re-registered to all clients that can currently see this player.
* <p>
* After executing this method, the player {@link java.util.UUID} won't
* be swapped, only their name and profile properties.
*
* @param profile The new profile to use
*/
void setPlayerProfile(com.destroystokyo.paper.profile.PlayerProfile profile);
that's the idea behind the flags, yes
i dont believe you can replace the textures on an actual player only human entities
can anyone code me a plugin?
ill pay
im look for someone who codes high quality plugins
ur dc invite link is expired, also 30 eur/h
Damn 30/h is a dream scenario in the Minecraft scene
Usually the default is around 20ish /h
Depends on the server
But usually 30-40/h is normal
Do you have an experience in the market?
Cause I have, and those are far from "normal", they should be the norm yes, but it isn't.
In the mc community, you are lucky if you get paid 10-15/h
which is why I nowadays rarely do commissions
since I always charge a minimum of 20-25/h
don't really see a full support channel, but my friend is a developer and wants peoples opinions here, he was banned a couple years back for compromised account. was wondering if a staff member could take a look into it for me, user: Spyproof
this is def. not the place for that ...
@celest tendon or @leaden plume maybe can help though, I'd go to #off-topic though
I do
30-40 is normal for premium servers
anything below is for cracked servers
"premium servers' is kinda crazy
well, then you are part of the lucky ones, cause anyone here can easily tell you that's not the norm
why xD
there are premium only servers and cracked servers]
I have not worked for a single cracked server and still nothing similar to those prices beside one or the other
You must have been very unlucky then
as said, pretty sure it was you that was lucky, because of the tens if not hundreds of devs I have spoke to, those prices are rare in this scene.
"premium" you mean normal? Like EULA compliant servers? lol
No i mean servers that only accept premium users, like hypixel
I mean one of my friends does 50/h and people still go through
Wdym by premium users?
people who actually bought minecraft
and dont use cracked launchers
to play the game
Those are normal users lol
once u work with cracked servers u'll end up calling premium and cracked
or premium and offline
Normal and offline :')
Meh names change from place to place
Atleast its good we can understand eachother
Premium tends to mean something more than normal, if you are just the base userbase you can hardly call them premium
just because you have an example of yourself and a friend, that does not make it true for everyone, nor does it make it the norm nor does it make it not lucky.
Yes, get them to DM me on spigot with the username or user id
He was unbanned, I think it was his alt or something
it is definitely not "normal" as in common
very very few devs are making that much
all people that have worked w Cracked servers are calling those Premium. Cracked servers are cracked and online servers are Premium
authentication plugins are also calling it premium
I do charge 35€/hour 
that's what I charge
Has anyone had the issue where class files doesn't load the correct logo anymore?
class files or java files?
java files mb
They used to have a different symbol
At least when they are in the src directory
yeah they have to be in a directory that is marked as source root
I'll try, it's happening in all projects though, very weird
IntelliJ got an update, I'll try that
Hey, I have a Placeholders plugin and I'd like to add it to eCloud, but apparently the website has closed registrations. How can I register?
Link us to the github repo
how?
Does it depend on another plugin to work?
only placeholderapi
So the ecloud is for expansions not plugins, if it's already built in you don't need to do anything else
That's my question. I wanted to know the requirements to go to eCloud. It's a plugin that only handles the placeholder, and doesn't have any other functions besides that.
could I create a version with just the placeholders for eCloud?
You don't need to, you've already built the expansion into the plugin
I think he made the plugin with only the placeholders in mind, he is asking if he can convert it to an expansion
seems like it's retrieving stats via http requests and show tags etc
^ ^
I understand portuguese but way too tired to read it all lol
é isso msm
pog, seems like I nailed it then
(only english here)
cool project though, central database for pvp related statistics that is shared across servers of south america
could probably be abused but cool still
It's unlikely we'd verify an expansion that makes outside network calls
Yup
how can i load custom meta data using the new string based system
im not sure how
using java/kotlin
New string based system?
do you mean namespaced keys maybe
🦗
i need help
There is no time to wait! Ask your question @gritty meteor!
pleasee
Im so confused
2 expensions that i coded work
but 1 doesnt at all
i dont get why
it does seem to register it if it do /papi list
nobody can help you if you don't post your code
Hello !
I am a beginner minecraft server Developer / Manager and would love to start my own minecraft server, I ran some tests and made a few plugins but I couldn't shake off the feeling that what I am doing right now is wrong and incorrect.
I am looking for someone capable enough to help me clear my mind and answer my questions, thank you in advance.
Hi, does anyone have any idea how I could put two texts inside the inventory of my plugin, which would be the player's name and the player's rank? I think I would be using a custom font in the title, but the trick is to create a logic so that I can center the name and the rank.
everything you do at the start will be wrong and incorrect
and that's okay
you can't center the title with something like an "alignment" field or anything since that doesn't exist. you can get a decent approximation though by looking at how large the chest title space is, as in how many characters you can fit in there, and then using that to center the player names. unfortunately finding true text width is more complicated and requires you to find the font you're using and create a lookup table of the character widths. alternatively you can shade lwjgl and copy Minecraft's code to calculate the width yourself
Summary, complicated
if you can't understand what I said then you won't be able to do it
that is the summary
I understand, but I see it as somewhat complicated.
that makes a lot of assumptions about the client's setup that you just cannot really do
god forbid you change your chat width, use a resource pack, or do literally anything outside of default settings
I was considering the general font case since that's the problem I had to solve, but yeah if your case is simple you can use this
If you know the character width of your font, it's really easy to center in the title, chat however it's pretty much impossible
is there anyone who is looking for a high skilled and reliable engineer?
bro thinks we chatgpt 😭 💀 🤣
🧐
java.lang.ClassCastException: Cannot cast liltrip.prison.Prison to codes.kooper.blockify.Blockify
at java.base/java.lang.Class.cast(Class.java:4069) ~[?:?]
at org.bukkit.plugin.java.JavaPlugin.getPlugin(JavaPlugin.java:513) ~[paper-api-1.21.10-R0.1-SNAPSHOT.jar:?]
at prison.jar/codes.kooper.blockify.Blockify.getInstance(Blockify.java:51) ~[prison.jar:?]
at prison.jar/liltrip.prison.api.MineFactory.loadMine(MineFactory.java:37) ~[prison.jar:?]
at prison.jar/liltrip.prison.data.PlayerJoin.lambda$onJoin$0(PlayerJoin.java:47) ~[prison.jar:?]
at org.bukkit.craftbukkit.scheduler.CraftTask.run(CraftTask.java:78) ~[paper-1.21.10.jar:1.21.10-117-df4b668]
at org.bukkit.craftbukkit.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:57) ~[paper-1.21.10.jar:1.21.10-117-df4b668]
at com.destroystokyo.paper.ServerSchedulerReportingWrapper.run(ServerSchedulerReportingWrapper.java:22) ~[paper-1.21.10.jar:?]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) ~[?:?]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) ~[?:?]
at java.base/java.lang.Thread.run(Thread.java:1583) ~[?:?]
what to do about this error
ive been stuck
Don’t cast randomly?
this error is about as understandable as an error gets
before you guys immediately bash on that guy for casting
doesn't that error mean that JavaPlugin.getPlugin is getting the casting wrong
do both Prison and Blockify extends JavaPlugin?
my guess is that you're doing JavaPlugin.getPlugin(Blockify.class), but the plugin's actual main class is Prison
otherwise idk how that error would happen, and we'd need more info
i fixed that
but now i got
java.lang.NoClassDefFoundError: codes/kooper/blockify/models/Audience
at prison.jar/liltrip.prison.api.MineFactory.loadMine(MineFactory.java:36) ~[prison.jar:?]
at prison.jar/liltrip.prison.data.PlayerJoin.lambda$onJoin$0(PlayerJoin.java:47) ~[prison.jar:?]
at org.bukkit.craftbukkit.scheduler.CraftTask.run(CraftTask.java:78) ~[paper-1.21.10.jar:1.21.10-117-df4b668]
at org.bukkit.craftbukkit.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:57) ~[paper-1.21.10.jar:1.21.10-117-df4b668]
at com.destroystokyo.paper.ServerSchedulerReportingWrapper.run(ServerSchedulerReportingWrapper.java:22) ~[paper-1.21.10.jar:?]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) ~[?:?]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) ~[?:?]
at java.base/java.lang.Thread.run(Thread.java:1583) ~[?:?]
Caused by: java.lang.ClassNotFoundException: codes.kooper.blockify.models.Audience
at io.papermc.paper.plugin.entrypoint.classloader.PaperPluginClassLoader.loadClass(PaperPluginClassLoader.java:146) ~[paper-1.21.10.jar:1.21.10-117-df4b668]
at io.papermc.paper.plugin.entrypoint.classloader.PaperPluginClassLoader.loadClass(PaperPluginClassLoader.java:107) ~[paper-1.21.10.jar:1.21.10-117-df4b668]
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526) ~[?:?]
... 8 more```
blockify is one of my dependencies
erics friend
i believe blockify has documentation for how to add a dependency
pretty sure he shaded the plugin as a dependency
he comes from skript and minehut dw
nah kooper said dont shade
i never skripted but i havent done coding in 2 yrs
I need help on setting textures to my own created npc i don't get it (papermc 1.21.10)
https://pastes.dev/zMRe4iOyI2
add the plugin to depends in ur plugin yaml
@pastel badger dont spam the chat with your code, use paste.helpch.at to share code/configs/logs etc.
oh sorry its just i dont really know what i am doing this is the first time i have made a plugin and also the first time i have used discord
where do I do that at is it a separate website?
@dense drift so I put it there now what and clicked save now what
Save then copy the link and send it here
I don't know if there were some deleted messages or something, but what's the issue/error/question?
will this code work? if it will work could someone please compile it into a working .jar for me my computer just will not compile it no matter what I do. https://paste.helpch.at/olufaxexix.kotlin Thank you to anyone willing to help me
Why is everything in the main class😭
talk about single responsibility principle
this class has ALL the responsibilities
if you can't figure out how to compile your code then you're not going to become a programmer
you should instead post information about how you're attempting to compile it and what issues you're getting
Yeah it all being in a single class is a bit eh, naming for some stuff is also eh like PluginBan, but either way, as said, to become a programmer, first thing you gotta accomplish is compile.
👋
hello likely spammer
that's kinda racist
he's the owner of MWCS
don't you know
hell yeah
hello, could you help me, I’ve been suffering with my plugin for 3 days now, I need papi on version 2.11.7, I added it to the pom.xml of my plugin, but it constantly pulls up bStats 1.7, what should I do? I’m just going crazy and I can’t solve this problem in any way, he stupidly doesn’t want to compile
*здравствуйте, не могли бы вы мне помочь я уже 3 день страдаю со своим плагином, мне нужен papi на версии 2.11.7 я его добавил в pom.xml своего плагина но он посстоянно подтягивает bStats 1.7 что делать? просто я вообще уже с ума схожу не могу никак решить эту проблему он тупо не хочет компелироваться *
can you send the error message?
Exclude bstats from papi
I was searching for this channel for like 5 minutes 😭
https://pastes.dev/aEjUbo7zEs
If I wanted to dynamically update the the time thing here through a placholder, how would I do that?
wdym?
like how to put that in a PAPI placeholder? I'm not too sure what you're asking
I was able to put this into papi just fine
But the returned value isn't dynamic, it's static
have you confirmed that with the /papi parse command?
I mean it seems like it should work fine
maybe put some print statements throughout the code to see if everything is running properly
might just be missing something obvious
also note that you should probably be making task a BukkitTask (what runTaskTimer() returns)
Yeah!
I waited for minutes and it was still showing 60:00
ok
@dense drift Hey! Sorry for the ping but I'm not sure what is the proper way to reach out to you. I've created this PR a year ago and is wondering if you (or other maintainers) could take a look?
I can't post links so it is PR #65 in the Server-Expansion repo.
https://github.com/PlaceholderAPI/Server-Expansion/pull/65
You can post links just not masked links
ah cool here is it
https://github.com/PlaceholderAPI/Server-Expansion/pull/65
Merry Christmas! Thank @dense drift for merging my PR! Just checking will there be a release for the updated server expansion soon?
Hey anyone interested in coding a plugin w me?
i mean i am gonna code too
should I call the ConfigurationSerialization#registerClass(Class) in onEnable before I start loading the config ?
Yes
Ah thank you! Do you also know if I can use nested keys for get serializable?:
FileConfiguration config = plugin.getConfig();
CurrencyLimit currencyLimit = config.getSerializable(CurrencyLimit.currencyLimitKey, CurrencyLimit.class, CurrencyLimit.getDefault());
I define the serialization and deserialization methods as:
@Override
public @NonNull Map<String, Object> serialize() {
Map<String, Object> data = new HashMap<>();
data.put(minTradeKey, minTrade);
data.put(MinKey.enableKey, min.enable);
data.put(MinKey.valueKey, min.value);
data.put(MaxKey.enableKey, max.enable);
data.put(MaxKey.valueKey, max.value);
return data;
}
public static CurrencyLimit deserialize(Map<String, Object> args) {
double minTrade = (double) args.get(minTradeKey);
boolean enableMin = (boolean) args.get(MinKey.enableKey);
double minValue = (double) args.get(MinKey.valueKey);
boolean enableMax = (boolean) args.get(MaxKey.enableKey);
double maxValue = (double) args.get(MaxKey.valueKey);
return new CurrencyLimit(minTrade, enableMin, minValue, enableMax, maxValue);
}
where the key are the full path, some of them look like this:
"currency-limit.min-trade"
"currency-limit.min.enable"
"currency-limit.min.value"
ah ok
was worrying that it cannot serialize because i format the config like this:
currency-limit:
min-trade: 0.1
min:
enable: true
value: 0.0
max:
enable: true
value: 1000000000.0
I would personally just make it as optional min & max
instead of setting the enabled true/false
so when it is in the config, then it is enabled
and if it is not in the config, then it is disabled

that's the intended format
but as far as i know, a.b: x is treated totally identically to a: b: x
oh you can make the config optional? will add that to the refactor list
i heard that for nested key, use nested map for serialization, but on deserialization, i can use direct path instead of having to type cast argument where the data is nested ?
I’m not sure what you mean
i'm trying to understand if the Map that is passed into deserializer is a flat map where string is the full key path and the object is the value itself or it is a nested map, where the string is the relative key (for example min-trade instead of currency-limit.min-trade) and the object at those nested entry is a map that i need to type cast
nvm, just not gonna use bukki serialization api
based
it loaded 😭
do minecraft servers/paper server software have any memory leaks? i notice my server's memory progressively gets higher and then drops back down to about a gigabyte of ram usage, making me think it has a memory leak somewhere. i ran /paper heap and brought the file into eclipse memory analyzer just to see and i find a couple leak suspects, but im not quite sure what im actually looking at lol
sorry if this isnt the right channel to ask, im not sure what this would be classified as lol
If it drops back down, there isn’t a leak