#help-development
1 messages Β· Page 1246 of 1
nope
libsdisguises api is far more stable than the protocol
and far far more stable than nms
ProtocolLib hasn't changed API in ages
the exact way i had my original plugin work was this:
when a player dies, they spawn a corpse.
if the corpse is ever empty, it will take only 10 seconds to despawn.
when the corpse is not empty, it will take 5 minutes to despawn.
when the corpse despawns it drops whatever items remained in it.
if you right click on a corpse with an empty inventory, then instead of opening the corpses inventory, the plugin sets your inventory to that of the corpses and empties the corpse.
yes, but the protocol changes every version
anything that directly uses the protocol is inherently unstable
and protocollib is only a very thin wrapper over the protocol
oh also curse of vanishing worked on that plugin, so curse of vanishing items would vanish properly (had someone make me a bugfix to add that to that plugin)
for example just one or two major versions back, the remove entity packet got changed to contain not one eid, but a collection of eids
this was an unexpected and imo needless change, but mojang did it anyway
oh also the corpse has a nametag above it, which has a timer telling you how long until despawn time.
and it also says "[username]'s corpse"
I don't understand hte last part
this fucked over a bunch of plugins relying on protocollib for e.g. clientside fake entities
including my imagemap plugin
when you click an empty corpse, it clears your inventory?
so if you right click a corpse, the plugin checks if your inventory is empty or not.
if empty:
the corpses inventory is copied to your inventory, and the now empty corpse despawns in 10 seconds.
if not empty:
you just open up the corpse like a chest
notwithstanding anything unforeseeable, this sounds like maybe a few hours of work to write and test
i'd maybe commission someone to do it, or to find/modify an existing plugin to behave this way
i am an unforseeable problem magnet unfortunately π
i will try, but would it really not be easier to try and compile playernpc?
I really don't think so considering you are not a developer
that repo is a shitshow
and that code looks like a mess to deal with anyway
i think i know how to fix the singular bug, i just cannot get it compiled for the life of me
I can make a plugin like that for 10 bucks
that's a decent rate
well, its 2 plugins technically
theyd both have to work together
# Lootable Corpses config
# Set in minutes how many minutes before corpses are removed
# Set to 0 to not remove corpses automatically
remove-corpse-after-minutes: 2
# Set in minutes how many minutes before corpses are removed after interaction
# Set to 0 to remove instantly after interaction
# Set to -1 to disable
remove-corpse-after-interaction-minutes: 0
# Disable looting corpses
disable-looting: false
# Instant respawn - cancel death screen
instant-respawn: false
# Kill players when leaving game
kill-on-leave: false
# Custom inventory title
inventory-title: "{player}'s corpse"
# Set whether the corpse is generated above the Void when a player dies in the Void
keep-corpses-above-the-void: true
# Blacklisted worlds - disable lootable corpses in certain worlds
blacklisted-worlds:
- world_nether
this would take some work actually i think π
half the features i normally use aren't there, idek if it has nametags for the corpses
im also 90% sure that 1.20+ adds some features that these kinds of fake players and custom mobs can utilize... and said features don't exist in 1.19.4
based on some discussion ive had with the GSit dev
is there a event when a player duplicates item in creative?
or should i use InventoryClickEvent
iirc there's a COPY_STACK inventory action but i might be wrong
disguise Player %player% setSwimming true setCustomName "%player%'s corpse"
let me see
what in the Skript
line 2 = "Time until despawn: [time]"```
?
this is a libsdisguises disguise string
it is a bit π€‘ and you probably should use the proper methods on Disguise, but this should work; pass this through DisguiseParser::parseDisguise to get the matching Disguise
this one exist
ill try with it
thank you
then apply the Disguise to e.g. an armor stand
and they will appear exactly as in that plugin of yours
they will have the player's skin and a title over the corpse saying "player's corpse"
then you can listen to the entity interact event to do the item stuff
it doesnt work
but line 1 and line 2 accurate?
and inventory stuff?
and then the code to drop items when it despawns and not when a player tries to kill it?
any ideas?
should all be very simple
like it still just sounds like you're coding the entire plugin minus the fake player
well yeah
but the entire plugin is very simple
minus the fake player
that part is complicated
how did they get a simple 2 line nametag tho?
which is why i use libsdisguises to take care of it
i feel like they did something complicated
probably an invisible armorstand with a custom name
nothing complicated, just a little bit of extra work
and the nametag updating in real time
not complicated either
i dont actually know how to dev a plugin...
commission that other guy who was here for 10 bucks
doesnt seem to work neither
the client usually doesn't tell the server about the inventory actions it does in creative
damn
the protocol around creative mode inventory is completely whack
what are you trying to do
every commission ive ever done has gone this way:
commission guy: yeah i can totally do it, it will be easy
me: with ALL the features? like, not a single one missing?
commission guy: yeah
8 weeks later:
commission guy: hey im done
me: this is not even close to what i asked for
commission guy: ok, anyway im done
detect if player is duplicating an item, and make that duplicated item dont work (specifically spawners)
the way i tackled this is by applying an unique id earmark in the pdc of every valuable item, and then periodically scanning interacted-with slots for duplicate earmarks
it will make them unstackable but there's no other way around it i don't think
i mean barring dupe exploits and creative mode, you shouldn't need this anyway
don't uh give creative mode to players you don't trust not to fuck your server
A client asked me to do this so that his creative staff doesn't duplicate spawners
thats what i think lol
tell him he's dumb
well π€‘ i also did another plugin that does this exact same thing but also makes them stackable
telling your client they're dumb has gotta be my favourite thing to do
but i had to listen to every single inventory event and pickup event and 4 others and manually merge stacks and simulate inventory action outcomes
turned out to be like 2000 lines but it did work
maybe i can listen for InventoryCreativeEvent and PLACE_ALL action
and i can detect if theres another equal spawner
well, see
the creative client is unhinged
i can take your spawner, save it into a hotbar
put the spawner into a chest
restore that hotbar
put the copied spawner into a chest
and repeat indefinitely
the proper solution is to disallow creative mode altogether
in fact i don't even need to save it to a hotbar, i can just mod my client to spawn anything whatsoever into the game
let's go
there are plugins like limitedcreative that get around this but they're very bandaidy
fuck him π
that's the spirit
kinky
okay now
i still have problem with PlayerLoginEvent that is fired twice or more times if i disallow it
lmao
i think is a bug
the sad part is that i did this mostly to create custom max stack sizes for different items, like 5 or 3, so it made sense to take over all stacking logic... and then 1.21.4 or .5 or something comes with the max stack size component
but oh well, they're physical money items anyway so it doesn't hurt to earmark them aggressively
can't have them money dupes happening
I want to dupe money irl
you need to be in the government to do that
or crypto shitcoins
Yea
is there a md5 coin
SpigotCoin
pump and dump in favor of purpur
amazing
April Fools NFT in uhhh 2022?
md_5 launders money with that currency
I think md paid like, 100+ to even mint it xD
I still stand by that joke. It was kinda funny
the hotbars?
S
Shi
Usually actionbar/bossbar/whatever + font hacking via negative spaces
uh does plugin exist for that
no (at least none I know)
dang
let me explain it for you what i want them to do
Thatβs not very happy :(
and probably 25 other hud plugins
i am making smp with powers and the hotbars black are showing countdown and cooldown
i don't really know any by name other than happyhud though
because happyhud performance makes me very unhappy
google for a hud plugin i suppose
you'll for sure find a few
hud as in heads up display
i'm also faaairly certain you can maybe do this with some display entity hacks now, and if you stick to vanilla icons and unicode symbols and text, it won't even need a resourcepack
don't think anyone has tried it yet though
can this be plugin or it is related to mod?
Power: Time Stop β Stops time in a 5-block radius for 2 minutes.
Cooldown: 5 minutes.
Duration: 2 minutes.
Could probably be done with a plugin
bro thinks hes Dio or some shit
i will
so i tried to compile this one;
[17:21:37 ERROR]: Error occurred while enabling LootableCorpses v2025 (Is it up to date?)
java.lang.NullPointerException: Cannot invoke "org.bukkit.command.PluginCommand.setExecutor(org.bukkit.command.CommandExecutor)" because the return value of "com.devConnor.lootableCorpses.LootableCorpses.getCommand(String)" is null
at com.devConnor.lootableCorpses.LootableCorpses.onEnable(LootableCorpses.java:55) ~[lootablecorpses.jar:?]
at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:281) ~[purpur-api-1.19.4-R0.1-SNAPSHOT.jar:?]
at io.papermc.paper.plugin.manager.PaperPluginInstanceManager.enablePlugin(PaperPluginInstanceManager.java:189) ~[purpur-1.19.4.jar:git-Purpur-1985]
at io.papermc.paper.plugin.manager.PaperPluginManagerImpl.enablePlugin(PaperPluginManagerImpl.java:104) ~[purpur-1.19.4.jar:git-Purpur-1985]
at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:507) ~[purpur-api-1.19.4-R0.1-SNAPSHOT.jar:?]
at org.bukkit.craftbukkit.v1_19_R3.CraftServer.enablePlugin(CraftServer.java:577) ~[purpur-1.19.4.jar:git-Purpur-1985]
at org.bukkit.craftbukkit.v1_19_R3.CraftServer.enablePlugins(CraftServer.java:488) ~[purpur-1.19.4.jar:git-Purpur-1985]
at net.minecraft.server.dedicated.DedicatedServer.initServer(DedicatedServer.java:311) ~[purpur-1.19.4.jar:git-Purpur-1985]
at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1120) ~[purpur-1.19.4.jar:git-Purpur-1985]
at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:325) ~[purpur-1.19.4.jar:git-Purpur-1985]
at java.lang.Thread.run(Unknown Source) ~[?:?]
it can't find the commands...?
oh my god
it made my plugin.yml a default one π
- Purpur
- commands missing from plugin.yml
same thing happens on paper tho
i dont get the purpur hate
?whereami
Forks behave differently. They have their own bugs and idiosyncrasies . This is Spigot support
wait so i shouldnt be using paper either?
the hate is not using the support channels of the software ur actually using
nope π
oh
what discord server is this?
fabric?
get it all working on SPigot and change later if you need to
makes sense π
now get it working in Bukkit 
[17:37:38] [Server thread/ERROR]: Could not pass event PlayerDeathEvent to LootableCorpses v1.0-SNAPSHOT
org.bukkit.event.EventException: null
at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:310) ~[spigot-api-1.19.4-R0.1-SNAPSHOT.jar:?]
uhhhh... im not really sure how to fix that...
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
public void updateBigHotbar(Player player) {
new BukkitRunnable() {
@Override
public void run() {
// Get coordinates
double x = player.getLocation().getX();
double y = player.getLocation().getY();
double z = player.getLocation().getZ();
String coordinates = "X: " + x + " Y: " + y + " Z: " + z;
// Send coordinates to the ActionBar (can be customized as big hotbar effect)
player.sendActionBar(coordinates); // This is the 'big' text display.
}
}.runTask(this); // runTask schedules it for execution.
}
Would this work as big hotbar?
full error:
https://paste.md-5.net/ehalaxojad.sql
[23:24:30 ERROR]: Could not load 'plugins/SeedWorldPlugin.jar' in folder 'plugins'
org.bukkit.plugin.InvalidDescriptionException: Invalid plugin.yml
at org.bukkit.plugin.java.JavaPluginLoader.getPluginDescription(JavaPluginLoader.java:162) ~[patched_1.16.1.jar:git-Paper-138]
at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager.java:148) ~[patched_1.16.1.jar:git-Paper-138]
at org.bukkit.craftbukkit.v1_16_R1.CraftServer.loadPlugins(CraftServer.java:388) ~[patched_1.16.1.jar:git-Paper-138]
at net.minecraft.server.v1_16_R1.DedicatedServer.init(DedicatedServer.java:208) ~[patched_1.16.1.jar:git-Paper-138]
at net.minecraft.server.v1_16_R1.MinecraftServer.v(MinecraftServer.java:941) ~[patched_1.16.1.jar:git-Paper-138]
at net.minecraft.server.v1_16_R1.MinecraftServer.lambda$a$0(MinecraftServer.java:177) ~[patched_1.16.1.jar:git-Paper-138]
at java.lang.Thread.run(Thread.java:750) [?:1.8.0_432]
Caused by: java.io.FileNotFoundException: Jar does not contain plugin.yml
... 7 more
Jar does not contain plugin.yml
but its contain this i dont uderstand y
It does not
see dm
and maybe the server dont get the file
but in the plugin there is th yml
is there
open it up and see
just because you see it in your IDE doesn't mean it ends up in the jar
They send me an image of what looks like an empty zip or jar with just the plugin.yml in it
nothing else so no code
lol
its not empty...
Empty as in no code
see dm
that doesn't match the error though, it'd say no main class found or some such thing if there was a plugin.yml but no classes
Yeah that's the plugin.yml
ye but i export it with everything
I don't use Eclipse
but I recommend you use Maven or Gradle instead of packaging with their artifact system
put the plugin.yml in the jar with winrar every time you build it
Genius
then automate it with ant by having antrun call winrar with the .yml as a parameter
I mean the jar doesn't contain any code
so you'd have to put that in there as well
Eclipse definitely can export it with the plugin.yml
Thatβs how I did it years ago
Yeah it can
issue is i think the only person here who uses eclipse is elgarl
I used to use it until recently

so u know y its dont work>
?
wdym
If using Eclipse you shoudl be using Maven
Export means you have to manually select the elements you want to include, like the plugin.yml
where can i check what i use?
I think you just select plugin.yml as an external resource when you use right click -> export
is it possible that my plugin is 1kb?
No
Doubt it
and 3kb?
Thatβs 1/32 the size of the original Super Mario bros
?
You use the Eclipse build system
Depends how you setup your IDE/plugin
if you are exporting you are using the built in compiler
wether you should or not is yet to be seen
do you have a pom.xml?
ye
then you should not be using export
maven build profiles
in the Run menu, run configurations
select maven and create one for your plugin
or just pick runAs maven build
then you can use the run button/pull down to build
friend me and see what i send u
I don;t do dm's I hate everyone too much
ok yeah that new-ish lootable corpses plugin is totally and completely incompatible with 1.19.4 πππ
theres so many things mojang changed or renamed in code and i would need to have a full understanding of all that stuff in order to just get this plugin to run correctly
though i do have some ideas now for how i can maybe get playernpcs to compile...?
the github you linked earlier only seemed to be an API. did it actually have the whole plugin?
PlayerNPC is an API for Corpses. PlayerNPC has a bug that makes it so that Corpses can dupe items if you have one of the new Minecraft movie capes
so i want corpses, but i don't want that dupe
Lootable Corpses is a completely different plugin (which only requires protocollib) that i started trying to backport to 1.19.4, but it seems like i will not be able to do it without actually knowing my way around plugin development and Minecraft backend code and stuff
hit the pulldown and pick run configurations
you have to create a configuration before you can build
the plugin I was trying to find dependencies for earlier was PlayerNPC (the API)
what i do in profile and settings?
At the top
the base directory?
then run or close, whatever you like
teh base directory shoudl already have been in the configuration, unless you removed it
it shoudl have already been there
ok, close all the windows
find your pom.xml in your package explorer
right click
runAs
?gui
close/cancel you just want out of that ui section
eclipse spotted
where its need to be?
what?
the pom.xml
in the package explorer window left of your screen
ok I think I know why I couldn't get working dependencies before
if I don't close the project, reopen the project, AND click on "show more" for the error intellij has every time, then it won't load new dependencies
it is quite strange
there is an update/refresh button in the maven/pom window
ahh, I will try that next time
can u come vc 1s?
which?
you can also right click pom.xml and click maven > reload project
or in the maven sidebar on the right, click the circular arrow "reload" button to do the same
sometimes the reload modal popup thing when viewing pom.xml doesn't appear
?maven
how do i change an item to a creative player with packets without it changing serverside
thank's for the amazing help <3
so like what can i tell the creative player to show it actually did something to the item
he could thing it's bugged
When a creative player picks up an item, it gets destroyed server side, when they place it again, it just tells the server to create the item again
what're you trying to do
are u playing minecraft in 4:3 aspect ratio
banishment to the shadow realm on account of the highest decree
yes
I mean that should still work for creative players
But every time they pick up the item and place it again itβll duplicate
Unless you also remove it in the incoming item packet
Yay creative mode
yeah that's beacuse the client tells the server to set the lore
can i intercept that
Compare different mappings with this website: https://mappings.dev/
Could probably use InventoryCreativeEvent
Might work
spigot loves us to the point where we have an event?
generous spigot ngl
Appears the Mojang name is ServerboundSetCreativeModeSlotPacket
Shortest java class name
issue
i dont want to accidently strip other lore from the item
should i just store the original lore in the pdc of the item being sent
share your thoughts
hidden color codes to identify your line
^
good way
Or a special component to do the same (thatβs outside the api though :( )
i also enchant the client side item with unbreaking and give it hidden enchants flag, is there a way to also identify if it's by my item changes or it actually has that (i know enchant glwo override exists but i want it backwards compatible)
actually i wont make it glow for creative players, nvm
ok i have managed to decompile, and then recompile, the corpses plugin
i can now confirm with 100% accuracy that the bug WAS in-fact, inside of playernpc and not corpses π
though maybe now i have enough decompiling experience to decompile playernpc and get all the right dependancies...? i hope
hm
ok
so
many of these files i need
that are not included in the source code
do not decompile correctly
there are two files i have the source of, that i also have the decompiled versions of. and those two decompiled versions show irreversible data loss π
there is no way to work back from the decompiled version to tell what random parts of the code were truncated into "()" for whatever reason
corpses decompiles well enough, but playernpc absolutely does not
so, i guess i need to somehow make a workaround in corpses to fix a bug in playernpc???
π
sometimes i wish i did not run a minecraft server
Isnβt it open course
playernpc is open source, yes. but the provided source files are incomplete i think π
it depends on files that it doesnt provide, that are attached to its organization
for example; import dev.sergiferry.playernpc.nms.minecraft.NMSEntity;
playernpc imports nms from inside itself
but it does not come with that
Oh yeah it just doesnβt have any of its version specific code in the repo
import dev.sergiferry.playernpc.utils.ColorUtils;
it also doesnt come with this one
version specific? are these minecraft packages?
if they do exist outside of playernpc this wouldnt be so hard
id just have to rename a bunch of imports and stuff
i think π€
Looks like it has a core library dependency for its nms wrappers
It also has a disgusting 4800 line godclass
which are not published
My advice would be to run very far away from this library and never look back
ok, so that is playernpc-specific code then? meaning i would not be able to compile this?
since its missing
Correct
ok damn π
so i have 2 options:
- make a workaround somewhere in the corpses plugin's code so that it deletes capes from playerdata before asking playernpc to make a corpse from it
- code my own corpses plugin from scratch (i legit have 0 clue how to do this)
If you have the whole thing running on a server you "should" be able to decompile it
but I wouldn't Its horrible
i was able to decompile and recompile corpses pretty easily
but playernpc straight up loses entire bits of code and if statements
when decompiled
and i cant really predict what they were
Why not just use a different corpse plugin
from the few files that are shared between the decomp and the public source, there are issues that cannot be fixed;
public void setSkin(@Nullable String playerName, Consumer finishAction){
if(playerName == null){
setSkin(Skin.STEVE);
return;
}
NPC.Skin.fetchSkinAsync(playerName, (skin) -> {
setSkin(skin);
if(finishAction != null) getPlugin().getServer().getScheduler().runTask(getPlugin(), ()-> finishAction.accept(skin));
});
}
turns into:
if (playerName == null) {
setSkin(Skin.STEVE);
return;
}
Skin.fetchSkinAsync(playerName, skin -> {
setSkin(skin);
if (finishAction != null)
getPlugin().getServer().getScheduler().runTask(getPlugin(), ());
});
}
Preferably one that doesnβt rely on an outdated library with questionable code
because they don't have the features i want AND they're not for 1.19.4 π
id basically be making my own plugin either way
What features
its hard to use an existing plugin as a starting place unless its almost exactly what i want already, cuz im really not a plugin dev
that looks fine, its just referencing internal code
like this
and this
the second one is the decompiled version
its different
the random "()" is an error
different how? other than then NPC. taken off?
what's ClientboundSetCursorItemPacket in protocollib?
its missing finishAction.accept(skin)
NPC.java
nvm
so if i cant find some methodology to figure out how the code changes when it gets decompiled, i cant fix the decompiliations when theyre removing important pieces of code
there's only 2 java files i have the source for
Probably easier to modify https://www.spigotmc.org/resources/corpse-lightweight-asynchronous-1-8-1-20-x.99482/ to add what you want
At least the source is actually available
i tried that one specifically
couldnt make it work
mojang changed some backend code, so its not for 1.19 anymore π
why not intellij
I don't use IJ, only noobs use that
damn
if this had 90% of the features i want, i would agree
but i think adding from scratch the features i want would be pretty difficult
but it gives you all you need
at teh cost of all your memory/resources
do you have 2gb or what π€
While your system is lagging mine is puring with Eclipse π
i can literally run two minecrafts, run the server and intellij at the same time just with 16gb ram
this one says it uses packets to create fake players, that may be an issue because then how does the corpse that doesnt exist serverside hold an inventory?
the corpse doesnt have an entity id if it doesnt exist and is only in packets sent to players
it quite literally does not exist on the server
unless i misunderstand this
You need an entity ID to communicate with the client
this
alright π€
ill see if it has inventories
oh
it doesnt actually work on 1.19.4
[20:28:02] [Server thread/ERROR]: Could not pass event PlayerDeathEvent to Corpse v1.0.10
org.bukkit.event.EventException: null
thats weird because the latest update for the plugin is from 2024, and it says it added 1.19.x support
but yeah it legit does not work on default spigot
at this point im thinking option 1 would be best
how do i change the visual dropped item to a player clientside but when they pick the item up, they get the serverside item
if that makes sense
xy: i want the dropped item to have a glow to the player but serverside it doesn't have the glow
Probably just an entity metadata packet
in a spawn_entity packet?
no like i send the entity metadata packet when the server sends the spawn entity packet
wait actually, dumb question, is there a way to edit only 2 java files and just jam the resulting files into the plugin's original compiled jar?
ive been assuming u cannot do that
You could decompile them, edit them, compile them, and then replace the ones in the jar
Tho getting them to compile on their own is the hard part
Some decompilers also let you edit the files
recaf is one
io.netty.handler.codec.EncoderException: Failed to encode packet 'clientbound/minecraft:set_entity_data'
if (packet.getType() == PacketType.Play.Server.SPAWN_ENTITY) {
Entity entity = packet.getEntityModifier(event).read(0);
if (entity instanceof Item item) {
PacketContainer metadataPacket = new PacketContainer(PacketType.Play.Server.ENTITY_METADATA);
metadataPacket.getIntegers().write(0, item.getEntityId());
WrappedDataWatcher watcher = new WrappedDataWatcher();
watcher.setEntity(item);
watcher.setItemStack(8, changeItem(player, item.getItemStack()), true);
metadataPacket.getWatchableCollectionModifier().write(0, watcher.getWatchableObjects());
ProtocolLibrary.getProtocolManager().sendServerPacket(player, metadataPacket);
}
}```
it kicks me as well
The code shows you're handling item entities with metadata packets,, and It just looks like the packet data might be getting messed up somewhere. The watcher setup for the item entity seems fine at first glance, but something's breaking when it tries to send that data to the client. Have you made any recent changes to the plugin or updated the server?
- The server and client versions don't match perfectly
- A plugin is trying to send data in a format the client doesn't expect
- Something's null that shouldn't be
The server and client versions don't match perfectly
they match perfecty, i'll check the null one
Smells like chatgpt
nothing's null
I meant their response
ah
recaf gives an error for every single import in every single file π
is this normal?
probably not but play along
@young knoll scan it ππ€
it wont let me save any changes to the files until i fix each and every single error π
but since all imports cause errors...
weird
yeah im kinda stuck ig π
but like, even the files from the plugin itself cant be imported from one place to another
things cant be implemented
try something other than recaf
i havent used recaf in so long but i remember it being buggy
quick reminder
are you still trying to fix that crappy corpse plugin? just rewrite it
it'll take maybe like 4 hours and you'll learn something actually useful while doing it
am with vcs2 on that one
eh, more like a week considering they aren't a developer
but you'll learn something nonetheless
y'll prob spend more time trying to find something like recaf
Scan what?
im not a plugin dev
and its not a very simple plugin
is the corpses plugin open source
it is actually a not that complicated of a plugin
diving right into protocols, packets trickery, timers, all that stuff from having 0 knowledge beforehand is going to take more than 4 hours
what is it called
yeah rewriting this from scratch, even accounting into it learning everything involved, is going to be an order of magnitude easier and faster than trying to modify this existing crappy codebase
it is not
what is it called
thats the sad part, i can decompile AND recompile corpses just fine. and itll work
but the bug is in playernpc, its main dependancy
I mean, it depends on how you want to go about it, if you do it in the way vcs2 recommended, then it should be less of a hurdle since it's just calling libdisguises api
is playernpc open source
kinda
just change the playernpc
and put it in your server
it'll automatically change it for the corpses
it "is" but it doesn't compile and is missing 95% of the classes needed to build it, and doesn't use any build script
yes that is what ive been trying to do
that's what they're trying to do, it's just a mess of a library however
it is awful π
tl;dr rewrite it
start by writing a plugin that simply spawns an armor stand or another simple entity when a player dies, and stores the dead player's inventory on it
I am kinda bored so I'll try and prove the point, see how long it takes me
we looking at 2 weeks of pain already for that. and that's not even 1/4th of the features π
quicker reminder
well... this isn't going to be any easier for you
point isn't proven unless the plugin works on 1.19.4 and has ALL of the features that the original plugin had
repairing an old thing is harder than making a new one
here
what is your issue, kinda got lost in the sauce
here
and here
io.netty.handler.codec.EncoderException: Failed to encode packet 'clientbound/minecraft:set_entity_data'
if (packet.getType() == PacketType.Play.Server.SPAWN_ENTITY) {
Entity entity = packet.getEntityModifier(event).read(0);
if (entity instanceof Item item) {
PacketContainer metadataPacket = new PacketContainer(PacketType.Play.Server.ENTITY_METADATA);
metadataPacket.getIntegers().write(0, item.getEntityId());
WrappedDataWatcher watcher = new WrappedDataWatcher();
watcher.setEntity(item);
watcher.setItemStack(8, changeItem(player, item.getItemStack()), true);
metadataPacket.getWatchableCollectionModifier().write(0, watcher.getWatchableObjects());
ProtocolLibrary.getProtocolManager().sendServerPacket(player, metadataPacket);
}
}```
if all the features are just what you mentioned earlier, then it sounds doable
chatgpt could probably create this plugin minus the libsdisguises/corpse visuals part
I wouldn't trust chatgpt to produce valid spigot code tbh, it doesn't have enough information on it
i'm not gonna lie i remember watching a how to make a corpse plugin video on yt
claude 3.7 maybe
i dont remember why but i remember i did
eh it produces pretty good bukkit-facing code
there's a lot of bukkit plugins in the dataset, after all
what are you trying to do with this code
change the item of an item entity client side
just change the displayed item?
yes
wait, the item of an item?
yes
that would be a shulker box or what
The item shown by an item entity on the ground
yes
you wouldn't want to send a packet but listen to the metadata packet in that case, otherwise the change is just going to revert to whatever it was before
the most likely case is that you are missing metadata in that packet and thus it fails to encode it
that would be interesting
It wonβt revert unless that specific value is marked as dirty for whatever reason
it's in a spawn entity packet
no
Well yeah, thatβll resend the entire entity
how do i explain this
i intercept the spawn entity packet
if it's an item entity, it does whatever to the item of that entity
lmao
very encouraging
A listener for the entity meta packet is probably what you want though
any real advice
can i get the entity in a meta packet
you should be able to, yes
k
You can get its internal ID
I think plib has a method to get the entity from said ID
ProtocolLib has an utility to get the bukkit entity out of the ID
but it should have a convenience method for it already in the packet container
you want it to glow, right? maybe stick to some other visual effect, like maybe make a text display with a fancy shiny texture ride it or something
it doesn't have to be enchantment glow specifically, right
no
it's always enchantment glow
I mean, itβs really not that hard
Granted I have more experience with packet events soooo yeah
is ProtocolLib still being actively maintained
haven't seen dmulloy or whatever was his name in ages
PacketEvents is allegedly a more lightweight wrapper around the packets which makes it faster
if (packet.getType() == PacketType.Play.Server.ENTITY_METADATA) {
Entity entity = packet.getEntityModifier(event).read(0);
if (entity instanceof Item item) {
}
}```
i have no idea what to do from here
I've checked the source of both and they don't seem all that different though
look at the minecraft wiki to check which datawatcher you have to modify
then modify it like you were trying earlier
how do i get index 8
this time it shouldn't fail as you are modifying the existing one instead of trying to create it from scratch
List<WrappedWatchableObject> watchableObjects = packet.getWatchableCollectionModifier().read(0);
watchableObjects.get(8)```?
atp just use nms
already got protocollib in my project for other stuff so why not
protocol becomes way friendlier when you don't need to go through 1000 undocumented wrapper classes
all you need protocollib is for intercepting packets (you can do it through netty too but its ass)
isn't it getDataWatcherModifier
from there just getHandle on the packet wrapper to get the nms packet and then its good old simple nms from there
The main thing is the packet wrappers
Rather than dealing with figuring out which index to read/write
getWatchableCollectionModifier seems to be the one used for 1.19.3-
Protocollib used to have wrappers but they arenβt maintained anymore
wait so players 1.19.4- that would get kicked if i use getDataWatcherModifier
1.19.3-*
I mean, ProtocolLib doesn't handle that, ViaVersion does
Use code for the version your server actually runs
if you mean people who run your plugin on 1.19.3 then I don't have the answer to that
And hope viaversion handles it
you'd have to try
it handles most things, except when it doesn't
Better than viabackwards at least
Though to be fair that was always going to be a losing battle
aren't they all made by the same dude
i've had trouble getting itemstack components working across 1.21 and 1.20, because apparently via only translates those for system messages and not player chat messages
Yes but you try replicating new features on old versions
so in my chat formatter plugin i send everything as system messages π€‘
if i do
packet.getDataWatcherModifier().read(0).setObject(8, ...); do i have to do packet.getDataWatcherModifier().write(0, ...)
or does it reflect automatically
Oh you want to build below y=0 but you are playing on 1.16? Thatβs too bad
I think you do want to write
i'll try both
the minecraft wiki did such a half-assed job at transitioning the wiki.vg content
wish it was more easily discoverable
can't complain about free things ig
com.comphenix.protocol.reflect.FieldAccessException: Field index 0 is out of bounds for length 0
getDataWatcherModifier doesnt work
declaration: package: com.comphenix.protocol.events, class: AbstractStructure
AbstractStructure being a super class of PacketContainer
where is that
still, what I said before applies
you only need to care about your code running in latest, the rest is for ViaVersion to handle
i'm supposed to use WrappedDataValue
which is why i was getting kicked in the first place
var dataWatcher = packet.getDataWatcherModifier().getItemStack(8);
is how you're supposed to read the datawatcher
data watchers are 1.19.3-
that is talking about getWatchableCollectionModifier which returns WrappedWatchableObject, not getDatawatcherMdoifier which returns WrappedDataWatcher
after getting the list of data values, how do ig et index 8
because in the list it gives me index 8 is index 0
I mean, just print the thing and see what it has inside tbh
just loop through the list and check whether the id is 8
k
I am curious whether this works tho
List<WrappedDataValue> dataValues = packet.getDataValueCollectionModifier().read(0);
dataValues.stream()
.filter(dataValue -> dataValue.getIndex() == 8)
.findFirst()
.ifPresent(dataValue -> dataValue.setValue(changeItem(player, item.getItemStack())));
packet.getDataValueCollectionModifier().write(0, dataValues);```
this works π₯³
i'm like 99% sure this isn't the best way but idec anymore
I'll give it a try myself later when I finish setting up IJ
k
if I come up with a better way I'll ping u
π
i think i figured it out
the reason playernpc sucks balls
you're not provided with all the files cuz the rest are proprietary and you get them only from importing a version of the api you cant decompile π
testing my theory real quick...
yep π
i am now missing NOTHING
but 1 import
Yeah
ok new question
why am i missing one import
π
import dev.sergiferry.playernpc.command.NPCGlobalCommand;
is the only one missing...
nvm also missing a bunch of symbols
its possible this plugin was originally not built with 1.19.4 spigot even though it works on 1.19.4
Getting the following bug with my mob targeting with creative mode players, any help ?
what does your goal look like
Actually I changed it just now but here it is
Removed targeting for creative (I think)
package io.github.derec4.dragonforgekingdoms.entity;
import io.github.derec4.dragonforgekingdoms.kingdom.KingdomManager;
import net.minecraft.world.entity.ai.goal.target.TargetGoal;
import net.minecraft.world.entity.player.Player;
import java.util.UUID;
public class TargetNonFactionPlayersGoal extends TargetGoal {
private final CustomWitherSkeleton customWitherSkeleton;
private final UUID kingdomID;
private final KingdomManager kingdomManager;
public TargetNonFactionPlayersGoal(CustomWitherSkeleton customWitherSkeleton, UUID kingdomID) {
super(customWitherSkeleton, false); System.out.println("TEMPTEMPTEMP" + kingdomID);
this.customWitherSkeleton = customWitherSkeleton;
this.kingdomID = kingdomID;
this.kingdomManager = KingdomManager.getInstance();
}
@Override
public boolean canUse() {
for (Player player : this.customWitherSkeleton.level().players()) {
UUID playerKingdomID = kingdomManager.getPlayerKingdom(player.getUUID()).getID();
// CHANGE LATER TEMP TEMP TEMP
if (!player.isCreative() && !player.isSpectator() && kingdomID.equals(playerKingdomID)) {
this.customWitherSkeleton.setTarget(player);
return true;
}
}
return false;
}
}
Is there any way to optimize this?
should i be using the Bukkit Player
If the kingdom player can be offline, OfflinePlayer has to be used or you be seeing errors due to the player not being online
ah it's a target selector for custom entity tho so the player would be online i believe
Wynncraft? EpicBosses with castles?
?paste I also recommend pasting code there due to the length can take a huge chunk of the chat but that is good that your code is really small
the EntityInsentient#setTarget method without the TargetReason parameter defaults to TargetReason.UNKNOWN, which is well, UNKNOWN
use the setTarget override which has a TargetReason parameter and use CLOSEST_ENTITY or whatever fits
Is targetreason an enum?
now, why it isn't happy with reason unknown I can't know, somewhere along the line that seems to cause a null somewhere but the stack trace doesn't specify
just setting the reason may just fix it
@Override
public boolean canUse() {
for (Player player : this.customWitherSkeleton.level().players()) {
UUID playerKingdomID = kingdomManager.getPlayerKingdom(player.getUUID()).getID();
// CHANGE LATER TEMP TEMP TEMP
if (!player.isCreative() && !player.isSpectator() && kingdomID.equals(playerKingdomID)) {
this.customWitherSkeleton.setTarget(player, EntityTargetEvent.TargetReason.CLOSEST_PLAYER, false);
return true;
}
}
return false;
}
Like this?
is target selection with
this.customWitherSkeleton.level().players()
Optimal or is there a better way, looks like it'll have to sweep through all possible players or something
oh
π i thought that meant fire as in minecraft fire
ignoring that
does the player for each go for every single player, or within the Entity's range
the issue might not have been the target reason tbh, but it is good to have it
now that I am looking at it, it is just saying null was passed to EntityInsentient#setTarget somewhere down the line, most likely in your target goal
can you reliably reproduce that issue?
if so, put a log in canUse to check whether customWitherSkeleton is null
also, what version is this for?
I don't know, but you can check other target goals which use TargetReason.CLOSEST_PLAYER to check what they do
yeah, initially it happened every tick i was in creative. After I added the checks for in creative and spectator, it happens briefly when i change to survival and stops
well this seems to be the problematic line this.customWitherSkeleton.setTarget(player);
I'm wondering how to make it target the appropriate player in range, that fits the conditions where the ID matches the ID without having it iterate through all players()
Setting to
this.customWitherSkeleton.setTarget(player, EntityTargetEvent.TargetReason.CLOSEST_PLAYER, false);
Seems to have fixed the log error btw
well now I am more confused than you are about that, but glad it got fixed lol
I'd just check whatever the Enderman goal does and copy that
is there anywhere i can find that goal implementation
are you using spigot's specialsource to access nms?
if that's the case, you can just look for it in your IDE, it should be indexed (you can look for classes with Ctrl + N in IntelliJ)
the Enderman goal is called EndermanLookForPlayerGoal
I don't know how actually
I just added the decompiled as a dependency through buildtools
you are
you mean like, the jar?
I mean, if you aren't using mojang mappings, then it is just matter of looking for the class
I don't know what the class is named in the obfuscated version, so you'll have to go through the inheritance tree to find it
if you aren't sure whether you are, just show me your pom
Oh here's my build.gradle
Pastebin.com is the number one paste tool since 2002. Pastebin is a website where you can store text online for a set period of time.
oh you're using gradle, but you are using the remapper gradle plugin so it should be the case
then just hit Ctrl + N in your IDE and look for this class: EndermanLookForPlayerGoal
does anyone know how i can figure out the "texture id" of a minecraft cape?
like
VANILLA("Vanilla", "f9a76537647989f9a0b6d001e320dac591c359e9e61a31f4ce11c88f207f0ad4", 0),
MINECON_2011("MineCon 2011", "953cac8b779fe41383e675ee2b86071a71658f2180f56fbce8aa315ea70e2ed6", 1),
MINECON_2012("MineCon 2012", "a2e8d97ec79100e90a75d369d1b3ba81273c4f82bc1b737e934eed4a854be1b6", 1),
MINECON_2013("MineCon 2013", "153b1a0dfcbae953cdeb6f2c2bf6bf79943239b1372780da44bcbb29273131da", 1),
MINECON_2015("MineCon 2015", "b0cc08840700447322d953a02b965f1d65a13a603bf64b17c803c21446fe1635", 1),
MINECON_2016("MineCon 2016", "e7dfea16dc83c97df01a12fabbd1216359c0cd0ea42f9999b6e97c584963e980", 1),
this kind of texture id
im missing a bunch of ids for the newer capes
They're probably listed on a wiki somewhere
At the very least you'd need to find a player who has the cape you want
@sullen marlin Can we talk privately? I need help with something not related to this
md_5
ive looked on all wikis, all skin websites, and all over google
no results with texture id π
and i know for sure i will not be able to find players with some of these capes
maybe it's in the minecraft files...
should i be using maven?
I see a lot of context related to maven a lot more than gradle
or kotlin whatever
i get confused by all the different compilre types now
whatever you're more comfortable with really
skinmc lists the official capes and profiles which have the capes
but the texture ids?
the ids in the urls are too short to be the full texture ids
oh nvm
u were responding to the other message
no but like
wouldn't i have to get in-game with that player in order to get my minecraft client to load their cape?
that could maybe let me see what the texture id is, if its downloaded somewhere
I mean, if you just want the texture id, you can just hit the mojang API for it
but i dont think its happening for this many capes
interesting, how do you do that?
look for a profile that has the cape in skinmc first, then get their UUID, and then hit the endpoint that sends the texture information
all the endpoints should be in the minecraft wiki
ok, how do i "hit it"? command line type stuff?
just type it in the address bar of your browser
oh π
seems to be encoded...?
ewogICJ0aW1lc3RhbXAiIDogMTc0MjYyMjQ5NjU1OCwKICAicHJvZmlsZUlkIiA6ICI3OGRmNmMyZTBhZjc0OTQzOWI4NjYxNjRiMmFmZmNiZCIsCiAgInByb2ZpbGVOYW1lIiA6ICJMYXhXYXJyaW9yMSIsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS9kNWM0ZWU1Y2UyMGFlZDllMzNlODY2YzY2Y2FhMzcxNzg2MDYyMzRiMzcyMTA4NGJmMDFkMTMzMjBmYjJlYjNmIiwKICAgICAgIm1ldGFkYXRhIiA6IHsKICAgICAgICAibW9kZWwiIDogInNsaW0iCiAgICAgIH0KICAgIH0sCiAgICAiQ0FQRSIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTUzY2FjOGI3NzlmZTQxMzgzZTY3NWVlMmI4NjA3MWE3MTY1OGYyMTgwZjU2ZmJjZThhYTMxNWVhNzBlMmVkNiIKICAgIH0KICB9Cn0
{
"timestamp" : 1742622496558,
"profileId" : "78df6c2e0af749439b866164b2affcbd",
"profileName" : "LaxWarrior1",
"textures" : {
"SKIN" : {
"url" : "http://textures.minecraft.net/texture/d5c4ee5ce20aed9e33e866c66caa37178606234b3721084bf01d13320fb2eb3f",
"metadata" : {
"model" : "slim"
}
},
"CAPE" : {
"url" : "http://textures.minecraft.net/texture/953cac8b779fe41383e675ee2b86071a71658f2180f56fbce8aa315ea70e2ed6"
}
}
}```
it is just base64 yeah
ah ok, i just need a base 64 converter?
yep, you can just use an online one
yep and then you can see the cape ID there in that url
ok nice π
too bad SkinMC doesn't have an API, could've made it into a single nice script
that has some IDs
https://github.com/TerminalMC/NoCapes/blob/60375983ffa3866bd66151dcfffd223ff68081f5/common/src/main/resources/assets/nocapes/lang/en_us.json#L31 heres some more
not even sure if those are all real
but if they are its the most comprehensive list I can find
it is not able to detect snare instrument for noteblock why
detect how
i asked it to set block to note block it worked for bass but giving error snare
whats the error
java.lang.IllegalArgumentException: No enum constant org.bukkit.Instrument.SNARE
ohk
is harp changed to piano?
cuz in the dock it does not say the minecraft name
it does not tell the minecraft name it only shows the name in spigot
Ok, why is Connection.java absent here
how does one get javadocs and sources jar when using mojmap spigot
I ran BuildTools with --generate-source and --generate-docs but didn't seem to do anything (as in, the spigot-api dependency in my local maven repository has no sources or javadoc jar in it)
yeah run with those flags
I ran those flags (well, more specifically, the ones I mentioned in my comment, those tooltips are wrong), yet I didn't get a javadoc jar
actually, I may have gotten one, but it is with the extension .lastUpdated so my IDE can't see it
}
How can I fix this? https://paste.md-5.net/agalakafej.java
unrelated but don't use reload
if you want to do fast prototyping, setup hotreloading properly
No, hoppers not acting properly
there's no builtin way
anyhow, what is the issue supposed to be, all I see is a hopper transfering some items
Ig I'll just build spigot and generate sources and docs myself
From ChatGPTI put 2 stacks of seeds. One stack goes to the bottom chest while the another stack goes in the top chest. How can I fix this?
You can see this on the video
I mean, are you doing something in a plugin for that to happen?
I would be pretty surprised if that was actually an issue
Source code above
wait is that the expected behavior? I don't remember how hoppers work anymore lol
No, its suppose to fill the bottom ones first
Should i do smth else to get all the classes?
why is it supposed to fill the bottom one first? the hopper connection is pointing into the top chest?
low key confused, but if you think there is a bug, isolate it then open a bug report
Its pointing to the chest, yes. But try to start a creative world with no plugins and copy the same setup and you see what I talking about
so what you're saying is that it doesn't follow vanilla logic, if that's the case then you should definitely open an issue in the JIRA about it
however it'd be nice if you could get a video in a singleplayer world confirming it
It only affects my hoppers so I guess I can show on my server. One second
your hoppers as in ones impacted by the plugin?
it might be because your cancelling the event, causing the hoppers to try and route via a different path
so it works properly?
no they're showing how it works with normal hoppers
Ohh
if what md said is true, then that means another inventory move event is being called and that makes your code run again for the wrong chest
what I would do is either not cancel the event so it doesn't try to re-route, or if you do need to cancel then make sure to tag the hopper in some way to know where it should be transferring
I don't understand how cancelling it makes it go for another chest tho, could be considered a bug
I tried doing it without cancelling but if I want to transfer 8 items as shown and invs are readonly, I got to cancel it followed by a timer
If you know what I can do with the invs without canceling, please tell me
couldn't you just set the ItemStack in the event
I can set it, you correct but that is only for the item being transferred, I tried
yes, then remove the equivalent in the other inventory
setting the item apparently makes the original item to not be moved akin to cancelling it so it'd theorically be the same
Remember what I said, the invs are readonly
I mean, you seem to be removing the items just fine in your code, so not sure what that means
the only difference here is that instead of cancelling, you'd just be setting the item
Because I have a task/timer. That is why the cancel is required. It locks the invs until the event is complete. So if I add a STICK for a example to sourInv, it will not show up
well, I don't quite understand what you mean by that honestly
but anyhow, another idea is to tag the hopper when you cancel the inventory move, then cancel the inventory search event if the inventory holder is the tagged hopper
that way, it won't try to re-route the items
ok i was thinking of mojang mappings π
or if the inventory search event triggers for every item transferred, you could just move your logic there even
its just called networkmanager in spigot
I was going to mention that, but I forgot to respond since I got caught in the above lol
During the event, the inventories are in a temporary read-only state. isEmpty() may not be accurate if the event is still processing. -ChatGPT
that isn't true at all
Typical ChatGPT L
Is it in the docs somewhere? I cannot load any other sites, computer lags currently, I surprised that its smooth on MineCraft
if I am to be charitable, it is probably referencing to what happens in the InventoryClickEvent as it happens within a modification of an item, however I don't believe that is the case for the InventoryMoveItemEvent as it happens before the modification itself
then again, it's chatgpt so it may just be spewing bs
Well, I don't know. I just annoyed by #general so I trying to make something useful. Put my energy somewhere useful then evil
I mean, using chatgpt is fine-ish, as long as you don't get too caught up in what it says
the thing is that you actually got to test the behavior and see it for yourself rather than trust whatever it says is correct
I have tested it and it was readonly
well, show us what your test code was
I don't have the code currently because I edited the code. But that is what I saw. I just have the code in the timer now
well, try it again then
@EventHandler
public void onHopperTransfer(InventoryMoveItemEvent event) {
var item = event.getItem();
item.setAmount(8);
event.setItem(item); // not sure whether this is necessary, the event claims it is mutable
event.getDestination().removeItem(item);
}
this should technically do what you are trying to do, all your special hopper logic aside
if that works, then just add your special hopper checking logic on top
I will test that in a min, let me start this convertsion
That works but items are disappearing
you mean, more items are being removed than it should?
Yes
if that's the case, try commenting out the last line, it might just be the case that the transfer is happening successfully despite what the javadocs say
Now items is adding uncontrollablely
well that's annoying
True
oh wait I am dumb
you should've removed from the source inventory, not the destination lol
That is what I did but its still the same
hm, no idea then
So ChatGPT was false, I always trusted that but it must not be up to date with the docs. I will know this next time, that is why I ask here most of the time. I closer to what I trying to do
Just added the amount from the timer and its working as expected, thanks
Guys i am trying to make plugin when the player i gave ability like flight could click like key G and he could fly up and down by looking
can somebody help me with me plugin
you can only check actual inputs, for example like move forward etc using the PlayerInputEvent
how do i downlod a plugin from Eclipse ?
you are missing one line in your pom
it clicked while I was asleep last night
<packaging>jar</packaging>
I already did it, thanks anyway
ok
nvm
i didnt
[11:16:15 ERROR]: Could not load 'plugins/seedworld-0.0.1-SNAPSHOT.jar' in folder 'plugins'
org.bukkit.plugin.InvalidPluginException: Cannot find main class `com.example.seedworld'
at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:70) ~[patched_1.16.1.jar:git-Paper-138]
at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:137) ~[patched_1.16.1.jar:git-Paper-138]
at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.java:397) ~[patched_1.16.1.jar:git-Paper-138]
at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager.java:305) ~[patched_1.16.1.jar:git-Paper-138]
at org.bukkit.craftbukkit.v1_16_R1.CraftServer.loadPlugins(CraftServer.java:388) ~[patched_1.16.1.jar:git-Paper-138]
at net.minecraft.server.v1_16_R1.DedicatedServer.init(DedicatedServer.java:208) ~[patched_1.16.1.jar:git-Paper-138]
at net.minecraft.server.v1_16_R1.MinecraftServer.v(MinecraftServer.java:941) ~[patched_1.16.1.jar:git-Paper-138]
at net.minecraft.server.v1_16_R1.MinecraftServer.lambda$a$0(MinecraftServer.java:177) ~[patched_1.16.1.jar:git-Paper-138]
at java.lang.Thread.run(Thread.java:750) [?:1.8.0_432]
Caused by: java.lang.ClassNotFoundException: com.example.seedworld
at java.net.URLClassLoader.findClass(URLClassLoader.java:387) ~[?:1.8.0_432]
at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:171) ~[patched_1.16.1.jar:git-Paper-138]
at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:100) ~[patched_1.16.1.jar:git-Paper-138]
at java.lang.ClassLoader.loadClass(ClassLoader.java:418) ~[?:1.8.0_432]
at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[?:1.8.0_432]
at java.lang.Class.forName0(Native Method) ~[?:1.8.0_432]
at java.lang.Class.forName(Class.java:348) ~[?:1.8.0_432]
at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:68) ~[patched_1.16.1.jar:git-Paper-138]
... 8 more
well, your main class does not exist
your plugin.yml is missing the main: com.dragonboy.seedworld.SeedWorld
you originally had it at com.example but I had you change it when you made a new plugin
it might be com.dragonboy.seedworld.SeedWorldPlugin. I forget the name of your main class
When i try to join with IP Bungeecord proxy works, But when i try to join using Domain i get this error, IP and port is fine in cloudflare. Where's the issue?
seems you did not setup your bungee properly
there is a section at tehbottom of the bungee page about setup/securing your installation
?bungee
I did, It's working with normal IP
did you enable ip forwarding
....
did
have to use forced hosts if using domains
you didn't set it up properly the documentation goes over everything
nope none
jus do ?cc list
[11:32:07 ERROR]: Could not load 'plugins/seedworld-0.0.1-SNAPSHOT.jar' in folder 'plugins'
org.bukkit.plugin.InvalidPluginException: Cannot find main class `com.dragonboy.seedworld.SeedWorld'
at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:70) ~[patched_1.16.1.jar:git-Paper-138]
at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:137) ~[patched_1.16.1.jar:git-Paper-138]
at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.java:397) ~[patched_1.16.1.jar:git-Paper-138]
at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager.java:305) ~[patched_1.16.1.jar:git-Paper-138]
at org.bukkit.craftbukkit.v1_16_R1.CraftServer.loadPlugins(CraftServer.java:388) ~[patched_1.16.1.jar:git-Paper-138]
at net.minecraft.server.v1_16_R1.DedicatedServer.init(DedicatedServer.java:208) ~[patched_1.16.1.jar:git-Paper-138]
at net.minecraft.server.v1_16_R1.MinecraftServer.v(MinecraftServer.java:941) ~[patched_1.16.1.jar:git-Paper-138]
at net.minecraft.server.v1_16_R1.MinecraftServer.lambda$a$0(MinecraftServer.java:177) ~[patched_1.16.1.jar:git-Paper-138]
at java.lang.Thread.run(Thread.java:750) [?:1.8.0_432]
Caused by: java.lang.ClassNotFoundException: com.dragonboy.seedworld.SeedWorld
at java.net.URLClassLoader.findClass(URLClassLoader.java:387) ~[?:1.8.0_432]
at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:171) ~[patched_1.16.1.jar:git-Paper-138]
at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:100) ~[patched_1.16.1.jar:git-Paper-138]
at java.lang.ClassLoader.loadClass(ClassLoader.java:418) ~[?:1.8.0_432]
at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[?:1.8.0_432]
at java.lang.Class.forName0(Native Method) ~[?:1.8.0_432]
at java.lang.Class.forName(Class.java:348) ~[?:1.8.0_432]
at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:68) ~[patched_1.16.1.jar:git-Paper-138]
... 8 more
?cc list
listeners:
- bind_local_address: true
force_default_server: true
forced_hosts:
pvp.md-5.net: pvp
host: 0.0.0.0:25570
max_players: 2025
motd: '&1Another Bungee server'
ping_passthrough: false
priorities:
- authlobby
- lobby
proxy_protocol: false
query_enabled: false
query_port: 25570
tab_list: GLOBAL_PING
tab_size: 60
reject_transfers: false
network_compression_threshold: 256
permissions:
admin:
- bungeecord.command.alert
- bungeecord.command.end
- bungeecord.command.ip
- bungeecord.command.reload
- bungeecord.command.kick
- bungeecord.command.send
- bungeecord.command.find
- bungeecord.command.server
- bungeecord.command.list
default:
- bungeecord.command.list
prevent_proxy_connections: false
server_connect_timeout: 5000```
Is that part is ok?
I did say it may be com.dragonboy.seedworld.SeedWorldPlugin
look and see what the actual name of your main class is
the path to main: is the package plus the name of your main class.
case sensitive
.
Compare different mappings with this website: https://mappings.dev/
finaly [11:38:36 INFO]: Plugins (2): LuckPerms, SeedWorldPlugin
nice
tysm
its a learing curve. it gets easier the more you do it
see where it has forced hosts?
the first part is the domain you want to setup, the value points to the name of the server you want it to be for that is in the config
as we can see, you have not set that up properly thus it not working for domains
My domain name is goldenhorizon.fun and i want to go in lobby server
the wiki for bungeecord goes over this
what will be the config?
Couldn't fix it, Can you just fix that one line making issue please? Finding solution for a long time ππ»
Small help please ππ»
Pls? @wet breach
That means what
The server has no concept of keybinds.
You can not check if a player pressed some key, that information is never sent to the server.
Inputs are, as in "player pressed jump button" or "player pressed walk forward button".
Forward, backward, left, right, swap hands, jump, sneak, left click, right click
I think thatβs all of them
So its impossible
Correct
