#help-development
1 messages · Page 1303 of 1
that sounds like the job for a checked exception, in which case I'd go towards a custom FullPageException like Emily suggested but a Result enum or whatever is also a valid choice
an exception being thrown in that case means the caller failed to ensure the fullness of the page, and you throwing it is a more extreme response communicating that
it's okay to throw exceptions, people don't like it because a) unchecked exceptions are overused for custom exceptions, so it's easy to miss if you don't rtfm, and b) it "makes the code ugly"
yeah but it should not be thrown
if i make code im trying to make code that will never trigger that exception
but it isn't your code that triggered the exception
it's the user's
this is a meaningful exception
you were saying earlier if they don't check isFull then that'd trigger this hypothetical exception, this is somthing you can't control so you have to respond to the consumer of your method in some way
I just mean the user of the Page class
who is user
and "your code" here is the Page code
whoever uses the Page class
whoever uses this piece of code, be it you or someone else
you
im using it
then you are the user of the page class
okay
I mean internally you could just call isFull on any operations related to adding things to the page
yeah but then it'd fail silently when it is full, which isn't a good design
ill just throw the illegalstate thing
Which is why you'd throw an exception
Is that the point you guys are trying to make?
yes
ah
ok im throwing this thing
it all comes down to unchecked vs checked exceptions imo, you should give a read to some java guide about that
okayy
public class Page {
private final List<Article> content;
public Page(List<Article> content) {
this.content = content;
}
public boolean isFull() {
return content.size() >= 27;
}
public boolean hasIndex(int index) {
return index>=0 && index<content.size();
}
public void addArticle(Article article) {
if (isFull()) {
throw new IllegalStateException("The page is full");
}
content.add(article);
}
public void removeArticle(int index) {
content.remove(index);
}
public void setArticle(int index, Article article) {
if (!hasIndex(index)) {
throw new IndexOutOfBoundsException("Index of " + index + " is out of bound");
}
content.set(index, article);
}
}
``` what do you think
no
In the game when i do / to type a command for my plugin it shows up as plugin:command, even if i use alias because the alias is the same as the plugin name. what identifies that the plugin name is that? which i could change and it not affect the jar
in the plugin.yml
there is spot to put the name of the plugin. This is what is used and not what you physically name the jar
Thanks
i love physically naming and putting pottery jars on my server
@torn shuttle funny situation
Got a digi sms saying my address is now available for their service
2 mins later my meo internet died
Hasn't been back since
It's been 2 hours
cursed ahead of time with bad internet
that's what you get
Fucking blackhole
I haven't switched out of digi yet despite the 60h of outage I've had in 1 week
just because the other dudes all want 2 year contracts and I might move in january
@tepid coral check dms
in context of happy ghast, how can you check if a player dismounting is the player that is "driving" the happy ghast? Does vehicle class have index slots for each possible seat or something?
can anyone help?
hey guys, question, is it possible to play MC offline on a server, bypassing the auth server to develop offline?
change online mode to false in server.properties I think
dude, i'm actually tweaking, i kept changing it in the config files
i just spent like 2 hours on 3rd party clients
booted right up
you could try ghast.getPassengers().indexOf(player) == 0 but i'm not sure if the dismounting player is already removed from the list by the time the event fires
Nope
minecraft is pay to play sadly..
offline mode is a lie spread by the global elites to give us peasants false guidance
real, my ISP actually charged me one of my lungs to port forward
🙁
can anyone confirm this
Try and see?
can you set a repair cost after 1.21? i want my items to always cost 6 levels and setRepairCost is deprecated
Read the deprecation note
what do you mean by note
'setRepairCost(int)' is deprecated since version 1.21 and marked for removal
that's the error i get, where can i find the note?
and if you want the note in Intellij open the maven/gradle tab and click the download button
and download sources and documentation
do TaskTimers last through a server restart?
No
why cant i put "\n\n"
bc its not a vanilla thing
oh idk i just made it up tbh
put where?
as a string
i do
i mean
player.sendMessage("something**\n\n**something");
will just do 1
wait that works?
is that a question? because it should work fine and be two newlines
you can put as many newlines in any string as you want, whether the thing trying to render that text supports it nicely is a different question
I just send multiple messages haha I didnt know the chat window supported this format
what d oyou mean
maybe you need player.sendMessage("something\n§r\nsomething");
I meant I just do player.sendMessage("text"); player.sendMessage(""); etc
weird
afaik the string blocks should work too, but i am not completely sure
tho that raises the question if it would, again, not account for thr second new line
how to get channel using NMS with spigot mappings on 1.21.8?
?xy
Well i dont know how to make player injection anymore because i cant get channel normaly anymore
I tryed getting it using PlayerConnection but i just couldnt find it
There are tools for this like packet events and protocollib
Otherwise I don’t remember how you access it now :)
The joys of NMS
Dos anyone have ideas on what I can add to my permissions plugin? So far it includes all the base elements like groups, per-player permissions, group prefixes, negative permissions, and GUI's for group and player editing. Yes it does integrate with Vault as well. I'm mainly looking for the most commonly used features in permissions plugins, but any suggestions are appreciated!
Web editor
This is a good idea, but it definitely last on my list as it will most definitely be the MOST complicated compared to other additions
question, how would i go about detecting when a player puts down their shield? i already have this for a player putting their shield up
I think the easiest way would just be a runnable that checks Player#isBlocking every tick
Did this for test purposes few month ago
private void injectListener(Player player) {
final CraftPlayer craftPlayer = (CraftPlayer) player;
final ServerGamePacketListenerImpl packetListener = craftPlayer.getHandle().connection;
logger.info("Retrieve the connection");
final Connection connection;
try {
final Field connectionField = ServerCommonPacketListenerImpl.class.getDeclaredField("e"); //connection
connectionField.setAccessible(true);
connection = (Connection) connectionField.get(packetListener);
} catch (ReflectiveOperationException e) {
return;
}
logger.info("Extract the channel");
final Channel channel;
try {
final Field channelField = Connection.class.getDeclaredField("n"); // channel
channelField.setAccessible(true);
channel = (Channel) channelField.get(connection);
} catch (ReflectiveOperationException e) {
return;
}
logger.info("Inject " + player.getName());
channel.pipeline().addBefore("packet_handler", "custom_packet_reader", new CustomPacketReader(logger));
}
private static class CustomPacketReader extends ChannelDuplexHandler {
// Implement it yourself
}
Ah right they made it private
Yeah
hey so im trying to force the player to stop putting up their shield when this method gets triggered, how can i do that?
public void guardBreak(Player player) {
player.sendTitle("GUARD BREAK!", "", 10, 40, 20);
ItemStack shield = player.getInventory().getItemInOffHand();
if (ItemSystem.getItemTypeFromItemStack(shield) == ItemType.SHIELD) {
player.getInventory().setItemInMainHand(new ItemStack(Material.AIR));
Bukkit.getScheduler().runTaskLater(nmlShields, () -> {
player.getInventory().setItemInOffHand(shield);
}, 1L);
}
player.setCooldown(Material.SHIELD, 40);
damageCooldowns.put(player.getUniqueId(), damageCooldowns.get(player.getUniqueId()) + 40);
}```
I am using
player.getWorld().strikeLightning(player.getLocation());
(I have also tried World#strikeLightningEffect())
to, well, strike lightning. The only problem is absolutely nothing happens. No fire on the ground, no damage to the player when I use .strikeLightning, obviously no lightning visuals, no sound, etc. I have debugged to the moon and I'm absolutely sure that the code reaches this point.
~~The only possible culprit I can think of would be that I set players weather using things like
player.setPlayerWeather(WeatherType.DOWNFALL);
```~~
EDIT: Just tested after resetting players weather and this does not fix it.
Does anyone know how to fix this?
import org.bukkit.block.data.Attachable;hmm, why isnt it found in 1.21
1.21.0?
is this the only plugin you have on the server
no
try in a clean server just to be sure
if it works there then you at least know it is just one of the plugins messing with your logic
my plugin depends on other plugins tho lol
like luckperms, placeholder api, multiverse
just make a simple test plugin which strikes lightning
- Why 1.21 lol, you're 8 versions behind
- https://helpch.at/docs/1.21/org/bukkit/block/data/Attachable.html It definitely existed then so your environment might just be messed up
make sure you don't have any transitive dependencies overriding your declared spigot version
support older server versions
hm, this import worked instead import org.bukkit.material.Attachable;
that is the wrong Attachable
just look at the dependency tree and see if any of your dependencies isn't accidentally pulling an older spigot version
can someone help me , clearlag plugin always clear my minecart i want to disable it but idk how to
that is a question for #help-server. It'd also be helpful to know which clearlag plugin you're using exactly, there's tons of them
oh ok
thanks btw
Hello, I am a PHP Developer, I have developed numerous minecraft bedrock factions servers. I got bored and decided to learn how to make spigot plugins. For my java factions core, i want to know how to make custom enchants?
In bedrock, you can essentially just extend the Enchant class and make a new enchant? Anyone got any github repo or code that shows how I can make enchants, alot of the ones online are super complicated and hard to look at.
sadly on the spigot side it is quite a bit more complex than that since it involves modifying registries, which there's no API for. Here's a guide for it if you're up to it: https://www.spigotmc.org/threads/1-21-4-register-custom-enchantments-with-nms.651347/
neat. i decided to use Directional instead
wow, i didnt realize how more advanced bedrock softwares are then java. it is so much easier to do stuff there.
the easiest thing to do is just make your own using nbt and lore
108 => new IronTouch("Iron Touch", Rarity::COMMON, ItemFlags::PICKAXE, 0x0, 5),
foreach($list as $id => $enchant) {
EnchantmentIdMap::getInstance()->register($id, $enchant);
}```
all u have to do on pocketmine
😭
also I did this and it worked so idk
public function getSlotsFilled(Item $item) : int {
$enchants = 0;
foreach($item->getEnchantments() as $enchantment) {
$enchantment = $enchantment->getType();
if ($enchantment instanceof raveEnchant) {
$enchants++;
}
}
return $enchants;
}```
only downside is that php is a trashy language so the optimization isnt as good as java.
👍
thats what im going to do
Well on pocketmine checking for every single enchant nbt would be kinda bad for performance? Is the penalties for doing this insignificant?
maybe i cache nbt -> enchant class
and then foreach all the enchant nbts and then enchant->trigger ??
you don't really deal with NBT on the bukkit side of things
while doing the lore thing is easier, it often ends up more complex if you want to support anvil as well as just showing it inside an enchanting table
if you still want to do it this way, then you'll want to use PDC to track the enchantment on items
then one of the plugins in your server is cancelling an event or something that is making it not work
You dont use NBTs??
NBT is considered too flaky so it isn't exposed in the API, but you can pretty much set any value via API
the closest thing to dealing with NBT is PDC, which is an abstraction over it but only for custom values
NBTs are such a big thing on the software i use
ye custom nbts
So essentially i check the items lore for enchants?
if that's the way you want to go about it, yes
what is the performance penalties for doing this method?
there shouldn't be any performance penalties for something that simple
is it igsinificant?
bro on pocketmine that would be aids
50 players checking, 5 items each scanning for lore.
java is async on default tho right?
this feels so weird, i dont have to worry about making my code overly optimized
it is not asynchronous, no. But the way it works is quite different since you wouldn't have to constantly scan the lore or anything like that, you'd just add it to the lore when giving the item stack to the player and then check in the interact event whether they have the given enchant and apply your enchantment effect
Would I check if the item has the enchant before or after calling the enchant function?
you can make use of that if you parse it with ChatColor.translateAlternateColorCodes('&', message), you can make an utility function like:
public static String color(String message) {
return ChatColor.translateAlternateColorCodes('&', message);
}
// Usage
somePlayer.sendMessage(color("&e&lThis is a bold yellow message"));
like for example java private void handleLifesteal(Player attacker, Player victim, ItemStack weapon, double damage) { if (!CustomEnchantmentManager.hasEnchant(weapon, LifestealEnchant.class)) return;
bet ty
you would call this method inside the damage event given it is a lifesteal enchantment
im asking if i should check if the item has the enchant before or after calling the enchant event
like uh
I mean, the item should already have the enchantment in the lore if that is what you mean
I was making an example in a paste site but accidentally closed it and lost it all lmao
wow its ok
that said, once that happened I realized I am dumb since we have AI now: https://chatgpt.com/share/689d5a8c-d8c0-8013-bb89-b8c55306ebb3
i got somewhat of a base now
the last example it made is pretty much what I was writing
public static ItemStack addEnchant(ItemStack item, String enchantName, int level) {
CustomEnchant enchant = ENCHANT_REGISTRY.get(enchantName.toLowerCase());
if (enchant == null || item == null) return item;
level = Math.max(1, Math.min(enchant.getMaxLevel(), level));
item = removeEnchant(item, enchantName);
ItemMeta meta = item.getItemMeta();
List<String> lore = meta.hasLore() ? new ArrayList<>(meta.getLore()) : new ArrayList<>();
String colorCode = LEVEL_COLORS[Math.min(level - 1, LEVEL_COLORS.length - 1)];
String enchantLore = ChatColor.translateAlternateColorCodes('&',
colorCode + enchant.getName() + " " + toRoman(level));
lore.add(enchantLore);
meta.setLore(lore);
item.setItemMeta(meta);
return item;
}
public static ItemStack removeEnchant(ItemStack item, String enchantName) {
if (item == null || !item.hasItemMeta() || !item.getItemMeta().hasLore()) {
return item;
}
ItemMeta meta = item.getItemMeta();
List<String> lore = new ArrayList<>(meta.getLore());
lore.removeIf(line -> ChatColor.stripColor(line).trim().startsWith(enchantName));
meta.setLore(lore);
item.setItemMeta(meta);
return item;
}
public static boolean hasEnchant(ItemStack item, String enchantName) {
if (item == null || !item.hasItemMeta() || !item.getItemMeta().hasLore()) {
return false;
}
for (String lore : item.getItemMeta().getLore()) {
if (ChatColor.stripColor(lore).trim().startsWith(enchantName)) {
return true;
}
}
return false;
}```
this is what i kind of made out? most of it is kinda copied from an old repo
im confused why using nbts wouldnt be better tho lol
mostly because you don't get any inter-compatibility with other plugins that way
though you don't get that either by using the lore but alas
i see
@sly topaz last thing, when reducing players heart here? what is the best function to use?
i see there is a damage function
the software i used on bedrock i would just do setHealth(health - 2)
damage will deal actual damage, meaning it will respect any damage reduction modifier (that is, armor, enchantments, etc)
setHealth won't, but you can do that too
Pretty sure damage also initiates hurt animation while sethealth wont
Hi!
I've noticed that org.bukkit.plugin.SimplePluginManager class is marked as @Deprecated(forRemoval = true) but PluginManager isn't. What will SimplePluginManager be replaced by?
It is not
As for Paper you should ask them
My bad, it's marked in Paper
ye
Thank you ❤️
anyone help me pls
my player data was lost when i join a sever by bungecoord
idk how to fix that
enable bungeecord mode on the server
is online mode enabled on the Bungeecord
yes
i can join the sever
but the player data was lost
you can do that with offline mode as well
anyways double check that bungeecord is set to true in the spigot.yml
and that you're connecting through the Bungeecord and not directly to the server
its not lost. The UUID of players is different in offline mode then it is for online mode
what you can do is find your offline mode UUID and then find the corresponding file and update the uuid of said file to be online ones
oh
how to find uuid
are the files in playerdata is uuid?
The uuids should not change when the proxy is setup correctly (ip-forwarding enabled). Bungeecord can pass the ip and online mode data to the server
Which is why I was asking the questions about the setup earlier
Was your server in offline mode before you added the Bungeecord
So all of your save data is in offline mode form?
yes
Do you want to convert them to enable online mode
my sever still offline mod
yeah but the Bungeecord probably isn't
if bungeecord was in offline mode the UUID's will definitely change
ye
my bungee was in online mode
and the sever that lost data is offline
set bungeecord to offline mode
ah ok so I see what happened
oh
you directly connected to the server then, which caused offline UUID to generate
sao i just need to change bunge to offline mode?
yes
instead of connecting through proxy, and then when you connected through proxy it was online UUID. Either way, it is an easy fix to get your data back
since the data was never deleted or removed that is
k
well yeah the tutorials aren't designed for cracked users

silly mistake lol
Is there an event for an item changing its slot in an inventory with something like getOldSlot() and getNewSlot()?
its usually a combination of multiple events
no
check InventoryDragEvent
InventoryDragEvent is only for when they literally drag items around the inventory
InventoryClickEvent should fire for 90% of the slot changes
or if you're not shy to internals, you can hook into the Slot object which will allow you to do things when it changes
How much memory does an empyty class instance take
is it chatgpt prompt?
🤔
In most languages, an “empty” class instance is not actually size-zero — there’s always some overhead for bookkeeping.
If we take Java as the example (since that’s your main language), here’s what happens under a 64-bit HotSpot JVM with compressed OOPs (ordinary object pointers) enabled:
-
Object header:
- Mark word — 8 bytes (stores hash code, GC info, lock state)
- Class pointer — 4 bytes (pointer to class metadata; 8 bytes without compressed OOPs)
-
Padding/alignment: JVM aligns objects to 8-byte boundaries.
-
No instance fields — so only the header + padding remain.
That means:
Mark word : 8 bytes
Class ptr : 4 bytes
Padding : 4 bytes
-----------------------
Total : 16 bytes
So an “empty” object in Java is usually 16 bytes.
On other platforms or with other settings:
- Without compressed OOPs → usually 24 bytes.
- 32-bit JVM → usually 8 or 12 bytes (depends on alignment).
- C++/Rust/Go → an empty struct/class can be 0 bytes at the type level, but the language may still assign 1 byte or more when placed in memory, or add vtable pointers if polymorphism is involved.
If you want, I can show you how to actually measure this with Instrumentation.getObjectSize() in Java to see your exact JVM’s value.
Wow you typed that really fast
sure ,but is it correct?
(a different plugin throws this)
doesn't look like a different plugin throws it
SystemKamer depends on PoliceSystem, however, it does so with lazy loading, so no issue should ever occur
Lazy loading?
what is SystemKamer plugin?
what it does
it's my private plugin
that would make sense why it says it's already enabled
both of these
i mean method onEnable
none. of. your. business.
ah like
it just instantiates classes depending on PoliceSystem
are you trying to create new plugin instance?
show code
Is it used as a dependency?
yes
.
If it's used as a dependency why are you having to call the onEnable() method? Just having a hard time understanding the use case
PoliceSystemPlugin:185
.
show what is below
you don't reference the classes you depend on
I assume the error at 185 is because you're already calling the onEnable() method from another plugin? (As long as im understanding this correctly)
cuz for circular dependency
I am not
.
maybe you forgot to replace new build
a lot of field decl
it's automatic
ai seems to think the problem is within the PoliceSystem plugin 🤷
ai needs to stop doing this
what does bro think about 🤔
obviously it has to think about all the flaws of your prompt so that it can tell you you're doing everything perfectly
if it wasnt' for the fact I'm doing DOTS in unity right now I wouldn't even use ai
I'm just not familiar enough with this entire ecossystem
I men the client always keeps tracks of its own items you know
What does that mean
whats bad about it, out of curiosity
you have 1.5 seconds to figure out what type this is
var temp = Instantiate(prefab);
vs
GameObject temp = Instantiate(prefab);
does the statement "it's bad in C#" imply "it's not bad in Java"?
no, I don't even acknowledge it as a real feature in java
if I don't see it it doesn't exist
its clearly GameObject!
ye but I get what you mean; that is if knowing the exact type is important
unless you've only ever vibecoded or are literally ai I can't imagine how not knowing what type a variable is wouldn't be a massive problem
if you don't know then you must look it up, you can do hardly anything without knowing what the types you're working with are
yea, more meant, let's say you already know the type from a function parameter
then you're maybe invoking List#sublist(begin,end)
and store that in a variable
sure, that can work if you are literaly writing the code right now
it's not going to fly when it's 3 years later and you were using two massive apis
and I do not like you
i mean sure, id just say depending on context, it can be more fine to utilise var as a means to shutdown verbosity
maybe a bit too honest
Im sure you could use fewer
I thought we were expressing our feelings
=;
@lost matrix I need an opinion

when'd you start making emojis out of selfies


var bad
I don't, but ai loves it
Tell the ai not to use it
sounds like you'd have to pay for premium access for that type of treatmnet
And if that doesn’t work idk, learn to write your own code
the reason it annoys me is because I am rewriting it
I just didn't know the dots pipeline for unity so I had it generate one for me
if I wasn't going to touch it anyway it wouldn't bother me
also this pipeline is pretty neat
about 75k trees and shrubs and I'm cruising at 300 fps
nice
also much nicer than godot, unfortunately
Skill issue
I kinda wish
godot has some really nasty overhead for c# internally
there's like a whole thing about it
plus it only has extremely basic gpu instancing for meshes so you've basically invited to do everything from frustum culling to occlusion culling and lod
Yeah but unity did that one bad PR move
which to be clear is not why I stopped using godot, I was actually halfway thorugh writing my own systems for that
no, the reason I gave up on it is because you can't even get a decent profiler for it
I was having to profile through my ide
literally the godot wiki on their profilers
very funny
had a good laugh
🤔 How can I run a task for both active and inactive data, on a single worker node in a schedule, with fault tolerance
sounds like unit testing
throwback to that one time I used weakreferences wrong at work and you'd just take damage (even on creative) every time GC hit
ah yes strong people have memory leaks
means I had memory to leak
strong people rewrite projects from godot to unity to hit 400 fps
💪
If I have a Block in NMS, how do I go about changing the Hardness and Blast Resistance of the block?
bruh
private void ignoreBranch(final JsonParser parser) throws IOException {
JsonToken token = parser.nextToken();
if (!token.isStructStart()) {
return;
}
int depth = 1;
while ((token = parser.nextToken()) != null) {
if (token.isStructStart()) {
depth++;
} else if (token.isStructEnd()) {
depth--;
}
if (depth == 0) {
break;
}
}
}
i've wrote this only to found out that parser.skipChildren() exists
man
it's so hard to get into data oriented programming after a decade of oop
not impossible or anything but I just keep finding new ways of recycling structs that I'm just not used to
just Code
I've been programming for absolutely crazy amounts of time these past few days
@EventHandler
public void OnPlayerJoin(PlayerJoinEvent event) {
Player player = event.getPlayer();
new BukkitRunnable() {
@Override
public void run(){
String path = "players." + player.getUniqueId() + ".gui";
List<ItemStack> items = (List<ItemStack>) plugin.getConfig().get(path);
List<String> types = new ArrayList<>();
for(ItemStack item : items) {
if (item == null) { return; }
NBT.get(item, nbt -> {
String type = nbt.getString("type");
types.add(type);
if(type.equalsIgnoreCase("speed")) {
player.setWalkSpeed(0.3f);
}
});
}
player.sendMessage("5");
if(!types.contains("speed")) {
player.setWalkSpeed(0.1f);
}
}
}.runTaskTimerAsynchronously(plugin, 20, 0);
}
i have this code here that works perfectly fine up until "player.sendMessage("5");"
where it does nothing after the for loop, what do you think i could be doing wrong to the point where no code inside of public void run() executes past the for loop?
sounds like a data race problem due to async timer? or maybe not since i dont see any collections being used outside the timer callback itself
what's the data type of NBT in this case?
have tried printing a debug message inside for loop? maybe all items are returned as null?
how does yaml file contents look like too
NBT is an api where you can add nbt data to it
ive done that already, and it works fine but no code runs after the for loop
i used to have it so runTaskTimer wasnt asynchronous but that didnt work either
the yaml file has the other stuff from my plugin, nothing else
omg bro
thing I put in a while ago so natural lightning strikes don't happen :)
ty lol
why does this crash the server?
LightningStrike bolt = player.getWorld().strikeLightningEffect(player.getLocation());
bolt.setVisibleByDefault(false);
player.showEntity(getPlugin(), bolt);
It spams errors but I can't seem to find the newest error so here is the log (attached, very long error)
so what is the fix?
You're making a lightning strike in the lightning strike event causing a lightning strike event
Aka an infinite loop
that moment when you unironically create a class called SystemManager
and nearly createa a SystemManagerFactory
whats the full code?>
send the whole file
not the whole file just all the code inside the file
it's not a power the jedi would teach you about
Hi
I'm having a problem working with a node system
The problem is this. I'm creating a node that has to do with the advance done, but I've already created its constructor, and now when I try to create an object or node with it, I get an error.
i found this in the error: "Caused by: java.lang.ExceptionInInitializerError: Exception java.lang.StackOverflowError [in thread "Server thread"]"
I don't know if I'm mixing methods and things that have nothing to do with each other since I'm a junior, but I learned basic things.
meaning that something is happening so fast that its overflowing
yes I figured it out
is there anyway i can fix this issue?
hi
look at this💀
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerMoveEvent;
public class PlayerMoveNodo implements Listener {
public PlayerMoveNodo(PlayerMoveNodo event) {
event.PlayerMoveNodo(new PlayerMoveEvent(null,null,null));
}
@EventHandler
public void PlayerMoveNodo(PlayerMoveEvent event){
Player player = event.getPlayer();
event.setCancelled(false);
event.getPlayer();
event.getFrom();
event.getTo();
}
}
You understand the form of my code, because I don't
...what in the hell
an event listener doesnt need a defined constructor, you do not have to construct the event, it's passed to you in your PlayerMoveNodo method where it's annotated with @EventHandler
also, if the event hasn't been cancelled yet, you do not have to set cancelled to false.
The last 3 lines in your method do not do anything, they return the player, the location from where the player moved and location of where they moved to, but the return value of these methods is ignored and not e.g. set to a variable
and one last thing (this is personal preference), in java the most used naming convention is classes: MyClassName
methods/variable: myMethodName
Thanks and I'm here to explain to you about the canceled event XD
When I create an object with that class it cannot access the events
So I put variables of the events
You do not need to create an object of an Event Listener
That is, use PlayerMoveNodo event1 = new PlayerMoveNodo();
Ok but I want to create nodes with OOP
POO**
That is not what you are supposed to do with an event listener, a listener listens to a specific event on the server and executes your logic, there should only exist one instance of a listener. You register it in your onEnable:
Bukkit.getPluginManager().registerEvents(new YourListenerClass(), this)
(this referring to the actual plugin instance)
Thanks, but how will I make my node system?
I want to do something similar to Visual Bukkit
I will find a solution on my own.
I would not recommend creating something like visual bukkit for learning. In my case i created many small plugins to get into on how to use the api which helped a lot
And what excactly do you mean with node system?
You know, little blocks of code that run from top to bottom.
How to scratt
Scratch
Do you mean inheritence?
interesting name haha, but why would you need multiple instances of a listener? i dont really get your whole intention in what you are trying to achieve, sorry
you need to start by learning java
First of all POO means
wait, i think theres a resource for thath
Programación orientada a objetos
?learnjava
For Beginners:
Codecademy - Learn Java: Interactive Java programming course from basics to more advanced concepts. Perfect for absolute beginners.
https://www.codecademy.com/learn/learn-java
JetBrains Academy - Java Developer Track: Learn by doing with projects and challenges. It covers Java fundamentals to advanced topics.
https://www.jetbrains.com/academy/
Udemy - Java Programming Masterclass for Software Developers: Updated courses that cover Java 8 to Java 17 features. Suitable for those who prefer structured learning.
https://www.udemy.com/course/java-the-complete-java-developer-course/
For Intermediate to Advanced Learners:
Oracle Java Tutorials: The official guides by Oracle for Java programming—great for understanding the depth of Java.
https://docs.oracle.com/javase/tutorial/
Baeldung - Learn Java and Spring: Focus on Spring Framework and modern Java technologies. Best for intermediate learners aiming to expand their knowledge.
https://www.baeldung.com/
Practice and Hands-on Learning:
Exercism - Java Track: Solve exercises and get feedback from mentors. Great for practicing coding skills.
https://exercism.io/tracks/java
LeetCode: Practice your coding skills and prepare for technical interviews with Java.
https://leetcode.com/
Free Resources and Documentation:
Java Programming and Documentation: A comprehensive collection of Java programming guides, tutorials, and API documentation.
https://docs.oracle.com/en/java/
Community and Support:
Stack Overflow: A vast community of developers. Great for getting help with specific problems or understanding concepts.
https://stackoverflow.com/questions/tagged/java
r/learnjava on Reddit: Join the community of Java learners and get advice, share resources, and discuss projects.
https://www.reddit.com/r/learnjava/
Remember: Learning to program takes practice and patience. Don't hesitate to experiment with code and participate in community discussions. Happy coding! 🎉
I've been watching a course from a guy named Mauredev.
Theres a few useful sources you can check out :)
And I've been learning on sololearn
Well, what about the nodes
I want to make a basic API to understand and more than understanding with nodes
I dont know if an api for starting is not a little much for the beginning, but you can give it a try
It was that or a minigame.
I think a minigame will be easier
I also have other projects like a mod
Or even just a simple spawn protection plugin
Maybe yes, but there are almost no tutorials in Spanish.
Programación
Orientada a
Objetos
POO
we heard you the first 5 times
You can just experiment :) its a lot of fun and teaches you a few things. The javadocs will probably be of help for that: https://hub.spigotmc.org/javadocs/bukkit/
package index
Sure bro, I based my code on that thanks
For learning java in general the same applies, small, but different applications make a good learning foundation. Bigger projects right at the start can be a bit much when you do not have too much experience with java and the api itself
Oh sure, the furthest I got was when I added a mob with Geckolib just by looking at the wiki because no tutorial was updated to my version 🥶🥶🥶
What's more, I have the entity and it flies and shoots air balls.
Nothing like having a large project full of bad code thus being suboptimal and using more resources than necessary
But then again that is your average free plugin for you lol
lmao
I remember my first java course in school a thousand years ago, we had to use some weird tool called "Hamster Simulator" where you control a hamster sprite with java lul
We had to control a atomic cleanup robot with greenfoot. There was much swearing against it from my side...
It hung up, hat no auto-import and was stuck on java 8 😭
A friend of mine that started "Wirtschaftsinformatik" asked me if i could help her solve a module.
They had a ladybug sprite that was in a forest and needed to be moved...
Reminds me of what was basically my first programming experience back when I was like 11
Moving a little robot using what was basically scratch but even more basic
„Wirtschaftsinformatiker are no real Informatiker“ - a Mentor from the Ersties Program of my Uni
I dont really get why Wirtschaftsinformatik is its own field tbh
dokumention :stonks:
Did you setup Geyser on the Bungeecord
if not you need to do so since all players should be connecting through that and not directly to the server
yes i did
but it still wont work
and what happens when you try to connect
oh
also a red plugin indicates somethings wrong, check the log for errors during startup
You do not need Geyser on the server ^
oh ok
Refer to the setup guide I linked
@lost matrix srry for the ping, I remember you made a guide on the logic of how to create a well-made minigame plugin, but I can't find the post anymore.
That may have been illusion
https://github.com/IllusionTheDev/Minigame-Demo @lean pumice
ping dont work when editing btw
i swore afaik it didnt
No it does not
Fortunately I've been taking more showers so this no longer applies to me D:
It'd be cool if you could edit a reply ping
Tnx tnx
can i make like that on Tab without a command it doesn't give you all the players name but it give you some words i type an argument in a command?
yes
How?
implement TabCompleter
But it works for commands
What
There is a way for edit the Tab complete when it isn't a command
Like to make chat commands
And i can make with this method if too? For example if I type hello can I get a different type completion?
Don’t think so
Okay thanks anyways
?nms
The site isn't loading maybe because I'm to scared for nms
@tender shard fix your site!
no, not as of 1.13 or whenever we switched to brigadier
command completions are only sent for commands now
you used to be able to eavesdrop on exact keypresses in the chatbox since the client would send a tabcomplete request for every keypress in chat, command or not, before
how can i make a plugin which uses vault a standalone economy plugin
what now
Hi, whats the best and easiest way to get the Base64 representation of an itemstack?
serialize to bytes and then encode the bytes into base64
what do you need a base64 representation specifically for, though? if you're storing it in a database as a string, the snbt string is probably better; the bytes can also be stored as a blob
if you're storing it in a config, json/snbt is much better than base64
if it's just on disk in a file, raw bytes are fine
it does and its so shit
i have a settings map and i convert it to json and store it
bo point kf ever using sql
it's so nice that it work
wait
well
there are options
but for my need this is great
default options doesn't show
u cant even edit the value properly with phpmyadmin
phpmyadmin ☠️
phpmyadmin in big 25 🥀
well
making a good application frontend
you just don't edit the options
for ex I use datagrip
sure
60~ plugins??
dont be a dumbass
most of them have web ui that suppoets it
im not making a frontend for 60 plugins
anything important has a page
I'm talking about when making your own product
not navigating someone else's database
that's yuck
Or actually typing something into sql console
they should offer a good frontend
well yeah obv??
then?
and?
im obv talking about plugins emily
ah i love devoting my free time to make a good frontend for my free plugin that has mysql
so then everyone come and ask support about how to set it up and use it

by frontend I don't mean a web ui or some panel
i just mean general editing frontend wherever
presentable
inventory GUI, dialogs, commands even
rather than having the user go to the database directly
that ob exists for most plugins
bro what r u on about emily
did u think i go to my database to edit my plugin configs 😭
why else would you use phpmyadmin lpl
well a lot of sfuff
for example my guild plugin decided to delete my entire guilds table
so i had to use phpmyadmin to restore it and resetup some database only values
there is tons of things
yeah i do thats why i restored it
it decided to delete 300~ guilds bc it couldnt find the table w a name
is there a good way to find out the earliest version your plugin will be compatible with? I'd like to reach as many as possible and am currently using 1.18.2 spigot
What is snbt?
string nbt basically
Ah ok, I want to save in database but blob is too long in my opinion. How do I serialize the itemstack to bytes?
the shit you enter in the /give command
it's a paper specific feature, ItemStack::serializeToBytes
this gives you a byte[]
And for Spigot?
glhf
eh?
if you dare
bukkit object stream or some shit
Ah that one …
you shouldn't use bukkit object stream apparently
i don't remember why but i remember someone here getting mad every time it's brought up
but i also don't remember the proper way to serialize items on spigot
Ok maybe someone will say me how to do it better. Maybe I will just send my solution in here and hope that someone gets mad haha
But thank you so far
BOS is fine
paper people get mad at it because it has the same issues as ConfigurationSerializable ItemStack serialization
With a block in NMS, how would I go about changing the hardness and blast resistance?
I think I need to get the BlockData from a registry? to then change the values and then re-apply it to the block? I'm not sure
Any help is appreciated
You need to replace the entire registry object
Also changing the hardness will cause clients to behave weirdly
whatever version ur spigot-api version is for is a good indicator
u can gradually lower it too if ur not using features for the latest version
ah yes i meant the latter thing u said
is there a way to tell the minimum lowest version supported (assuming every later version is thus supported)
or do i have to plug and check
the feature part makes sense too, like if you're taking an entire mob that hasnt been released yet
oki
Is it possible to get the death message string as the translation keys, like death.attack.fall?
I don’t think so, I’ve been making a debugger and ran into this issue so I just basically mapped damage causes to strings
No, sorry
Working on the actual relayed debug info and making it easier for end users to read
Maybe might do that eventually, haven’t decided but kinda niche
Hello, I have a question about CommandExecutors, is there any built-in way to validate user input?
Otherwise, is there a popular library to faciliate this?
I see there's https://github.com/CommandAPI/CommandAPI - is this widely used and trustworthy?
No it has 620 stars for no reason.
Haha, of course stars mean everything, you can't bot them, and they definitely 100% correlate with usage on Minecraft servers. Silly me, a beginner asking for feedback, trying to verify with users in the community!
i've never heard of people botting stars on GitHub for a minecraft projectttt...?
with a commit history that goes back years?
Irrelevant, stars don't mean everything nor do they answer all questions. So maybe next time don't make such a sarcastic comment and instead be open to the idea that some users don't have much experience 🙂
Otherwise you could choose not to reply, thanks!
they definitely 100% correlate with usage...
mfw then they show usage stats on the readme
So from your perspective anything with 600 stars is trustworthy and widely used. Noted, I think I'll wait for a more informed reply, but I appreciate your sarcasm and your condescending replies to a beginner. Indeed very helpful.
you cant bot 32 contributors
THEY SHOW SPIGOT, AND MODRINTH DOWNLOADS BRUH IM NOT TALKING ABOUT STARS ANYMORE
but alr bro
if u think spigot and modrinth has a botting problem, then sure, every plugin may as well be botted?
Can you survey how many plugins or servers run an API? no?
You can only take the word of users, and those stars and downloads are users.
Okay, I don't care from some statistics showing downloads or stars. Please let's not turn this into an argument. You can think downloads correlate to trustworthiness, I will choose to be more cautious. If you don't have any good feedback then you're not obligated to reply, thanks!
Then how else do you want to gauge trust worthiness? From word of mouth? Sure. You trust Google as a company because you know that practically everyone is using it, you wouldn't trust it if just one person said "yeah i trust it". But in this situation, what are you expecting? Every person to say, "yeah I trust it". If anything you're going to get one person respond and say "Yeah its trustworhy".
Not interesting in arguing, I'm here to ask a question and you seem to be keen to debate it. I get it, 602 stars tells the whole story for you. I'm not interested in that, so let's end it here and perhaps someone else will reply.
we have already deduced that:
a) its impossible to get a metric of who's using it
b) the only metric would be word of mouth
c) word of mouth is not possible to ascertain from a small pool.
but alright, continue being dense.
you probably should consider more "do i need this for my project" and go from there
i think the answer to whether its trustworthy is clear
you can also determine "widely used" by looking at the downloads
nah, the 626 stars are botted dude
again botted bro
This is like when my parents yell my full name holy shit.
It does seem like a useful plugin, as from what I can tell there is no built-in input validation nor way to support annotations as the user types
I wonder, when buying things at a supermarket, do you hold each item, wait for a dozen people to walk by and ask what they think?
👏 free spirited individual
Abb3v, I understand you're angry that I'm not taking your "602 stars means everything" comment seriously. We can agree to disagree. Please feel free to stop derailing.
626*
Well, you should probably read what it does and decide whether that is sufficient for your needs, we can't really decide for you
😭
Indeed, yes it does fit my needs. I was wondering about the reliability and usage of such a plugin in the community, as well as if there were any more popular alternatives or in fact built in methods. I have gathered that no such built-in methods exist.
Perhaps I should have known all this from the fact that the project has 626 stars
Went off at me for being sarcastic but look whos the smartass now?
🍿
Ah, so you can see how it is? Perhaps then we can agree to disagree.
You could be nicer and less condescending to a beginner asking for help.
thats kinda just how a lot of mc dev communities are tbh
||I mean, I think you should've asked whether there were alternatives, rather than if this was a reliable plugin 🤷♂️ ||
In my mind this was sort of implied by the question, but you are right I could have clarified
im not being condescending, you asked if it was trustworthy, not if it can do everything you asked of it? So yes, Stars are a metric of that.
^
This was definitely not condescending 🙂
"You idiot look at the stars"
Ah, alright, that was definitely not the implication. Glad to see we're being honest!
ok.
Unfortunate
But I appreciate the openness and helpful replies @nova notch @glossy laurel
"you're not in the list abb3v, go fuck yourself"
(ahem, like you said, an implication)
That one I'll admit
LOL ur funny now
That was 100% my intention
🎊
happy independence day gng
thanks
love from bjp
I need help.
I have already coded myself a rank system using permissions, but now I am stuck here:
I want to sort all people on the tab board by their name, meaning this order as an example:
OWNER
DEV
ADMIN
MOD
PLAYER
I have no clue how to do so...I would appreciate any help
Is thats how its done? Thats cool
put numbers before team names
I think there might also be a packet for tab priority now
But I don’t know if we have api for it
yeah the player info packet handles priority now
Easiest is to put numbers before the team names
0000 comes first
then 0001 etc.
However many roles you need
well yes, but if someone names himself 000001 for example, theywil suddenly be at the top of the scoreboard yk
I have already seen that one, how exactly do I use this tho...
I mean in intelli it just says red, and you cant use a "#" for anyhting
Yeah you don't actually put #
oh yes, I just saw, it just means someting like a method in a class
yeah
is this a good code for that?
int order;
switch (playerDataManager.getPlayerRank(player.getUniqueId())) {
case DEV:
order = 0;
break;
case ADMIN:
order = 1;
break;
case MOD:
order = 2;
break;
case PLAYER:
default:
order = 3;
break;
}
player.setPlayerListOrder(order);
}```
Could consider making the ranks an object
containing their display name order etc
instead of hardcoding an enum
oh true
good idea
I will make this after I managed to do that stuff with the sorting, ty for the idea
No it goes on team name first, then alphabetically within the team
So if player B is in team 00_Owner and player A is in team 01_Admin then B will come before A
Oh
does Bukkit.getEntity(UUID) require the entity with that uuid to be in a loaded chunk to find them?
Yes q
rip
I have per player text displays, is it safe to store these in a map that contains the entity object so I can unload them when the player leaves?
I was told it can cause memory leaks or something so I used uuids but then I can't unload them
Mark them as non persistent
That way they will be auto despawened when their chunk is unloaded
bro I want them to stay if the chunk is unloaded for hte player
Then respawn them when the chunk is loaded again
seems like that would cause performance issues to constantly respawn them
Not that bad
will Chunk objects stay the same throughout server runtime so I can store chunks that have text displays for the player in a map
I believe it should be fine looking at the implementation
Just be aware that it holds a reference to the world
so it could be problematic if the world is to be unloaded
i mean, it would be no different than the game spawning them when the chunk loads? lol
like, quite literally, instead of the game spawning it, you spawn it
also the chunk will pretty rarely ever reload because I forceload a lot of chunks and the map is very small, so should I still do this?
It’d be nice to ensure no displays accidentally stick around
oh yeah I guess it fixes the problem
cus if the chunk is loaded it can remove it on quit
There can certainly be some issues where they stick around after you’re done tracking them and then now you can’t remove them
I mean you can… but not without extra effort programmatically or the vanilla /kill command
I mean yeah I mark all these player displays with nbts so it shouldn't be too hard to remove them
Easiest to just mark them as non persistent, they’re display entities so in the sense of a traditional entity object, they’re a lot more performant
there is no reason not to mark it as non-persistent
^ realistically you’re not tracking them when you don’t need to anyway
Just makes cleanup easier and you can still do so manually while tracking
well then I have to rewrite all my code to spawn em in again
also if I save the text display object in a map and mark it as non persistent then it gets despawned because they unload the chunk, can I respawn it with just calling the object and spawning at its own location?
Hey, I am having an issue of DisplayEntities randomly disappearing upon server restart. I am also having an issue where mobs marked as persistent are also disappearing on server restart. Does anyone have any idea what could be causing this issue?
Any plugins installed?
What version are you on
1.21.8
output from /version
latest
is what it says
wait
CraftBukkit version 4528-Spigot-7c52c66-37c783b (MC: 1.21.8) (Implementing API version 1.21.8-R0.1-SNAPSHOT)
Its seemingly random
some locations the entities are entirely gone
other locations the display entities are there, but the mob entities are not
the only consistent thing is they are all present before the server saves and shuts down
I know, because I went and checked them all. Unloaded and reloaded chunks. Relogged
I am in the middle of refactoring, so what I might end up doing is loading all those chunks and just removing the entities and respawning them
a little annoying, but thats life
As long as you don’t do setPersistent(false) they should stay
Except for monsters that may despawn
monsters despawn even if you setPersistent(true)?
Yes
That’s only for them being saved in chunk unload
You want setRemoveWhenFarAway(false)
When an item has not been modified, in vanilla it shows that "When in Main Hand" followed by some attributes like: 6 attack damage, 1.2 attack speed...
Are those values accessible from ItemMeta? I was trying to do :
meta.getAttributeModifiers(EquipmentSlot.HAND);
but I imagine thats only if the item has been modified? So is there not a way to get those values?
Otherwise should i define it all inside the plugin? like:
public static Double getAttackDamage(Material material) {
return switch (material) {
case WOODEN_SWORD -> 4.0;
case STONE_SWORD -> 5.0;
case IRON_SWORD -> 6.0;
case DIAMOND_SWORD -> 7.0;
and then only change it if a meta modifier was found?
Material#getDefaultAttributeModifiers
thanks hunk
Do enchanted books store enchantments different to items?
yes
they are stored in the stored_enchantments component as opposed to the enchantments
EnchantmentStorageMeta
Throwback to when they stored them the same way and silk touch books meant free grass blocks
Sorry and thank you!
I'm trying to hide the attack damage / attack speed stats on an ItemStack, but everything I can find explaining it uses something deprecated, how can I hide them now?
in 1.21.1, specifically
is it deprecated bc it's old or is it deprecated bc it's experimental
bc it's old
F
Take a look at the ItemFlag class
oh awesome tysm
I'm surely doing this wrong in many ways, but do you know why this doesn't work?
ItemStack set_attributes_hidden_item = ((Player) sender).getEquipment().getItemInMainHand();
ItemMeta set_attributes_hidden_meta = set_attributes_hidden_item.getItemMeta();
assert set_attributes_hidden_meta != null;
set_attributes_hidden_meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_ADDITIONAL_TOOLTIP);
set_attributes_hidden_item.setItemMeta(set_attributes_hidden_meta);
((Player) sender).getEquipment().setItemInMainHand(set_attributes_hidden_item);
You need to apply the ItemMeta to the ItemStack using ItemStack#setItemMeta(ItemMeta meta)
Then set the itemstack in the players inventory
Everything else looks good, minus the snake case naming convention, just gotta tie the meta to the item.
you're right about the snake case, I'm used to GDScript where it's normal 😭😭
Yea, it’s not really a big deal, but I just wanted to point it out since Java conventions. :p
fair enough!
very stupid question, but what do you mean by "ItemStack#setItemMeta()"? is that different from this:
set_attributes_hidden_item.setItemMeta(set_attributes_hidden_meta);
Oh, I guess I missed that
ah lmao
I’m on my phone right now so it’s hard to read the code blocks
But no, that’s how you do it.
Are you running Paper
weird, it doesn't seem to do anything, it looks the same in-game
Purpur, which should work the same in this context right?
Ohhhh, wait
Yeah
The item flag you have isn’t correct
Hide additional tool tips doesn’t work on attributes anymore
There are specific flags for it
You need add an attribute modifier to make the hide attributes flag work. This is not required on Spigot
I was mainly just trying to remove the attack damage and attack speed on swords, I was kinda just trying HIDE_ADDITIONAL_TOOLTIP to see if that was what I needed
ooooooooh ok
declaration: package: org.bukkit.inventory, enum: ItemFlag
I think you want #HIDE_ATTRIBUTES
Adding any attribute modifier will overwrite the default ones
On Spigot adding the flag will remove all attributes implicitly when the hide attributes flag is set. Paper on the other hand requires you to add an attribute so it's not using the defaults
Small differences like this is why you really should ask in the right discord for what you're programming/tasting against
Especially now with Papers hardfork causing more and more deviations in api
ooooooooooh that's right, I forgot they did that, I still thought they'd work the same way
so I just need to add a new attribute to the item for it to hide them?
A new attribute modifier, yes
perfect, ty!
soooooo I may or may not have another issue...
that kinda brings me back to my initial question, AttributeModifier() is deprecated, so how do I add an attribute modifier to an item now?
I do love the taste of code
mmmm paper
not sure how paper does their stuff, but deprecated does not necessarily mean unusable. Usually should read the notes for the deprecation as it will indicate if there is a new api for it or not. If there is not then odds are it still works
I think I figured it out, it looks like it's just a certain use for it that's deprecated, so if I use args of a different type it works
pov: @versed ember
I assumed that I'd have to change the code to support newer stuff if I used a newer version, and since I started learning java today I wasn't gonna bother, but ig I thought wrong
why is my intellij autoformatting like this shit ass way
seems its formatting after the semi colon which typically indicates the end of a line lol
probably should check your formatting rules
i have like never touched them so idk why its doing that
well since intelliJ is a big fan of shortcuts for everything, maybe its possible it was activated with a short cut?
Has anyone been told yet by intellij that their code is violent to minorities?
Because it happened to me
apparently you can report to intelliJ code stuff that is offensive or whatever
not sure why IntelliJ cares but seems they do
You can name your function the n word and it wont care.
not to insinuate i tried
youd think... theyd have a list already?
Isn't that just spelling / grammar helper?
hang on
so the formatting was stupid because i was stupid
i forgot int i
i just typed int =
lol
ah
so my intellij is just fucked as a whole
its not highlighting errors in my code
like at all
just wont pop up until i try to compile
IJ at it's best 
"violent associations"?
this a DEI-grammarly inside of a code editor?
Dei?
question mark because u dont know the acronym or?
Because I don't see how DEI, a program related to employer responsibilities is connected to writing neutral English
im making a joke?
and also wdym "neutral english"?
"Neutral" English is not a linguistical concept, its a political / social concept.
"neutral" is a word to describe a style of writing, like formal or informal. OR relating to bias / stigmatism
if you genuinely believe that "target" is informal for that context then you severely misunderstand english
which explains my joke
Yea my bad it must have flown over my head
really cant tell if ur being sarcastic?
Neutral English in grammar generally applies to the half way point between formal language / informal language. "Neutral" English in this case is not that, it means "neutral communication", which is:
language that upholds inclusivity, and avoids words with otentially harmful, violent, or exclusionary connotations.
This is obviously the intended usage of it when they say "violent associations"... so its being political. DEI as an acronym means Diversity, Equity, and Inclusion. its not just for employer resonsibilities. its essentially like an initative for how to act
Thanks for the explanation!

what, is this not meant to be sarcastic?
I did not previously consider neutral English to target inclusivity lol
In my head it was just avoiding strong or emotional words
Under your above definition the DEI joke makes more sense
alr i apologies for my language then. i thought u were being a smug asshole
Are mobs that are e.setInvulnerable(true);
only hittable when in creative mode? I am able to hit them in creative mode but not survival
Creative ignore the invulnerability flag for most entities i think
Gotcha, dang
Why? What do you need
I've got a work around and all, its just less elegant im fine
i mean, what are you trying to do that warrants such a question? perhaps u coud get a better answer
I have an entity that I don't want to die that when damaged, it damages something else. I already have it working so its fine
Is that supposed to be a joke or genuine criticism
wym