#help-development
1 messages · Page 1232 of 1
sure
Looks to be solved CARROT is called CARROT_ITEM in 1.8 forgot those poor names where a thing
.
lol
someone know how to get 1.20 remapped-mojang.jar? i used BuildTools with commands but doesnt work
yes but there always is the spigot-1.20.1 or something
"spigot-1.20.1.jar" and some directories is what i get
plain 1.20 got superceeded by 1.20.1
Yeah that's correct
but i need the remapped-mojang because nms imports are missing for example: import net.minecraft.network.protocol.game.ClientboundPlayerInfoPacket;
import net.minecraft.server.level.ServerPlayer;
import org.bukkit.craftbukkit.v1_21_R1.entity.CraftPlayer;
i use maven
?nms
automatically in m2 directory right?
yeah
:3
if i wanted to make a socket for data transfer, how would i handle broadcasting to all connected sockets to my serversocket? (in java ofc) i make a kind-of packet system to request data from other server to sync the plugins (its a party plugin)
package it.alessandrocalista.parties.network;
import java.util.UUID;
public interface Packet {
record CreatePacket(UUID owner) implements Packet {
}
record QueryMembersPacket(UUID partyUUID) implements Packet {
}
record MemberJoinPacket(
UUID partyUUID,
UUID member
) implements Packet {
}
record MemberLeavePacket(
UUID partyUUID,
UUID member
) implements Packet {
}
record DisbandPacket(UUID partyUUID) implements Packet {
}
}
?paste
oops
use newCachedThreadPool
Sending packets is as simple as:
public void sendPacket(Packet packet) {
try {
out.writeObject(packet);
out.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
I am writing a plugin that allows whitelisted ip addresses to join via offline mode, otherwise online mode is required. I am using Protocol Lib but I don't know if thats all I need. Here is my player join code. Does anyone have any suggestion because this project is out of my comfort zone lol.
ProtocolLibrary.getProtocolManager().addPacketListener(new PacketAdapter(plugin, ListenerPriority.NORMAL, PacketType.Login.Client.START) {
@Override
public void onPacketReceiving(PacketEvent event) {
if(event.getPacketType() != PacketType.Login.Client.START) return;
PacketContainer packet = event.getPacket();
try {
if(event.getPlayer().getUniqueId().toString().split("-")[2].startsWith("4")) {
// Microsoft account
return;
}
} catch (Exception e) {
String hostname = event.getPlayer().getAddress().getAddress().getHostAddress();
if(OfflineWhitelist.whitelist.contains(hostname)) {
PacketContainer connectPacket = new PacketContainer(PacketType.Login.Server.SUCCESS);
connectPacket.getGameProfiles().write(0, new WrappedGameProfile(UUID.randomUUID(), event.getPlayer().getName()));
You’re planning on letting anyone, given that they are on a whitelisted IP, connect using any username? Or are you going to add a PW Authenticator after?
This is a private server
The purpose is to allow our custom bot accounts to join so we don't have to buy a bunch of alts
So to answer your question, any username, no PW
or at least that isn't a current concern
do you even need protocollib for this
I've never handled IPs but surely you can just use spigot's join event and player#getAddress for this
Btw you could check if a player is offlineplayer if their UUID is made from the bytes of the string "OfflinePlayer:" + player.getName(), if that matches i believe its their offline UUID
else its their online UUID
then i guess just check the ip
I woudln't even check the ip
I'd just force those accounts to write a shared password if it's a private server
assuming the people playing together aren't idiots there's no real chance of it becoming a problem
if it starts with botsecure just let it in
or yeah let them in and just listen for the chatevent before they can do anything
so they send a "password"
a shared password would still be better imo
I think they are trying to check for Microsoft Authentication and are using pakcets?
by the time the players are able to send passwords via chat or do anything like this your server is already compromised unless you are also filtering everything else with e.g. authme
from what i understood this is an online mode server meaning it won't have authme
and so any offline mode accounts allowed to do anything at all definitely need to be vetted before they can chat/command
compromised seems like a strong word for what is a bunch of friends playing in a shared private server
might as well turn online mode off altogether at that point
which is basically what they're are doing for their friends, yeah
for bots
yep
are their friends bots?
I mean yeah based on what they said
The purpose is to allow our custom bot accounts to join so we don't have to buy a bunch of alts
I assume the alts are for the friends
that's not what my first interpretation would be but i could see that too
Probably not. My problem is getting the server to allow them to spawn in
I think you're overcomplicating things for what it sounds like you're building
I'd just do what I recommended, have a shared password if you log in with a non-legit account and basically just hold the bot in place / kick it if it fails to do the secret handshake
Yeah I get that. My problem is getting the server to allow the bot/offline accounts to spawn in. I'll worry about auth once I get this done. Id like to keep online-mode set to true
So setting aside security, I want to allow offline accounts to join an online server
i don't know if spigot/paper lets you turn off auth in the login/prelogin event (you best check there) but if it doesn't, i know velocity does
The prelogin event is fired after the server tries authenticating with the user. So that event is never fired when an offline account tries to join
if it's a private server for just a group of friends I don't think there's much harm in making it offline mode, but hey I won't criticize someone for trying to make things more secure either
correct
name changes won't be supported
and some skin rendering issues
you can patch most of this with extra plugins but it'll be a good bit of work
We have already started playing so uuid change would affect inventories
yeah
with the correct setup this should preserve uuids, support name changes, and not require /login for premium players
pretty sure that's how the russians I keep doing support for do it
the other option that i see is to start a velocity proxy and write a quick velocity plugin that turns off mojang auth in their connect event
Im also using Geyser with Floodgate. Would these plugins affect that?
although i'm not sure if velocity even works with spigot
geyser standalone or bukkit?
Its a paper server but my plugin is spigot
bukkit/paper server
i have no experience with geyser bukkit, but i have a vague feeling that it might work
you best check with the geyser/fastlogin guys if you run into issues, but i don't foresee trying it causing any permanent damage
if it doesn't work, uninstall the plugins and things and start looking into other options
all that said i'm almost certain that running a velocity proxy with modern ip forwarding and a lightweight auth on-off plugin on the velocity server would be easier
there is an easier solution to your problem
one that requires no plugins at all 🙂
use a proxy. Proxy is online mode and that is what everyone uses, the server has to be offline mode to connect to said proxy. Allow your bots to connect directly to the server. Use firewall rules for the ip address whitelisting to allow them to connect to the server directly
voila, players are online mode, bots are offline mode and all should be able to connect 😉
When a server is ran in offline mode, do you then add ip addresses to the whitelist?
not sure how this works apart from modern ip forwarding, but my understanding is that any setup that allows connections from sources other than the proxy will not work with ip/uuid forwarding, which would again break player inventories
i.e. if you do do uuid forwarding it'll reject connection attempts not made from the proxy, no?
and without uuid forwarding your player data is busted
the way bungeecord works, servers have to be in offline mode because the proxy handles the authentication. However you are able to connect to the MC server directly without going through the proxy, but server is offline mode hence why it is recommended to use firewall to protect your mc servers from being directly connected to
the issue with this by default is that the backend server will see an offline mode player and assign an offline mode uuid
likewise, it will see the proxy's ip rather than the player's own
to cope with this there are methods for ip/uuid forwarding, where the proxy communicates those properties to the backend
idk what your talking about. Yes the bots would have an offline UUID but why is that an issue?
we are not talking players here
the server is in offline mode, yes?
they have to be to connect to the proxy
since the server is in offline mode, it will assign offline mode uuids to ALL joining players
not sure if you ever setup bungeecord with mc servers before?
including those coming from the proxy
incorrect
only if you use ip/uuid forwarding
if you don't use it, you will get offline mode uuids
no
no?
proxy handles the authentication and passes it to the servers
that's the "forwarding" part
no
that is only if you want the players ip to be shown on the server or the proxies
other then that it has nothing to do with authentication
i'm fairly sure either both or neither ip and uuid are forwarded, not one or the other, but since i haven't used bungee since like 1.8 or something i'll defer to your judgement
if players were instead to connect directly to the mc server without going through the proxy, then yes they would have an offline UUID
but this is why I said use firewall rules to whitelist the ip's you want to allow to do that so that not everyone can do that
so all players go through proxy for authentication, the bots directly connect to the mc server 🙂
is this outdated?
Without enabling IP forwarding, the proxy IP will be displayed for all players, possibly causing problems when it comes to IP bans and the UUIDs of your players will be in offline mode which will result in issues when a player changes his name.
this is how i remember it working, too
but this was last updated in 2018 so god knows 🤡
sure enable it if you want, however it has nothing to do with directly connecting to an MC server
nor prevents it
if you connect to it directly you for sure get an offline mode uuid
what i'm talking about is you connecting through the proxy
ok, but that isn't the issue here
the issue here is how to allow bots to connect without authenticating
without reverting regular players to offline mode uuids
and it won't if you enable the thing you said
but it still doesn't prevent directly connecting to the mc server
which bypasses authenticating
then that's fine
in otherwords what I have been saying solves their issue with the whole authenticating part for their bots without compromising their network and it being all in offline mode for the players too
so the players are still authenticated, and now they have a way to allow bots to join without dealing with the authentication since they are not players
@pseudo crypt you can if you want run a plugin for whitelisting on top of firewall rules if you want a bit more security
yeah i was just pointing this out because on paper+velocity enabling forwarding requires clients to connect with the velocity secret
but bungeecord seems to work differently
Cool. Im looking into it rn
sure, just saying what i know
secret of velocity would make for a great name of a sonic movie
I have velocity configured but logging in with an offline account gives me the message This server requires you to connect with Velocity.
they stated that what I described wouldn't work with velocity
oh rip
you would need to use bungeecord. keep in mind this discord is for help with spigot+bungeecord
Fair
Im getting an issue where the whitelist is blocking players now. Using Bungeecord. I assume this is because the UUID isn't the same now?
idk how you have the whitelisting setup
personally I wouldn't even use a plugin
I would just use the firewall to control who can or can't connect to the mc server directly
Even if you dont want to go to this extent, there are proxy/vpn-blocking plugins which can whitelist IPs.
indeed, but that isn't what they want per-say
their goal is to allow their bots to connect to the MC server without the need of authenticating but still making it to where the players have to authenticate
is this a server to ask random plugin questions at?
this channel is specifically more towards coding/development stuff. #help-server is the channel for help relating to server and sometimes plugins
alright ty
hi again everyone c:
im trying to use a custom item in a recipe, and i havent rly figured out how to and im not sure if im misunderstanding how nbt tags work or something is fundamentally wrong
/* Enchanted Cobblestone */
thisItem = new ItemStack(Material.COBBLESTONE, 1, (short)255); // Assigned data value 255 for later reference
thisMeta = thisItem.getItemMeta();
thisMeta.setDisplayName("§6Enchanted Cobblestone");
thisLore = new ArrayList<String>();
thisLore.add("Dissolves into 8 Cobblestone when put in a Crafting Table");
thisMeta.setLore(thisLore);
thisMeta.addEnchant(Enchantment.LUCK, 1, false);
thisMeta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
thisItem.setItemMeta(thisMeta);
thisRecipe = new ShapelessRecipe(thisItem);
thisRecipe.addIngredient(8, Material.COBBLESTONE);
shapelessRecipes.add(thisRecipe);
thisRecipe = new ShapelessRecipe(new ItemStack(Material.COBBLESTONE, 8));
thisRecipe.addIngredient(1, Material.COBBLESTONE, 255); // Use unique data value
shapelessRecipes.add(thisRecipe);
i assign a tag with 255 to differentiate it from regular cobblestone
but when i use regular cobblestone it still acts the same lol
im using the 1.8.8 spigot api, so i dont have access to NamespacedKey
which is why im trying to do this
anyway, i thought adding a specifier to the recipe would make it look for the 255 when validating the recipe but i guess not
am i doing this wrong or is there some other approach i can go for?
isn't #addIngredient(int, Material, int) deprecated?
not sure if 3rd param is even referring to what you think it is
either way you'd have to manually listen to the craft event to do what you want to do
because you can't require custom nbt in crafting recipe ingredients
BungeeCoord isn't working for me. Is there a way I can listen for player authentication so I can add my own logic? The server is set to online-mode, but I want offline players to be able to join from a custom whitelist.
hm youre right
since this a private server of yours, you could just modify the server code instead
im not sure
could u explain what this is :3
does this allow me to manually check the values in the crafting table and then do a deep comparison of the meta of the item?
yes
i feel like thats what id have to do
you can view the crafting matrix and determine if it matches your recipe or not
I have no idea how to do that so probably wont be able to pull that off
how is it different from making a plugin?
i think this might be a wrong channel moment
It isn't, this conversation goes back before you requested some help
oh okay :3
Hey guys is NBT data stored in the itemstack's itemmeta
I just recently did a test and it's confirming yes, I don't know if this is common knowledge or not
the alternative is velocity, with a lightweight plugin selectively turning off auth for players
is this what youre referring to?
yes
listen to PreLoginEvent and call setResult with PreLoginEvent.PreLoginComponentResult.forceOfflineMode()
so i can do #.getRecipe() and that returns the items used in the crafting table?
or no
probably getInventory
Anyone know if this is normal?
i guess the crafting grid is an "inventory"
im pretty sure it does
okay thank you
but i was doing nbt and meta at the same time so it might not be mutually exclusive
Hey, can someone help me? I've uploaded my first plugin and don't know how to update or upgrade it or do I need to be activated first?
Make sure you have 2fa on and the update button is where others download iirc
how do i "listen for an event"?
So velocity gives me the option to do that? I guess there is no straight forward way to do that in bukkit/spigot. Do you think we could take this convo to DMs since this is a spigot/bungee server?
can i just define a function named the same as the event as like a callback? or do i need to do something more
Thx
wait that's bungeecord
gimme a sec
this one should be spigot
@pseudo crypt velocity has api for it; then set velocity to use modern ip+uuid forwarding and all online-mode features should work out of the box
How do I check if a user is online authenticated
they are by default
whatever logic you use to allow someone to log on without mojang auth is up to you
it could be a list of names in a txt file
fair
or to require it to start with bot_
or you could listen to failed auth attempts and add those players to a list, allowing them to log without auth on retry
depends on your use case
which i still am not exactly clear on
when you say bot i imagine something that's used by something programmatic, like a plugin or a mod
gotcha
authenticated player UUIDs have a 4 at the start of the third 'chunk' unlike offline so I think I can go by that
depends a bit
iirc tlauncher specifically sends type 4 uuids even for offline mode players
has something to do with their custom skin system
dang nvm lol.
if you want to make sure, query the mojang api with the uuid and see if the name associated with it, if any, matches the player's
you could also base it off the address the player is connecting with, since the client reports that
you could for example register a domain and have premium.myserver.net use online mode auth and cracked.myserver.net go past auth
but if it's just a private server with friends, you can probably just manage a list of allowed names manually
or tell them not to use tlauncher specifically
@thorn isle You've been a great help. Thank you
I need this list checked, been searching on the internet and using ChatGPT. The list I finding is not up to date:``` public boolean isHostile(EntityType type) {
List<EntityType> hostiles = Arrays.asList(
EntityType.BLAZE, EntityType.CREEPER, EntityType.DROWNED, EntityType.ELDER_GUARDIAN, EntityType.ENDER_DRAGON,
EntityType.ENDERMITE, EntityType.EVOKER, EntityType.GHAST, EntityType.GUARDIAN, EntityType.HOGLIN, EntityType.HUSK,
EntityType.MAGMA_CUBE, EntityType.PHANTOM, EntityType.PIGLIN_BRUTE, EntityType.PILLAGER, EntityType.RAVAGER,
EntityType.SHULKER, EntityType.SILVERFISH, EntityType.SKELETON, EntityType.SLIME, EntityType.STRAY, EntityType.VEX,
EntityType.VINDICATOR, EntityType.WARDEN, EntityType.WITCH, EntityType.WITHER, EntityType.WITHER_SKELETON,
EntityType.ZOGLIN, EntityType.ZOMBIE, EntityType.ZOMBIE_VILLAGER, EntityType.ZOMBIFIED_PIGLIN
);
return hostiles.contains(type);
}```
You won't help me if its not static?
never said that
i guess the only ones missing are bogged, breeze and creaking
Wiki has the answer
(please make that list static)
ZOMBIFIED_PIGLIN does not belong there, that mob is neutral.
This is what I talking about. There are mobs that does not belong in the hostile and some are missing from the hostile like Spiders is hostile
Spiders are hostile only during night and neutral during day.
You thought it was gonna be that easy ? :D
Yes, I always known spiders as hostiles
Also, piglins are neutral if you wear gold. Don't despawn on peaceful but also don't attack you.
You may have to take these things into account depending on what you're doing..
yea ^
brutes can see through your golden facade and even rile up other piglins
This is why I need the list but I have given up. Next task, how can I turn all these to player heads that shows the mobs faces?
Idk why I wrote brutes lol, meant normal piglins.
lol
but yeah your heads question is harder to answer
youll need to find the skin ids of the mob skins
presumably there is a usable set of heads online
I tried to get their IDs but the websites they located won't load
Like someone is running DDOS on it, any other places that has these UUIDs?
a website being down does not mean it is being DDoS'ed
Its impossible to get these mob player heads?
I still searching and finding nothing
I found a russia site but that does not work
So I tried this, it seems to think that the item in that slot doesn't exist though. as the string returned us "air" I believe the item created by the anvil is a phantom item according to minecraft
I think your best bet is to step through that with a debugger, it's extremely helpful for that kind of stuff
Who?
not you
These are not updated with the 1.14 textures
And it does not include all mobs
i see FF
...
Yeah ive done a lot of debugging, im pretty sure the item never actually exists in that slot, ive been trying to look at how anvil gui does it but its about 1000 lines of code so im lost lol
If ur on latest ur MenuType
minecraft-heads is your best bet to get all the mob heads
You’ll have to manually map each one
Are you responding to me? what do you mean by this
Why 1000 lines of code? Don't tell me that you put everything in one java file because that is how you easily get lost
1000 lines happens sometimes
and you shouldn't split things up just because of the lines (but it might be something worth thinking about for a bit)
there is technically a limit to the amount of objects a single class can have, but I doubt 1k lines would come close to it
You don't really have to think about that
I don't mind doing that, I just need a list of usernames and urls. I don't remember what each mob looks like. So it may be hard but I do know how some looks like. I can see how to make the player mob, I just need the list
You're not going to hit that limit
not in 1k lines no
im talking about the AnvilGUI plugin, not one i made myself, i tried looking at their code to see how they did it but tbh too high level for me im new to minecraft coding
You could just use AnvilGUI and come back to it later
id like to but the person im working for requested that i do it myself
also there is other considerations too, like stack size not entirely sure how many local variables you would need to hit the default stack size limit though
not quite something I have tried to test 🤔
Iirc using inventory type to make an anvil doesnt work but new MenuType does
You working for someone? What he wants you to do? Is it realitic?
you can most heads from here 💀
but why though
You said you’re new though? What position are you in?
Maybe the person don't want a DMCA so they are being cautious about other code. That is why I making my plugins, I don't want to get involved with that
hmm
Lets see what he does
Can I use my own player head and put a texture on it or do I still need the player username?
You don't need the username
Ok thanks, that makes things easier
How has MrNate still not been banned or warned even for asking for an illegal copy of a premium plugin be sent to him.
no one is going to send it to them anyway
ah I see they failed to listen to any of the things we told them and begged for the premium plugin so they could look at the code (or just use that plugin, idk)
they did get provided 2 other plugins but didnt use or look at them, or download the source and modify the source of the plugin they used to use
My SSI Check better hurry the f*** up
What is causing this error?
https://paste.md-5.net/nuyonetofo.cs
My code:
https://paste.md-5.net/bohuvapudu.cs
?fork
SpigotMC maintains the Spigot server. If you are using a fork of Spigot (such as Paper, Airplane, Purpur, or other derivative works), you should seek support in the appropriate Discord servers.
c'mon this is literally the same
it really isn't
The server is using purpur not my plugim
which is why you should ask purpur
i literally gave direct download link 💀
ok then
I dont
Plugin deals damage in the damage event
which triggers damage event
loop and repeat
Oh it's working
:loop
echo Infinite loop?
goto loop
Oh never mind I got what you mean this is working now. I could do setDamage instead of target.damage ☠️
public static void dealDamage(Player attacker, LivingEntity target) {
boolean isCrit = hasCrit(attacker);
double damage = calculateFinalDamage(attacker, isCrit);
AeroPlayerDamageEntityEvent event = new AeroPlayerDamageEntityEvent(attacker, target, damage, DamageType.NORMAL, isCrit);
Bukkit.getPluginManager().callEvent(event);
if (event.isCancelled()) {
return;
}
double finalDamage = event.getDamage() * event.getMultiplicativeMultiplier() + event.getAdditiveMultiplier();
event.setDamage(finalDamage);
plugin.getDamageIndicator().spawnMarker(target, finalDamage, isCrit);
}```
visual basic? that looks like java
? Who are you talking too
You
Code block is set as Visual Basic instead of Java for some reason
Yes cause i used vb and not java
I got one issue. When is the BREEZE be added to EntityType? I asking because its not being detectedtextures.put(EntityType.BREEZE, "80843a94f925b5598924ff9b52b7999c8d29d1b790ad487dd54e27956e540d20");But I on the server getting hit by one in godmode as I type
what do you mean by not being detected?
as in "cannot find symbol"? make sure you're building against the 1.21 api
also make sure your api-version in plugin.yml is set to 1.21
i'm not sure if it happens with the entitytype enum but i know the server does weird remapping shit with materials if it doesn't match what the server is running on
declaration: package: org.bukkit.entity, enum: EntityType
it already is
how can i get the time the server was ready? i mean when the "type /help" message appears
Like how long it took the server to load up?
doesn't it print that somewhere by default
yea
Should print "took x ms to startup" or something similar at the bottom of your console when it loads up
wot
mm fair point
he probably wants to get it programmatically
which, uh, i don't know
plugins are instantiated very early on
I don't think that's something rather publicly accessible...
so you could probably take a timestamp in your plugin ctor
^ you'd have to write the impl yourself
you'll probably miss out on the first few seconds while the jvm and server internals spin up, but that should be fairly negligible
hmmm new pr to get the startup time of the server
can't you just like
looking at my logs, the time between the process being launched and first plugin clinit is about 13 seconds
that's kind of difficult since plugins aren't loaded instantly
sure but that difference is rather small no?
at least till onLoad hits
onEnable could take a while longer while other plugins enable
sure, it should be good enough for most applications
Yeah but ya never know what the use case is for so it's hard to say what they need from it I guess
ctor fires far earlier than onLoad though, so you'll want that
but like, onLoad should be only a couple seconds after the server started
gonna do all my enabling logic in onLoad
you could maybe like read the file created metadata on latest.log or something ♿ but i doubt that's worth the 5-10 second skew in
numbers
early failing 
the real winning move is to start loading shit asynchronously onLoad and then join that thread/future onEnable
or join in onLoad and blame paper for server startup taking so long 
make a paper bootstrapper
that way multiple plugins can do their heavy lifting in parallel, and you may save as much as 3 seconds of startup time
what if i want a paper loader
even better
which doesn't sound like much, but over the course of a server's lifetime, it will add up to minutes
|| You can always read the log ||
I think vcs mentioned that
instant
I am developing a plugin where blocks are summoned in world, and players can right-click them to gain specific effects.
To distinguish interactable blocks, I store a specific value in the block's PDC (Persistent Data Container).
A. Use the library JEFF-Media-GbR/CustomBlockData to store PDC
Supports custom blocks, custom furniture, and all Minecraft blocks.
However, it is not compatible with WorldEdit and may have uncontrollable bugs.
(This library tracks most state changes, such as piston movement like B.)
B. Store PDC in BlockState, allowing only tile entity blocks
Limited to Minecraft's tile entity blocks.
Ensures compatibility without major issues.
Which option would be the better choice?
I'm currently torn between allowing only tile entity blocks to control uncontrollable bugs and code or taking the risk for more customization options.
-# transted to english from korean by ai
This plugin is simillar to supply box in PUBG
And block just spawn, not moving.
how many blocks are there? will more be added or will some be removed at runtime, or will they always be the same?
Supply boxes are usually chests which are tile entities
They are summoned according to the interval set by the server owner, with the default setting summoning 2 every 10 minutes.
My plugin listens interact event and open new custom inventory
are they all naturally tile entities like chests, or will there be non-TE blocks also?
visually, that is
in basic config?
generally
hmm...
if you limit it to support only TE's, this will be very simple
yeah
because all TE's support pdcs naturally
thats B option
i would recommend going with that unless you absolutely need something else
But some or many owners may want customizable supply box (like custom furniture from IA, Oraxen, Nexo)
oh okay
no clue about IA or whatever nexo is but iirc oraxen listens to physics and other events to keep track of its own data
if your world map is static and won't allow explosions/pistons, you can just have a Block -> crate hashmap in memory
survival map
private ItemStack parseTool(ConfigurationSection toolSection) {
if (toolSection == null) return null;
String materialString = toolSection.getString("material");
if (materialString == null) return null;
Material material = Material.matchMaterial(materialString.toUpperCase());
if (material == null) return null;
int amount = toolSection.getInt("amount", 1);
ItemStack item = new ItemStack(material, amount);
ItemMeta meta = item.getItemMeta();
if (meta == null) return item;
String displayName = toolSection.getString("display_name");
if (displayName != null) {
meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', displayName));
}
List<String> lore = toolSection.getStringList("lore");
lore.replaceAll(line -> ChatColor.translateAlternateColorCodes('&', line));
meta.setLore(lore);
item.setItemMeta(meta);
ConfigurationSection enchantmentsSection = toolSection.getConfigurationSection("enchantments");
if (enchantmentsSection != null) {
for (String enchantName : enchantmentsSection.getKeys(false)) {
int enchantLevel = enchantmentsSection.getInt(enchantName, 1);
Enchantment enchant = Registry.ENCHANTMENT.get(NamespacedKey.minecraft(enchantName));
if (enchant == null) continue;
item.addUnsafeEnchantment(enchant, enchantLevel);
}
}
return item;
}
is this ok?
if static I can use A option. but not
then you also need to write around 15 different listeners to handle physics, explosions, water, pistons, withers, endermen, so on and so on
When the player join I print the server name and I got this : Server Name: CraftBukkit, how may I edit this I mean rename the server name?
How are you printing the server name
String serverName = player.getServer().getName();
System.out.println("Server Name: " + serverName);
hm? why do you want to change that
To adapt my main plugin.
For multiple servers.
I would like to add to the player some items when he is in a lobby server and only in this type of serv.
That getName method returns the name of the server implementation
that doesn't seem like the ideal way of going about this
fork the server then
You can have a server name in your config or smth
private void lobbyGiveItem(Player player) {
String serverName = player.getServer().getName();
System.out.println("Server Name: " + serverName);
if (!serverName.toLowerCase().startsWith("lobby")) {return;}
ItemStack compass_minigames = new ItemStack(Material.COMPASS, 1);
ItemMeta compass_minigames_meta = compass_minigames.getItemMeta();
compass_minigames_meta.setDisplayName(ChatColor.GOLD + "" + ChatColor.BOLD + "Mini-Jeux");
compass_minigames_meta.addEnchant(Enchantment.UNBREAKING, 3, true);
compass_minigames_meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_ENCHANTS);
compass_minigames.setItemMeta(compass_minigames_meta);
ItemStack head_stats = new ItemStack(Material.PLAYER_HEAD, 1);
ItemMeta head_stats_meta = head_stats.getItemMeta();
head_stats_meta.setDisplayName(ChatColor.GREEN + "Informations & Statistiques");
head_stats_meta.addEnchant(Enchantment.UNBREAKING, 3, true);
head_stats_meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
head_stats.setItemMeta(head_stats_meta);
ItemStack emrald_shop = new ItemStack(Material.EMERALD, 1);
ItemMeta emrald_shop_meta = emrald_shop.getItemMeta();
emrald_shop_meta.setDisplayName(ChatColor.BLUE + "Boutique");
emrald_shop_meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
emrald_shop.setItemMeta(emrald_shop_meta);
player.getInventory().clear();
player.getInventory().setItem(0, compass_minigames);
player.getInventory().setItem(1, compass_minigames);
player.getInventory().setItem(8, compass_minigames);
}
register a plugin channel and send a bungeecord message to fetch the server's configured name
then run logic on that
Yeah that's probably a better idea
then again that means either the name to match needs to be configurable, or all admins need to set the lobby server names to some hardcoded value
But why is this a better idea than recovering from the local server???
the local server doesn't know
Option A, JEFF-Media-GbR/CustomBlockData claims it support almost block state change. It will support 15 things
But I dont believe thirdparty library well. But It make I can add support of custom block/furniture from Nexo/Oraxen/IA
So, I torn between two option now..
do you recommend option B? (use tile entity block)
And if I use MOTD?
well like there is some server name property in server.properties i think, but i've never seen anyone use it
It's a "sub" server so.
no, that is stupid
No one can see it.
if you want to support every block without writing your own thing to store data on all blocks use custom block pdc
the developer of it is well known and will most likely fix any bugs found
i don't know anything about those third party plugins so my design would be to keep it as a furnace or something server-side, and then spoof a different BlockData for it using Player::sendBlockChange, or the third party plugin api where appropriate
If you have many server with proxy, find other way
If you mean world, use Player#getWorld#getName
If you really mean server, check port or get server mod name with purpur bukkit
will work with worldedit, block pistons, etc. all natively through minecraft's own block handling
You can do approach A with a custom worldedit extent to copy over blocks properly
I want to find the most appropriate method with minimal code.
don't we all
what if the player teleports/disconnects/dies
entities might unload before the appropriate events fire, i don't think there are any guarantees around this
all that said it will be "safe" as long as you check isValid on the armorstand before doing anything with it
also, make sure to setPersistent(false) so it doesn't get left behind and saved in a chunk and stick there permanently if you somehow do happen to lose track of it
not safe
Even if the entity's invalid it's still prevent in memory
To be 100% certain just map UUID : UUID and call getEntity often
and do null checks ig
or use an IdentityHashMap iirc
or store weak references
sure, but to be fair entity instances are far, far smaller than player instances; you'll struggle to create a non-negligible memory leak even if you're keeping thousands of them in that map
entity instances track the world too
player instances are noteworthy because they hold onto statistics and other things
entities aren't that small
they have a hard reference to their chunk, world and data
Might also have, for example, a target player in their pathfinding goals
If you can minimize the scope of your leak why argue against it?
Yeah weak ref if you really want to keep the entity in a map
there is a balance to be maintained between boilerplate and accounting for the 0.1% case of someone creating and unloading hundreds of worlds on the fly
personally i draw that between entity.isvalid and bukkit.getentity
but yes, you can use bukkit.getEntity with an UUID->UUID map if you like, that is safer
when server is stopped, first happend onquit event for each player and then ondisable() ?
i vaguely remember onDisable being called first
specifically because i had this per world inventory kotlin plugin at one point where the developer neglected to save inventories in onDisable, only onQuit
I vaguely remember onQuit not firing
so every time the server restarted, none of the inventories would save
It does get triggered
so i wrote a plugin that kicked everyone onDisable 🤡
prob after onDisable then yeah
i suppose the idea behind designing them to fire this way around is that plugins can e.g. remove metadata from players on shutdown, in case the plugin will be uninstalled before next startup
oh,...
so all players are available for all plugins to process on shutdown
so i haveto do the same thing in ondisable
myeah
put your "player cleanup" logic in a separate method and call it both onquit and ondisable
repeating yourself is a grave sin after all
hm
I recall hypixel having a uuid wrapper called EntityId
bet it has getEntity methods
if i had to go about doing wrappers, it'd probably hold a weakref to the entity and re-reference the entity from bukkit.getentity if cleared/invalid
weakref costs memory and has some cpu time as well iirc
Performance on my block scanning logic tanked after 1.13.2's location world -> weakref changes
because distance checks constantly spammed world ref get()
(yes, I profiled it)
oh for sure, it's an extra pointer deference, that will be noticeable compared to a direct reference in hot loops
Weak ref shouldn't have that much of a perf difference 🤔
Sure it's some but it shouldn't tank it
however... i suspect making a call to bukkit's uuid -> entity map is even slower
it was like 50% of all the cpu time in my code
as you will be spinning uuid.equals, hashcodes, branching here and there, and potentially colliding all over the place
I did call it millions of times
the bigger practical cost with weakreferences is the cleanup, but that will happen once in a blue moon for entities, and block->world too
same reason as why iterating over pointer based structures like linkedlist is much slower than dense array structures
i realized i dont want to do it every time player quits but at the onDisable(), but also for the players that left so are offline at onDisable(), can i just get players by uuid if they are offline?
or do i have to get OfflinePlayer instances
what are you doing
Main : ```java
public final class LupusLand extends JavaPlugin implements PluginMessageListener {
@Override
public void onEnable() {
...
this.getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord");
this.getServer().getMessenger().registerIncomingPluginChannel(this, "BungeeCord", this);
}
@Override
public void onDisable() {
this.getServer().getMessenger().unregisterOutgoingPluginChannel(this);
this.getServer().getMessenger().unregisterIncomingPluginChannel(this);
}
@Override
public void onPluginMessageReceived(String channel, Player player, byte[] message) {
if (!channel.equals("BungeeCord")) {
return;
}
ByteArrayDataInput in = ByteStreams.newDataInput(message);
String subchannel = in.readUTF();
if (subchannel.equals("GetServer")) {
String serverName = in.readUTF();
getLogger().info("Le joueur " + player.getName() + " est sur le serveur : " + serverName);
System.out.println("Server Name: " + serverName);
if (serverName.toLowerCase().startsWith("lobby")) {
getServer().getScheduler().runTask(this, () -> {
System.out.println("IN LOBBY");
});
}
}
}
}
Join Event :
```java
ByteArrayDataOutput out = ByteStreams.newDataOutput();
out.writeUTF("GetServer");
player.sendPluginMessage(plugin, "BungeeCord", out.toByteArray());
plugin.getLogger().info("Message envoyé au proxy BungeeCord pour obtenir le nom du serveur.");
I don't see other print, logs only from my join event.
where are you sending your bungeecord message?
for bungeecord to send you something (i.e. for onPluginMessageReceived to fire) you will need to send bungeecord something first
?
when player enters a region: i give them new inventory and store their normal inventory, when they leave the region: i sell the items from the inventory and give them back their normal inventory with their items
but when onDisable() i wanna sell it and give them the inventory (as they would left the area), and in onEnable give all players that are in the region the new empty inventory
understand?
let's see that code
It's under the main code.
not in whole
ByteArrayDataOutput out = ByteStreams.newDataOutput();
out.writeUTF("GetServer");
player.sendPluginMessage(plugin, "BungeeCord", out.toByteArray());
plugin.getLogger().info("Message envoyé au proxy BungeeCord pour obtenir le nom du serveur.");
i can't see the method signature
The only print I have it's from the getLogger.
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) throws Exception {
Player player = event.getPlayer();
String username = player.getName();
String uuid = player.getUniqueId().toString();
String ip = (player.getAddress() != null) ? player.getAddress().getAddress().getHostAddress() : "UNKNOWN";
registerPlayer(username, uuid, ip);
kickIfBan(player, uuid);
tabManager(player, uuid);
lobbyGiveItem(player);
}
private void registerPlayer(String username, String uuid, String ip) throws Exception {
...
}
private void kickIfBan(Player player, String uuid) throws Exception {
...
}
private void tabManager(Player player, String uuid) {
...
}
private void lobbyGiveItem(Player player) {
String serverName = player.getServer().getName();
System.out.println("Server Name: " + serverName);
ByteArrayDataOutput out = ByteStreams.newDataOutput();
out.writeUTF("GetServer");
player.sendPluginMessage(plugin, "BungeeCord", out.toByteArray());
plugin.getLogger().info("Message envoyé au proxy BungeeCord pour obtenir le nom du serveur.");
// ...
}
}
It's enabled... Else how I get the print ???
"[LupusLand] Message envoy├® au proxy BungeeCord pour obtenir le nom du serveur.".
->
plugin.getLogger().info("Message envoyé au proxy BungeeCord pour obtenir le nom du serveur.");
i would probably remove the items from the player's inventory on quit and store them in a uuid -> itemstack[] in memory
if the player rejoins during the same server session, put the items back and remove the uuid -> items mapping
then ondisable go through that hashmap and process the items
this will rely on your economy backend supporting OfflinePlayers or UUIDs, however, as the Player instances themselves won't be available anymore
if it doesn't, it becomes harder
you mean the temporary inventory ?
this looks about right, not sure what'd be wrong with it; maybe print all incoming plugin messages rather than doing early return on the channel name
yes
@Override
public void onPluginMessageReceived(String channel, Player player, byte[] message) {
System.out.println("Received " + channel + " from " + player.getName());
if (!channel.equals("BungeeCord")) {
return;
}
ByteArrayDataInput in = ByteStreams.newDataInput(message);
String subchannel = in.readUTF();
System.out.println("SubChannel: " + subchannel);
if (subchannel.equals("GetServer")) {
String serverName = in.readUTF();
getLogger().info("Le joueur " + player.getName() + " est sur le serveur : " + serverName);
System.out.println("Server Name: " + serverName);
if (serverName.toLowerCase().startsWith("lobby")) {
getServer().getScheduler().runTask(this, () -> {
System.out.println("IN LOBBY");
});
}
}
}
[19:02:11] [Server thread/INFO]: Done (1.232s)! For help, type "help"
[19:02:13] [User Authenticator #1/INFO]: UUID of player Program is b6fe2775-5c19-404e-9df3-3c08a237c168
[19:02:13] [Server thread/INFO]: [LupusLand] Message envoy├® au proxy BungeeCord pour obtenir le nom du serveur.
[19:02:13] [Server thread/INFO]: Program joined the game
[19:02:13] [Server thread/INFO]: Program...
Nothing new 😭.
maybe try call flush on your byte array output stream 🤡 i don't remember if that makes a difference
also, check on the bungeecord side for errors in console
There is no error in bungeecord.
?
ByteArrayDataOutput out = ByteStreams.newDataOutput();
out.writeUTF("GetServer");
player.sendPluginMessage(plugin, "BungeeCord", out.toByteArray());
plugin.getLogger().info("Message envoyé au proxy BungeeCord pour obtenir le nom du serveur.");
flush after write
how can I contact moderators a guy is creating multiple accounts and leaving 1 star review on my resource promoting his resource in it
i think toByteArray calls flush automatically but best to be consistent with streams
and ondisable() if they online i just give them their inventory back, if they are offline ... do i just get them by uuid ?
swap the inventories onQuit; so that the real inventory is back on the player, and the sellable inventory is in a uuid -> items map in memory
[19:04:43] [Server thread/INFO]: Done (1.282s)! For help, type "help"
[19:04:52] [User Authenticator #1/INFO]: UUID of player __Program__ is b6fe2775-5c19-404e-9df3-3c08a237c168
[19:04:53] [Server thread/INFO]: [LupusLand] Message envoy├® au proxy BungeeCord pour obtenir le nom du serveur.
[19:04:53] [Server thread/INFO]: __Program__ joined the game
[19:04:53] [Server thread/INFO]: __Program__[/127.0.0.1:14265] logged in with entity id 47 at ([world]-507.7455308037484, 89.36099020467965, -161.68707911163966)
>
ByteArrayDataOutput out = ByteStreams.newDataOutput();
out.writeUTF("flush");
player.sendPluginMessage(plugin, "BungeeCord", out.toByteArray());
plugin.getLogger().info("Message envoyé au proxy BungeeCord pour obtenir le nom du serveur.");
Nothing new.
okay but that will be incompatible with different plugins... when player leave the area there is other command executed (from another plugin, to give player the money), soo... now i dont know
onJoin, check the map and if you have a mapping, swap them again; so that the real inventory is stored in memory and the sellable inventory is on the player
i'm not sure what you mean
yeah im lost
the player can't leave the area if they're offline
but when server is disabled it is supposted to count as leaving the area, i need to use worldguard plugin and probably some economy plugin to give player the money, but can i do this in onDisable? what if worldguard is disabled first..... uhm
list it in depends in plugin.yml
any plugins that you depend or softdepend on are guaranteed to be enabled for the full lifetime of your plugin
wow
they will enable before yours will; and they will disable after yours will
as for the money
you should use vault, not a command
oh, but its configurable what command executes when player sells the items
so i dont really know the plugin
brruh
economy rewards are typically added separately
e.g.
rewards:
money: 200
commands:
- give %player% apple 1
where money would be done through vault
money can also be done by the end-user
or are you talking about multi-currency support?
ok so player can use only vanilla commands in 'commands' section
eco give %player% 1
this has like no drawbacks
no dependency management, no nun
other than "oo performance"
what does that mean?
i'd rather go with vault this is all besides the point, i think the main issue here is that his players are potentially offline when he wants to run these commands
what if I want playerpoints support
yeah but i found another problem
which is more like a design issue
or coinengine or whatever
he can prob just have a command queue somewhere in a db
i would honestly just recommend making it plain and simple; when players quit, run the commands, give the rewards, clear the temporary inventory, and boot them out of the region with a teleport
no teleporting
hardcore memo leak
location.getWorld().getNearbyEntities(location, 2, 2, 2)
when they rejoin just give them another empty inventory
this is ass
im gonna make it simple as you say for now i think
don't search for nearby entities matching the UUID
code's still ass btw
iterate over the UUIDs, call Bukkit.getEntity, and check if it's in range
answer please, does this mean user shouldnt type in commands other than vanilla ones?
in other words do it exactly backwards
no? commands are commands
but if they type in some plugins command it could try to execute when the plugin is already disabled
he's trying to do shit in ondisable
100% gongas
sucks to run on a version that sucks
@worldly ingot get a load of this guy
anyway do this
your commands will fail if the players are offline anyway
no point doing it in ondisable
yeah but i jjust wanna know
Yeah true
so using not vanilla configurable commands at ondisable wont work
Why do you want to run commands in onDisable?
well... you can't really softdepend: ["*"] i don't think
if you want it to run last I believe you could softDepend zzzzzzzzzzzzzzzzzzzzz
yeah
so ondisable there's no guarantee that the plugins providing those commands are still enabled
now im just asking
learned that hack somewhere
that's quite curious
z?
the more principled approach to this would be to run them on PluginDisabledEvent but that'd require you knowing which plugin provides which commands
and isn't 100% exact as plugins could be disabled by plugin managers at runtime
oh no not mixin priority mess
People start adding 0s to make their stuff run last
Priority inflation
lol
they should ditch eventhandler priority enum and accept a double instead
If someone know
huh did you write flush as a string in to the output
why
i told him to flush the stream
Try with resources for that one
?
flushing the stream does not mean writing a string to it
doesn't look like ByteArrayDataOutput has a flush method
i kind of just glanced over the code and assumed it was a bytearrayoutputstream
or a dataoutputstream
Well what I do then???
ah I see that's a Guava class
you can't send plugin messages in the join event, it's too early for that
Well how then I'm supposed to know that the player is in a lobby server?
the earliest you can send one is the PlayerRegisterChannelEvent for the respective channel you want to send the message through
have a line in your config.yml that the admin sets from false to true if it's a lobby server
And java side?
read the config and check if it's true
bungeecord doesn't really have a concept of "lobby server" either, the server names are arbitrary and at the discretion of the server admin
so you can't really ask bungeecord "am i lobby server" anyway
How does the game know if the generated packed ice is from frost walker boots?
I want to be able to mine those
so the best you can do is just have a config for it
The block is called 'frosted_ice'
just another block instead of some data valie
How are my gifs i added with an external source in the editor like normal but in the preview they dont show?
Are they too large?
Is it a problem to divide a single event into several classes, like for item interaction in a menu, if we make a class for each menu for this event for example?
I'd like someone to code me a custom plugin basketball plugin for 1.21.4. I'm willing to pay a good amount of money based off of the quality and detail. The price can be negotiated. I'd also need a portfolio of past work you've done.
seems, as per usual no one bothers reading -.-
seems we are bound to get more randoms advertising
?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/
is this a good way to make databases? https://paste.md-5.net/dufaqubuxo.java
and second question, if i aready have the file .db made with this method how can i update it if i create a new table without losing the old data?
Your old data won't be lost if you make a new table?
or do you mean update the existing one?
CREATE TABLE IF NOT EXISTS is fine for sqlite but I'd avoid it for remote databases
can cause issues if you're using something like Planetscale which prevents breaking changes from executing in production dbs
(I've had to fork a few plugins and patch them because we use it at work)
like if i add this: (but i aready have a .db file without that in the folder)
// Sql 3
String sql3 = "CREATE TABLE IF NOT EXISTS arap(id INTEGER PRIMARY KEY AUTOINCREMENT, blabla TEXT NOT NULL , ecobla TEXT NOT NULL)";
Statement st3 = this.connection.createStatement();
st3.execute(sql3);
i will get only the old stuff or this one too?
if(!file.exists()) {
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
try {
sql = new DataBase(file.getAbsolutePath());
} catch (Exception e) {
e.printStackTrace();
}```
this is how i make the .db file within the onEnable
CREATE TABLE IF NOT EXISTS will make the table if it doesn't exist
It won't touch your other tables
oh okay thanks and sorry for the stupid question 🙂
MenuType does seem to be a bit closer, it does recognize that there is an item in the result slot, but its name seems to be empty, its kinda hard to find information on MenuType tbh to see proper implementation
My menu type seems to be in the "repairing" state as that is the name at the top, i presume it would want to be in a renaming state if that exists, but im not quite sure if im correct on that
Hey guys why is it when I left click on the PlayerInteractEvent it will change the e.getItem correctly after 200 ticks but when I right click it doesn't change any of the itemMeta but still prints it succeeded? for 1.8.8
@thorn isle you aren't helping me when you are reacting to my message with a clown emoji
?howold 1.8
Minecraft 1.8 is 10 years, 5 months old.
damn more than a decade
hypixel runs on 1.8.8
multiple others servers do
and the server im making is a 1.8.8 server and has to be a 1.8.8 server
Lol
This argument is more watered down than a lake
We wouldn't do it if you got out of the last decade
i literally can't
its not possible
i need the pvp mechanics
it's part of the game
Nah I understand gotta capture that sweet sweet minority of the market share
Well the issue is, no one here is going to remotely care to investigate why that might be broken in 1.8
you don't even know what i'm making
i know
Pvp server #10,0000
You can get the same pvp mechanics now
With the new update
You can have same pvp + swordblocking
You know there are specialized 1.8 forks right why even bother asking here and not the guys who pour their lives into working on that god forsaken version
i have it on my server 1 to 1
i've already done 30k lines in 1.8.8
So asking in here for 1.8.8 support is like, you are probably better off just grabing spigot source and running debuggers
im not switching
use a fork
Okay it's a community dude of 1.8.8 players
i just need help on this code
not to discuss me moving to 1.20
yeah use imanity3 and ask there
Lol
or later versions
Average 1.8 moment please seek software that actually supports 1.8 lol
i've never heard of that actually
@timber eagle any server running on 1.8
has their own fork
any small server running on 1.8
uses a fork that is maintaned
if ur using spigot 1.8
never knew this
ur begging to be nuked
¯_(ツ)_/¯
Pick a popular 1.8 fork that's updated and use it
go buy imanity3
Yea you might find more luck with the discords of the forks
yeah
buy?
how different is it do you know
plus imanity3 is pvp focused
PandaSpigot is still maintained apparently
nah panda is shit
I love buying org.bukkit classes
no lol
One of them has async cows
i had better pvp and better performance w imanity3
excatly
Not HyperSpigotUltraEditionPlusAsyncDeluxeAsync
Okay
what
Honestly, I should start DMCA striking every last one of these forks 
The mooing is so heavy it needs async
@timber eagle 🤡
does async work with their api
holy random
yes they are async just go look at their buy page??
okay okay
Ur paper code is mit smh
but yea, "paid forks" are the most blatent licence violation on the planet
thanks
my spigot code isn't
Wait is paper code MIT?
something something GPL3 I have the right to source code
Bruh what is this scam
you can submit your work as MIT
Check the licence
by default all contributors are submitting under GPL3 iirc
I haven't looked because I dont care
paid forks don't either 😉

We can also make leaves async
now you have my attention
Forced world for scrop
What mobs should we make async
Fireflies
Async it
async every mob not in 1.8
Lynx can you stop fighting foxes, I can hear them

Thanks lynx
no problem
i do unironically want to look into doing async pathfinding/collisions/tracking/basic entity shit at some point
so that i can have a horde of 1000 zombies running a boid ai
async pathfinding has already been done
async cow milking
it's mostly the entity tracker that pisses me off
that shit is backwards and far from optimal
IM TALKING TO THIS GUY
fair enough, entity tracker truely do be annoying
I literally had this conversation today
yo do u know where i can find videos on other spigot forks and imanity3
can't find it anywhere on yt
bro go to bbb
and look at the page
videos? are you not literate?
are u autistic
what are they gonna show
chunks generating?
go learn common sense before coding 30k lines
bro what 😭
a video of someone doing 1000 degree knife on random objects with a TTS of the api documentation on top
why would anyone have a video of a jar?
like chunks generating?
How dare you?
why the hell
dude
read the features and buy it
not what i'm asking
what would u need to watch?
which one of these for what reason would u need to watch
Make sure to look at great performance graphs created by their authors 
this u want to watch?
i don't care about this shit
if u run a 1.8 server
Manity Spigot3
on spigot
Wat
ur doomed
okay cool
no
or any other network thast on 1.8
cuz u told me so
yeah
hYpIxEl rUnS a 1.8 sErVeR
shut it noob
Technically hygot is forked from spigot
okay
so are u saying it's gonna fix all my problems
and weird ass issues
do u even know what i said to begin with
☠️
im saying if u want to run a 1.8 server
Are we buying stupid 1.8 forks again?
no idea what i did to make it work @remote swallow but it works thanks for the assitance
They are the fastes
just use pandaspigot @timber eagle then u can ask in their server
and best
fucking troll
its free
im asking because i don't think it's a spigot issue
i actually run a 1.8 support server on the side
????
it's a issue with my code dude
would you like an invite?
oh
so
Yea
L ragebait
Why you sent this @timber eagle ? Lucky I got Vancord because I forgot who posted it for a second. I not going to repeat what I saw but know, this is not a 18+ channel, this is a development channel for one
i wrote that by accident
🤡
ok
L nudist
Man I love paper spigot™️

OH LMAO i was waiting for the emoji u had
@molten hearth still not talking to u
You can’t hide from your past!
u didnt do anything
thast why
You can take the paper out of the spigot but you can’t take the spigot out of the paper
Or something
YEAH

thats the one
YOO HAPPY BIRRHDAY
flamepaper is good as well
How about 
i used flamepaper for like 2 months had no issues w it
wait wait wait wait
are you saying
i can use java 21
on a 1.8.8 server and have no issues
does it support javascreipt
isn't flamepaper from the person that made flamecord?
💀
ye pretty sure
w bait

L ragebait
shut up nudist