#help-development

1 messages · Page 1489 of 1

young knoll
#

If you insist though, NBTCompressedStreamTools.a can read a file input stream into an NBTTagCompound

somber hull
#

how the fuck do i make a hashmap lol

young knoll
#

That’s correct

somber hull
#

oihhhhhhhh

#

nvmn

#

im fdumb

young knoll
#

But you haven’t imported a class called value

somber hull
#

i need to do strin integer

young knoll
vernal basalt
#

HashMap<Key, Value> name = new HashMap<Key, Value>();

young knoll
#

The <> on the right aren’t needed

vernal basalt
somber hull
#

i didnt do String, Integer

vernal basalt
#

all my maps have the same <String, Interger>();

somber hull
#

weird

young knoll
somber hull
#

it doesnt tell me to do it on the site im looking at

young knoll
#

Because you don’t have to

vernal basalt
#

ah

young knoll
#

That’s a legacy thing

somber hull
#

ok

#

i need to move this

#

in order to access it here

#

HOW

#

I dont understand

young knoll
#

How do you move it?

#

Or how can you access it there

somber hull
#

I need to be able to access it

young knoll
#

Make a getter for it

somber hull
#

wait

young knoll
#

And pass an instance of your main class with dependency injection

somber hull
#

is that just

#

thats just a method

#

that returns it right?

young knoll
#

Learn java before using the spigot API

somber hull
#

I know

#

I just dont know some terminology

young knoll
#

Getter is pretty basic

somber hull
#

I know what you meant

#

i just forgot what it was

#

chill

young knoll
#

Also you didn’t appear to know how to use maps

somber hull
#

I do, i just got back from water polo practice and everything is in pain and my brain no worky rn

vernal basalt
#

@young knoll i still can't find anything about it

young knoll
#

Where are you looking

somber hull
#

@young knoll why would i need to add an instance of my main class?

paper viper
#

the one in your project

#

try deleting it

young knoll
#

Unless you static abuse

vernal basalt
young knoll
#

Game profiles don’t deal with save files

vernal basalt
#

sigh

young knoll
#

Most of NMS isn’t documented

vernal basalt
#

so how can i read the nbt file

digital plinth
paper viper
#

for nms

young knoll
#

I told you how to turn a file input stream input an NBT tag compound

#

Then you have to mess with that to get the data you want

digital plinth
vernal basalt
#

why can't there be an easier way

#

the stuff they say doesn't even show up in my ide

paper viper
young knoll
young knoll
vernal basalt
#

what

young knoll
#

What are you using for the dependency

vernal basalt
#

wdym

young knoll
#

The jar? Maven? Gradle?

vernal basalt
#

maven

young knoll
#

Run buildtools for your version and change the dependency from spigot-API to spigot to access NMS

chilly summit
#

Why does this code not set the data of factionconf to /defaults/factiondefault.yml?

factionconf.setDefaults(plugin.loadConfigurationFile("/defaults", "factiondefault.yml"));

loadConfigurationFile is the following:

public FileConfiguration loadConfigurationFile(String filepath, String filename) {
        File customConfigFile = new File(getDataFolder() + filepath, filename);

        FileConfiguration customConfig = new YamlConfiguration();
        
        try {
            customConfig.load(customConfigFile);
        } catch (IOException | InvalidConfigurationException e) {
            e.printStackTrace();
        }
        
        return customConfig;
    }

Am I not properly understanding how conf.setDefaults() works? I can't find much documentation on it, but the only thing I could find on it says it should work the way I'm using it.

I'm sorry for asking for help so often, I just can't seem to mess with configuration files well.

young knoll
#

Defaults are used internally when a value isn’t found in the file iirc

#

I don’t think they are ever actually stored in the file

chilly summit
#

hmmm

#

Then how can I set the data of one file to another's data?

#

In fact, it would be better to just be able to set the data of one right from a file in the jar but I can't find a way to do that without loading it into a different file, moving it, then copying that one's data.

blazing ferry
#

This works very well, but removing the tripwire hook from the inventory has the exact same problem.

young knoll
chilly summit
#

That only saves the data of a file in a plugin's JAR (which is what I need) to the main configuration folder of the plugin with the same name. I suppose I could rename it and move it though... Is there a better way to do it than that?

chilly summit
young knoll
#

What exactly do you want to do

chilly summit
#

I'm making a configuration file for every faction (I'm making a factions plugin) named the UUID of their faction. In it, I want some data like the gamerules and permissions they have set, the description, name, etc. I need to get a template of this data because it would be a pain to manually set every default value in the code

young knoll
#

Load it into memory with YamlConfiguration.loadConfiguration

#

And then set it to whatever file you want with .save

#

Do note this will remove comments

chilly summit
#

But if so, this code doesn't make sense

FileConfiguration customConfig = YamlConfiguration.loadConfiguration(new File("factiondefault.yml"));
young knoll
#

You can probably use the stream version and get a stream of the file in the jar

chilly summit
#

honestly I have no clue how I would even start to do that

young knoll
#

Reader*

odd sentinel
#

is there any way to know how many items were crafted via shift+click? CraftItemEvent doesn't appear to handle that

young knoll
#

That should help, uses getResource

odd sentinel
#

ya I saw various solutions like that but was hoping there was some api improvements since I didn't know about

young knoll
#

Not that I know of

vale cradle
#

How expensive is to call the World#getBlockAt(int, int, int) method multiple times?

sage swift
#

soooo expensive

vale cradle
#

Hmmm

#

Is there any other alternative?

sage swift
#

like, suuuuper expensive to get a "Block" which is just a reference to a location

vale cradle
#

Any other alternative?

sage swift
#

the most expensive thing you could think of

#

never use the method that does nothing to the world and uses almost no cpu

vale cradle
#

Are you being sarcastic?

young knoll
#

They usually are

#

It’s best to ignore them

vale cradle
#

I mean, I'm pretty aware (of what I've heard) that the World#getBlockAt() method has an impact on performance

#

So I just wanted to know how much

sage swift
tribal wraith
#

i've noticed the method:

Sets the border to a square region with the specified side length in blocks```
in <https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/WorldBorder.html>


is there any way to check if it is currently moving?
#

Much thanks

sage swift
#

1.8

tribal wraith
#

sorry, i meant any version i just looked up worldborder spigot

sage swift
#

well you could look at how it moves

young knoll
#

You may be able to store the size you are aiming for and then compare it with getSize

#

Not sure how getSize works with movement

sage swift
#

/worldborder set <sizeInBlocks> [timeInSeconds] this is interesting on the wiki though

#

you can specify speed

paper viper
#

@sage swift

#

I saw that lol

#

anyways

tribal wraith
#

i need to be able to check if its moving from any world

#

so i dont think that would work coll

#

its going to be a public plugin

#

thx tho

paper viper
#

how would the World affect it tho?

tribal wraith
#

im trying to get a way to get the worldborder color

sage swift
tribal wraith
#

and checking if it's moving would help with that

#

anyone else have any ideas

paper viper
#

what you mean here

tribal wraith
#

i need to be able to check if the border is expanding or shrinking to check the color of the border

paper viper
#

How would that affect if it's going to multiple worlds then? Just loop through all the worlds

tribal wraith
#

yea but there's no method to check if it is or not

sage swift
tribal wraith
#

thats my question, how would i do that

paper viper
#

one way you could do is get the current size, wait another couple ticks

#

then see if it changed

tribal wraith
#

that wouldnt work if the time frame was very long

#

unless it is tracked in huge decimal points

sage swift
#

nvm

paper viper
#

its double

#

you know how precise that is?

tribal wraith
#

ill try it out and get back to you

#

thx

tawdry plume
#

hey guys, do we know any new methods that are going to be available for 1.17 dev yet?

#

not sure if tehre's an api link yet

young knoll
#

No

paper viper
#

Not at all

tawdry plume
#

kk

#

thanks i know it was random but just wanted to check just in case 🙂

paper viper
#

yeah we need md to release mappings first

#

and then spigot needs to work on new api

tawdry plume
#

thanks pulse

#

is there anything we can do to contribute?

paper viper
#

probably PRs or so

#

but idk if you can do anything right now

#

for 1.17

tawdry plume
#

10-4 thanks man

sage swift
#

why 1.18 buildtools no work!!

tribal wraith
#

100.00000114651071
tick later
100.00000114652671

thank u pulse u were absolutely correct

paper viper
#

np

somber hull
#

is there a way to get a class without calling "new"?

#

Wait

#

thats what the constructor is for right?

#

or.

vale cradle
#

Yes

somber hull
#

ok

#

thank you

vale cradle
#

Or you can use Reflection

somber hull
#

alright thank you

sage swift
#

for the class you can use the static Object class field...

#

Object.class

somber hull
#

plugin.ListenChat.put(plr.getName(), 1);

#
    public void onPlayerChat(AsyncPlayerChatEvent event) {
        Player plr = event.getPlayer();
        Map<String, Integer> playerMap = plugin.ListenChat;
        plr.sendMessage("pp :)");
        if(playerMap.containsKey(plr.getName())) {
            event.setCancelled(true);
            plr.sendMessage("help");
            plr.sendMessage(event.getMessage());
        }
        return;
    }
#

this is in my main class (plugin)public Map<String, Integer> ListenChat = new HashMap<String, Integer>();

vale cradle
#

And the problem is...?

young knoll
#

There is a conversation api for this

#

Not that I’ve ever used it

candid galleon
#

The conversation api is... a bit verbose

#

though admittedly that was likely simply due to how I used it

somber hull
young knoll
#

Don’t destroy packet them?

somber hull
#
        settingsPane.addItem(new GuiItem(rlMsgItem, event -> {
            Player plr = (Player) event.getWhoClicked();
            plugin.ListenChat.put(plr.getName(), 1);
            plr.closeInventory();
            plr.sendMessage("aaaaaaaaaaa");
        }), 0, 0);

^^^ Runs when the item is clicked in GUI

    public void onPlayerChat(AsyncPlayerChatEvent event) {
        Player plr = event.getPlayer();
        Map<String, Integer> playerMap = plugin.ListenChat;
        plr.sendMessage("test :)");
        if(playerMap.containsKey(plr.getName())) {
            event.setCancelled(true);
            plr.sendMessage("help");
            plr.sendMessage(event.getMessage());
        }
        return;
    }

^^^ Chat Event
this is in my main class (plugin)public Map<String, Integer> ListenChat = new HashMap<String, Integer>();

#

it doesnt send me any messages exept the AAAAAAAAAAAAA one

#

didnt do @EventHandler 🤦‍♂️

dusty herald
#

i feel you there

young knoll
#

Probably better to freeze a player by setting their walk speed to 0

#

And giving them jump boost > 128 to stop jumping

lapis relic
#

The 'return' is redundant

spark hawk
#

What video do you recommend to learn to program plugins?

digital plinth
#

umm where can I find the finished gradle project after i build it

dusty herald
#

build -> libs

#

@digital plinth ^

digital plinth
#

no libs

dusty herald
#

are you sure you built it

digital plinth
#

clicked the hammer

dusty herald
#

what hammer

digital plinth
#

green hammer

#

top right

dusty herald
#

try searching for a jar file in the projects root

digital plinth
#

okay

#

weirddddd

dusty herald
#

try building it again?

#

🤷

digital plinth
#

i tried

#

lemme restart the DIE

sullen marlin
#

isnt gradle dist the task you need for a jar

digital plinth
#

IDE*

sullen marlin
#

idk I dont use gradle

dusty herald
#

i have no idea md

young knoll
#

It’s build for me

dusty herald
#

i'm just starting to use gradle

digital plinth
dusty herald
#

just run gradle build supa

#

see what hpapens

digital plinth
dusty herald
#

use your CLI

digital plinth
#

click build on there?

sullen marlin
#

try build then

#

also try jar I guess, that seems obvious

dusty herald
#

🤷 i have no idea man i just use shit from cli

digital plinth
young knoll
#

I run build from a panel in my ide

#

Haven’t had any issues

digital plinth
#

theres no out folder either

dusty herald
#

try gradle jar

digital plinth
#

what

#

what command do you use

#

oh okay fixe dit

#

it*

#

you run the build jar

dusty herald
#

theme_eclipse is amazing

lapis relic
#

You can double-press control and then execute any command

#

For example, gradle build

visual tide
#

?1.17

undone axleBOT
#

There is no ETA for 1.17. Having an ETA leads to unrealistic deadlines, false hope, and a bad product. It will be ready when it's ready.

silk mirage
#

for nodejs btw

#

Oh, Is there any way to fake console as player?

#

i mean, is there any code available there which uses dummy player?

elfin creek
#
if(action.equals(action.RIGHT_CLICK_BLOCK) || action.equals(action.RIGHT_CLICK_AIR) || player.getInventory().getItemInMainHand().equals(Material.COMPASS)) {
            openGui(event.getPlayer());
        }```

whats wrong in this i get this err
daring sierra
#

what language is that even supposed to be yeesh

elfin creek
#

wait a sec

daring sierra
#

nvm ignore me, forgot || was a thing for a sec

#

morning brain xd

elfin creek
elfin creek
#

yea

upbeat sky
elfin creek
#

ohh

upbeat sky
hybrid spoke
elfin creek
#

but using plugin version 1.12

hybrid spoke
#

and your api is >1.8.8

#

yeah thats the problem

elfin creek
hybrid spoke
#

you are using methods and fields which doesn't exist in 1.8.8

#

like #getMainHand()

elfin creek
#

how do i do it in intellij ide?

hybrid spoke
#

just.. uhm.. using another spigot-api version

elfin creek
#

it doesnt give me options below 1.12

hybrid spoke
#

best would be to use the one your server have

#

maven?

elfin creek
hybrid spoke
#

just change the numbers to 1.8.8

elfin creek
elfin creek
#

i have this

#

what can i do

hybrid spoke
#

yeah and you change 1.16.5 to 1.8.8

elfin creek
#

ok :)

elfin creek
sullen marlin
#

make sure you have the spigot maven repo in your pom

hybrid spoke
#

i think he already have that cause 1.12 worked.

#

what about a mvn clean install

sullen marlin
#

they might have 1.12 only cause they ran buildtools

slim bough
#

Hey? Is there a way to run spigot plugins (specifically dynmap) with forge mods on 1.16.5?

chrome beacon
slim bough
dense remnant
#

How do I get permissions from an op player? Like if I try with hasPermission it of course always returns true...

eternal oxide
#

you can check both hasPermission and isPermissionSet

#

isPermissionSet will not return true for Ops unless they actually have the node

dense remnant
#

Thank you 😄

wraith rapids
#

if you don't want op's to have a permission by default, set the permissiondefault of it to false

quaint mantle
#

Can i force someone to see the end credits

dense remnant
#

Yes

#
public class ExampleMod extends JavaPlugin implements Listener {
    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        if (sender instanceof Player) {
            displayCredits((Player) sender);
        } else {
            sender.sendMessage(ChatColor.RED + "Must be a player.");
        }
 
        return true;
    }
 
    private void displayCredits(Player player) {
        CraftPlayer craft = (CraftPlayer) player;
        EntityPlayer nms = craft.getHandle();
 
        nms.viewingCredits = true;
        nms.playerConnection.sendPacket(new Packet70Bed(4, 0));
    }
}

Found this code

quaint mantle
#

There is climbing packet?

#

I wanna to create climbing imitation, using packets without setVelocity

#

For me Packet70BEd doesnt work

dense remnant
quaint mantle
#

i do not know how to use protocolLib

#

:/

wraith rapids
#

google how to use protocollib

quaint mantle
#

when i import the dependency i get an error

opal juniper
quaint mantle
#

i did

opal juniper
#

then there should be a 'maven refresh' button in the top right and it will resolve it

quaint mantle
#

do i press that when its red?

inner stratus
#

Anyone knows how to decompile, modify a text in a .class file into a .jar (plugin) and recompile it?

quaint mantle
#

oh yea that works ty

wraith rapids
#

decompile, modify the decompiled source, fix decompiler errors, and recompile

quaint mantle
#

i mean how would i send a packet

dense remnant
#

idk 1 sec

#

Maybe

private void displayCredits(Player player) throws InvocationTargetException, IllegalArgumentException, IllegalAccessException {
    BukkitUnwrapper unwrapper = new BukkitUnwrapper();
    Object nms = unwrapper.unwrapItem(player);
 
    PacketContainer useBed = new PacketContainer(Packets.Server.BED);
    useBed.getIntegers().
        write(0, 4).
        write(1, 0);
 
    FuzzyReflection.fromObject(nms).getFieldByName("viewingCredits").set(nms, true);
    ProtocolLibrary.getProtocolManager().sendServerPacket(player, useBed);
}
#

But idk I just copied it xD

quaint mantle
#

nope

#

its giving me an error at Packets.Server.BED

ivory sleet
#

I mean you do need to import still

austere cove
#

isn't it PacketType

#

but yea, you shouldn't just copy-pasta code lol, think.

quaint mantle
#

i've done this before and never used any of that shit

toxic mesa
#

Is there anything wrong with this if statement? It seems to pass if I have 3 items instead of at least 10

if (player.getInventory().containsAtLeast(item, 10)) {
paper viper
#

did you make sure they arent named differently, have different lore

#

anything like that

eternal oxide
#

it shoudl never pass on 3

quaint mantle
quaint mantle
hybrid spoke
#

because otherwise, if you dont have more than 3 of that itemstack, it shouldnt pass

paper viper
#

try this:

PacketContainer credits = ProtocolLibrary.getProtocolManager().createPacket(PacketType.Play.Server.GAME_STATE_CHANGE);
credits.getIntegers().write(4, 0);
credits.getFloat().write(0, 1.0F);
try {
   ProtocolLibrary.getProtocolManager().sendServerPacket(player, credits);
 } catch (InvocationTargetException e) {
  e.printStackTrace();
}
 
#

not sure if it will work tho, give it a shot

#

@quaint mantle

quaint mantle
#

alr

paper viper
#

I know how to do this in NMS, but im not sure in protocollib

quaint mantle
#

i could do it in nms but idk how lol

quaint mantle
#

coudl you show me in nms?

paper viper
#
        final CraftPlayer craft = (CraftPlayer) player;
        final EntityPlayer entity = craft.getHandle();
        entity.viewingCredits = true;
        entity.playerConnection.sendPacket(new PacketPlayOutGameStateChange(4, 1.0F));
#

I think this is how you do it

quaint mantle
#

i get that error

paper viper
#

Oh wait

#

you need to use an unsigned byte

#

one second

#

You may have to some reflection stuff

#

one second

hasty bay
#

uhm

toxic mesa
hasty bay
#

i want to replace bungee with actual ip

#

idk how to

#

im nub

#

help

#

pls

toxic mesa
hybrid spoke
quaint mantle
eternal night
#

pretty sure it would just be PacketPlayOutGameStateChange.e instead of 4

toxic mesa
# hybrid spoke can you send us the full code and maybe a test attempt?

Full code is way too much to send but this is the method that's being triggerd

            ItemStack item = new ItemStack(mat.get(player.getUniqueId()), 10);
            if (emptySlots(chest.getInventory()) >= 1) {
                OfflinePlayer seller = plugin.getData().getConfig().getOfflinePlayer("sign." + sign.getBlock().getLocation());
                if (plugin.getEco().getBalance(seller) >= price) {
                    if (player.getInventory().containsAtLeast(item, 10)) {
                        player.getInventory().removeItem(item);
                        chest.getInventory().addItem(item);
                        plugin.getEco().depositPlayer(player, price);
                        plugin.getEco().withdrawPlayer(seller, price);
                        // succes
                        player.sendMessage(ChatColor.translateAlternateColorCodes('&', plugin.getMessage().getConfig().getString("sucess_sell")));
                    } else {
                        // doesnt have the item
                        player.sendMessage(ChatColor.translateAlternateColorCodes('&', plugin.getMessage().getConfig().getString("error_sell_item")));
                    }    
                } else {
                    // seller doesn't have money, fucking noob
                    player.sendMessage(ChatColor.translateAlternateColorCodes('&', plugin.getMessage().getConfig().getString("error_seller_money")));
                }
            } else {
                // chest full
                player.sendMessage(ChatColor.translateAlternateColorCodes('&', plugin.getMessage().getConfig().getString("error_chest_full")));
            }
hybrid spoke
#

?paste

undone axleBOT
hybrid spoke
#

⬆️

toxic mesa
quaint mantle
toxic mesa
quaint mantle
#

Lmao it works

#

tty

#

ty

hybrid spoke
#

// seller doesn't have money, fucking noob nice

eternal night
#

np

toxic mesa
#

Love doing it

paper viper
#

so close

#

lmao

eternal night
#

speed xD

paper viper
#

i wasnt on an ide

hybrid spoke
#

could be that you are checking if the inventory contains 10x 10 items of this type iirc

toxic mesa
#

If that would be the case it still woundt pass if I only have 3 items

#

some weird shit going on

hybrid spoke
#

change the value to 1 of your item

#

and try it

toxic mesa
#

So if bla bla #containsatleast(item, 1) ?

#

Cuz ive tried that

#

same result

hybrid spoke
#

new ItemStack(skrt papaka, 1);

toxic mesa
#

Ah okay gimme a moment\

#

reloading server rn

#

well restarting

#

Works

#

Thats still weird becuz i used the same exact method with a chest inventory and that did work

#

Anyways ty

hybrid spoke
#

^^

royal hawk
#

Guys hello. How to prevent the player from going outside the square. I have distance if i to go to angle, then distance will be different.

eternal night
#

You can probably use the BoundingBox class to define a square

#

You can then use BoundingBox#contains(entity.getLocation().toVector()) to check if the entity is still inside

eternal night
#

what kind of BoundingBox are you using that takes 4 parameters o.O

royal hawk
#

1.12.2

eternal night
#

that version did not have spigot bounding boxes

royal hawk
#

Is there an analogy?

eternal night
#

nothing I recall inside spigot directly

#

tho implementing a simple AABB isn't too hard

hot hatch
#

is there an event when a player feeds an animal?

eternal night
#

there is EntityEnterLoveModeEvent

#

which is called when, well, and entity moves into love mode

#

besides that, I don't think there is a standalone event for feeding (something like a baby to grow up)

glossy barn
#

could also use PlayerInteractAtEntityEvent and check if the animal is being "fed" by checking it is being right clicked and it is holding the food item

hot hatch
#

yea i think PlayerInteractAtEntityEvent is better

#

ty

young knoll
#

Use PlayerInteractEntityEvent unless you need the location

bleak reef
#

So I have part of my plugin where whenever you place a chest it spawns an invisible armor stand with text above it, when you break the chest it is supposed to subsequently remove the armor stand; however this doesn't appear to be happening.
The armor stand just stays there, The code itself works as it removes all armor stands in a 2*2*2 radius of the chest and if I were to place a normal armor stand next to the chest, that does gets removed; its only the invisible one that stays there.
Ive tried running commands such as /killall entities yet the armor stand appears to just stay there permanently
Does anyone happen to know why this is happening and any potential fixes to the issue?

stone sinew
#

If the armorstand is still there its because its a packet sent entity. Which means you need to either relog or leave the world.

quaint mantle
#

or send them a remove packet????

#

lawl

stone sinew
quaint mantle
#

crazy

#

why would he be asking in this channel then

#

I have part of my plugin

stone sinew
#

Don't even know if its packet based yet 🤷 just assuming

quaint mantle
#

it won't be

#

assuming he's using the armor stands for names that'll show wether or not the chests are filled

sharp bough
#

if i have a hashmap<Location;List<ItemStack>> and i add 3 item stacks where 2 of them are the exact same, is there a way to merge this 2 items that are the same thing and only have 2 item stacks? or does this happen automatically?

#

like when you do put(), does this always add another item or checks if theres already one to add it to

hybrid spoke
#

check them if they are the same. if so -> +1 amount

sharp bough
#

yea but what happens when you reach 64 items?

#

does this go up to 100 or more?

#

so like Stone x 100

#

and then when you add the items to the inv it splits into 2 stacks of 64 items each

delicate fractal
#

anyone know how to make it so i can put prot 6 on stuff cuz when i put a prot 6 book on armor it just goes to prot 4 (also with other enchants)

delicate fractal
#

what?

chrome beacon
#

You're in the wrong channel @delicate fractal

#

Have patience

chrome beacon
#

He's not making a plugin

snow sorrel
#

Hello, is there a plugin that increases XP gains? So that people can get a whole level of xp when they kill a mob

chrome beacon
#

Wrong channel

ivory sleet
snow sorrel
#

Mb.

tribal narwhal
#

Not hard to make one

maiden briar
#

If you have a null Object, is getClass working then?

ivory sleet
#

null isnt an object

maiden briar
#

For example

public AClass(Object o)
Class c = o.getClass()
ivory sleet
#

if null is passed a NPE will be thrown

maiden briar
#

Ok thanks

fickle helm
#

no but you can compare instanceof on a null object

ivory sleet
#

You can just use the comparison operator to check otherwise

quaint mantle
#

"comparison operator"

#

weirdo

ivory sleet
#

or expression whatever its called

sharp bough
#

comparison operator

deft geode
#

“comparison operator” cs class fun times

#

back to the real workd

#

where nobody cares what you call it

#

cause i’ve hear “little equals thingies”

ivory sleet
#

lmao

sharp bough
#

the thingis

quaint mantle
#

Hey guys, what's the even when a item is used, and how can I modify the item durability to reset it (like unbreakable)

chrome beacon
#

Why not just add the unbreakable tag

ivory sleet
#

get the item meta through ItemStack#getItemMeta
check if the itemmeta instanceof Damageable
cast it and then set the damage to 0 I think

somber hull
#

I am getting an NPE on this line
plugin.settingsGui.show(plr);
context is
On player chat event
Im trying to open a gui after they type smthng

gaunt relic
somber hull
#

public ChestGui settingsGui;

#

and then on my onenable

#

settingsGui = guiClass.createSettingsGui();

#

also in my onEnable

#

guiClass = new GuiClass(this);

#

@gaunt relic ic

#

leme send the error

undone axleBOT
somber hull
gaunt relic
#

Caused by: java.lang.IllegalStateException: InventoryOpenEvent cannot be triggered asynchronously from another thread.

somber hull
#

😳

#

what that mean lol

#

i never understood threads

gaunt relic
#

You need to open inventories synchronously, to do that run a bukkit task, Bukkit.getScheduler().runTask(

somber hull
#

just so im learning, and its not spoonfeeding

hybrid spoke
#

its not threadsafe

somber hull
#

why?

hybrid spoke
#

because its not synchronized. á u can modify it from other threads what could let your program explode

somber hull
#

alright

gaunt relic
#

The event is Async, Async means more than one thing can be run at the same time without jamming the main thing

#

but some methods on bukkit API require for it to be Sync

somber hull
#

so do Bukkit.getScheduler().runTask(plugin, {

}));

hybrid spoke
#

yup

gaunt relic
#

yes, and open GUI in there

somber hull
#

thanks

#

wait then why do i not need to do that wehn running a command?

#

are the commands always in sync with the server?

ivory sleet
hybrid spoke
somber hull
#

got it

#
The method runTask(Plugin, Runnable) in the type BukkitScheduler is not applicable for the arguments ((<no type> plugin) -> {})
#

i get this error when doing the runnable?

#

ohh

#

nvm im dum

sturdy venture
#

you have some nerve

sharp bough
#

lmao why does it say its sus

#

?

ivory sleet
#

I mean the preferred type is UUID there

somber hull
sharp bough
#

ahahahahh

somber hull
#

thats why you should use eclipse 😏

sharp bough
#

ah hell nah

#

intellij comes in dark mode

somber hull
#

eclipse has a dark mode 😏

#

look at this smexy and simple layout

sharp bough
#

oh god is that a paint or a code?

#

i mean look at this clean setup

#

folders and classes look so clean

gloomy iron
#

do not use maven or eclipse

somber hull
somber hull
eternal night
#

what is the issue with maven o.O

gloomy iron
#

there is your problem

gloomy iron
eternal night
#

sure fam, I can spend days upgrading to their new not backwards compatible release

#

idk, not using eclipse nor gradle seems like a very personal opionion

ivory sleet
#

Both gradle and maven work at their finest

eternal night
#

^^

somber hull
#

idk i use eclipse because intellij is too confusing

#

Like, i could use it

#

But it just doesnt look as good, it trys to look smooth but it doesnt do it right

#

And it just looks- off

#

and eclipse is just so much simpler

#

you push button, code go there

toxic gorge
#

hi, Sorry to interrupt your conversation, I am new to the discord server I would like a little information: you would have an Economy plugin advised me. thank you in advance^^

quaint mantle
#

Could not pass event AsyncPlayerChatEvent to zAChat v1.0
org.bukkit.event.EventException: null
ru.zachat.ChatHandler.onChat(ChatHandler.java:25)

for (Entity near : p.getNearbyEntities(16,16,16)) { // <---- 25 LINE
                if (near instanceof Player) {
                    Player nearby = ((Player) near).getPlayer();
                    nearby.sendMessage(e.getFormat());
                }
            }
#

what is wrong?

eternal night
#

can you even use getNearbyEntites off the main thread

somber hull
#

make a runnable

gloomy iron
somber hull
#
Bukkit.getScheduler().runTask(`main class`, new Runnable() {
            @Override
            public void run() {

            }
        });
quaint mantle
#

now i know how to start sync task in async

somber hull
#

Ok, so i have a list of materials in my config. Im trying to get them with for Material i : config.getlist()

#

and its suggesting that i change it to a Object rather than Material

lunar schooner
#

So it depends on how you store them in your config, I imagine it's just a List<String> right?

somber hull
#

yea

lunar schooner
#

What youll want to do then is for(String i : config.getList()) {}, or ``config.getList().forEach((i) -> {});`

somber hull
#

but how do i then convert the string to a material

ivory sleet
#

Material.matchMaterial(String) would be one way

somber hull
#

thank you good sir

lunar schooner
#

valueOf would work too

somber hull
#

also its still askiung me to do object

#

rather than string

lunar schooner
#

Material m = Material.valueOf(i.toUpperCase());

somber hull
#

for(String i : plugin.getConfig().getList(""))

ivory sleet
lunar schooner
#

If it's an illegal argument, then yup, as expected

somber hull
lunar schooner
somber hull
#

ok thanks

#

wait

#

cant i just cast a material then

lunar schooner
#

Nope

ivory sleet
#

getStringList works also

lunar schooner
#

Just looked through my own source code, I use material.matchMaterial(String)

somber hull
#

ok

#

it works now

lunar schooner
#

This is the entire part, if it helps you any:

        List<String> recipeKeysList = this.getConfig().getStringList("recipeKeys");
        
        for(String str : recipeKeysList) {
            String[] parts = str.split("<-->");
            
            char key = parts[0].toCharArray()[0];
            Material m = Material.matchMaterial(parts[1]);
            
            if(m == null) {
                plugin.logWarn("Invalid material for Torch recipe: " + parts[1]);
                plugin.logWarn("Errors may occur from now on!");
            }
            
            recipeKeys.put(key, m);
        }
maiden briar
#

Minecraft 1.17 is out! Now we have to wait for spigot to update

twin venture
#

so i made a skypvp plugin and my problem is i can't seems to get the CombatLog [ custom within the plugin ] to work correctly .

#

the combat log is working only 1 time . first time

#

when i hit player .

#

but after its not even work

chrome beacon
#

Why not use CombatLogX 😉

twin venture
#

well i have custom death / kills count ..

#

custom PlayerData ..

chrome beacon
#

Then hook

twin venture
#

hook what?

chrome beacon
#

Hook CombatLogX and just add support for your stats

#

It should be much easier and faster than rewriting an entire CombatLog plugin

#

||Disclaimer: I might be a part of their support team xd||

twin venture
somber hull
#

is there an easier way of updating a gui than closing it, updating it, and reopening it

#

because that resets your curser to the middle

#

nvm

#

i think you can just not close it

compact haven
#

yes

#

you just dont close it

#

LMAO

somber hull
#

lol

quaint mantle
#

While they got it open

ivory sleet
#

Aye Bomp

quaint mantle
#

Yo what up comp

ivory sleet
#

Alg hbu 🙂

quaint mantle
#

Boutta try making my own in memory cache

#

And minecraft inventories lol(separate projects)

ivory sleet
#

Intriguing, tell me in hc the results 😛

#

once you're done with your masterpiece that is

quaint mantle
#

Well see on the memory cache it’s gonna take me a while, I mean I pretty much already did the inventories

#

Just have to push my work

torn shuttle
#

guys when it spigot downgrading to 1.7? I just want to be ahead of the curve on this one

dire marsh
#

1.7 user: don't you mean.... UPGRADING!?

torn shuttle
#

one more major version and we will no longer know if the people typing 1.8 meant to say 1.18 or are actually still stuck in 1.8

chrome beacon
#

Let's just assume 1.18 by default ;/

young knoll
#

You wish

chrome beacon
#

If they're still on 1.8 it's their fault

dire marsh
#

suggestion: remove 1.8 tag from spigot plugin development section

winged portal
#

hello, how can i check for the version of a server to do things be compatible in other versions?

young knoll
#

Or if it's really old you need to use the package name

winged portal
young knoll
#

You can use whatever you want to identify it

quaint mantle
#

1.8 isn’t missing out on much performance wise at least definitely feature wise tho lol

winged portal
# young knoll You can use whatever you want to identify it

so for example in 1.8.8 its note_pling and in 1.12.2 it block_note_pling, this will work?

if (Bukkit.getServer().getBukkitVersion().equals('1.8.8')) {
    Sound.NOTE_PLIG
} else if (Bukkit.getServer().getBukkitVersion().equals('1.12.2')) {
    Sound.BLOCK_NOTE_PLING
}```
torn shuttle
#

buddy

quaint mantle
#

See what happens

torn shuttle
#

that's compatible with exactly two versions

#

is that what you want

winged portal
torn shuttle
#

it's a bad one

lunar schooner
#

Not necesarilly tbh

winged portal
lunar schooner
#

It correctly describes the wanted behaviour. Whether it's the best solution is a different one 🙂

#

Personally I'd do a bit of parsing to figure out the x in in 1.x.y, then compare that

ivory sleet
#

I just wanna say we got a new command 😛

lunar schooner
#

Oh do tell!

ivory sleet
#

?learnjava

undone axleBOT
torn shuttle
#

I somehow doubt this is actually the intended behavior tbh

lunar schooner
#

Sololearn 10/10

chrome beacon
#

Wat since when is there a learn java command 👀

young knoll
#

Woo

torn shuttle
lunar schooner
young knoll
#

I usually link people W3 schools

#

Not sure how good it is tbh

lunar schooner
#

W3 for Java is pretty terrible in my opinion

torn shuttle
#

programmingbydoing is how I got started, the rest wasn't really doing it for me

lunar schooner
#

I cant even load the image /s

tacit quest
#

if i have in config.yml a string with & for colors, how i can parse those codes when i use that string in .sendMessage

#

?

lunar schooner
young knoll
#

ChatColor.translateAlternateColorCodes

ivory sleet
#

@torn shuttle sure

torn shuttle
#

thanks

lunar schooner
#

stick it in here directly

ivory sleet
#

Is that all Java Magma?

winged portal
#

ChatColor.translateAlternateColorCodes('&', 'message here')

torn shuttle
winged portal
#

verify yourself first

lunar schooner
#

why increment just to decrement?

#

where is the null printed.

tacit quest
#

Thanks @lunar schooner and @young knoll

lunar schooner
#

Happy to help !

winged portal
lunar schooner
#

Yes. I'm not sure about the Sound class itself, but if it is the way as you describe it will

#

Though I would definitely change your version detection

torn shuttle
#

lol I'd share teh code I wrote to compare versions but reading back it's really not great

#

it's crazy how much you pick up over the years huh

lunar schooner
#

E.g ```java
String version = Bukkit.getServer().getBukkitVersion().split(Pattern.quote("."))[1]
if(version > 12) {
...
} else if (version < 12) {
...
}

torn shuttle
#

guess I can rewrite it

torn shuttle
#

I'll clean it up and share it

winged portal
#

ok

lunar schooner
#

it's pretty eh, but it works 😂

opal juniper
#

Anyone know of how to get a lot of player heads - but with the texture of country flags

lunar schooner
#

Then show me that code 🙂

#

if the null is your issue

#

missing % i'm guessing. I'm not familiar with Skript, but I'm guessing it should be %player% and %balance%

wise kite
#

oh the playerdata? sec

lunar schooner
#

So riddle me this, why use Skript when you can broadcast directly from code?

#

Bukkit.broadcast(String) if I remember

wise kite
#
    public double getBalance(OfflinePlayer offlinePlayer) {
        Double i = PlayerData.getIntOF(offlinePlayer, "Coins");
        i++;
        i--;
        Bukkit.broadcastMessage(i + " in code.");
        return i;
    }
ivory sleet
#

line 4 and 5 are redundant

winged portal
#

@lunar schooner this will work for version to version?

String version = Bukkit.getServer().getBukkitVersion().split(Pattern.quote("."))[1]
if(version > 12 && version < 1.13) {
  ...
} else if (version < 12 || version > 1.8) {
  ...
}```
ivory sleet
winged portal
#

i use vault as a softdependencie

winged portal
lunar schooner
woeful perch
#

is 1.17 spigot out??

lunar schooner
woeful perch
#

thx

winged portal
torn shuttle
#
    /**
     * Compares a Minecraft version with the current version on the server. Returns true if the version on the server is older.
     *
     * @param majorVersion Target major version to compare (i.e. 1.>>>17<<<.0)
     * @param minorVersion Target minor version to compare (i.e. 1.17.>>>0<<<)
     * @return Whether the version is under the value to be compared
     */
    public static boolean serverVersionOlderThan(int majorVersion, int minorVersion) {

        int actualMajorVersion = Integer.parseInt(Bukkit.getBukkitVersion().split("[.]")[1]);
        int actualMinorVersion = Integer.parseInt(Bukkit.getBukkitVersion().split("[.]")[2]);

        if (actualMajorVersion < majorVersion)
            return true;

        return actualMajorVersion == majorVersion && actualMinorVersion < minorVersion;

    }

this (probably) works, haven't tested yet

lunar schooner
#

I'd use Pattern.quote

torn shuttle
#

yeah that's also fine

winged portal
torn shuttle
#

missing an if statement but that's the general idea

#

actually no

#

because it's a single argument

#

so

if (VersionChecker.serverVersionOlderThan(8, 0) && VersionChecker.serverVersionOlderThan(12, 0){
while (true) 
sendMagmaGuyMoneyOnPayPal();
}
#

mind you that's redundant

#

if it's older than 8 then it sure as shit is older than 12

#

but you get the idea

shut oyster
#

Im tryna create an itemstack with the SKULL_ITEM Material, but for some reason it isnt there. Only LEGACY_SKULL_ITEM and others. Any clues?

young knoll
#

Flattening

#

What type of skull do you want

torn shuttle
#

you're going to have to mess with skull meta prolly

shut oyster
#

tryna use a custom texture and add it onto the meta, for that i would need SKULL_ITEM pretty sure

ivory sleet
shut oyster
#

im running latest from buildtools

ivory sleet
#

or nvm

shut oyster
#

Ill see if player_head works, thanks

ivory sleet
#

what was the issue?

regal coral
#

hey, does someone have the same issues with Timed Rewards | MySQL | [1.8-1.16] 3.3.13 ?

chrome beacon
#

"same"

#

Five stars for that explination of what your issue is

regal coral
#

hey man, sorry i thought everyone has problems. So apparently if I implement this plugin it works all fine until i do /trs reload, after that it just does not display the objects from /rewards, and it doesnt matter if i change anything in the .yml, even if i do not change anything it just disappears

bitter ridge
#

entity.setVelocity​(Vector velocity) What do I set as velocity if I want the entity to be launched toward the player like 1 or 2 block infront the player?

wild inlet
#

registerNewObjective wants a component

tardy delta
#

can people already make minecraft 1.17 servers?

wild inlet
#

Yet I don't see it in the Javadocs

#

Anyone know what's going on?

tardy delta
#

oh

#

and whats the difference between PlayerJoinEvent and PlayerLoginEvent?

paper viper
#

that was my dog

sturdy venture
#

prove it

quaint mantle
#

playerjoinevent is called at when about the 'Name' has joined the server part happens

tardy delta
#

owh okay

ivory sleet
#

If you wanna mess with game involving stuff like teleporting the player then use PlayerJoinEvent

chrome beacon
#

Because it's outdated

ivory sleet
#

I mean it's the definition of ancient at this point

candid galleon
#

Remove versions below 1.13

tardy delta
#

omg doggo

wild inlet
#

Anyone know why the Javadocs for scoreboards take strings while the API actually takes components?

ivory sleet
#

do u use paper api?

valid vigil
#

Can I have multiple players open the same custom inventory? Will they be properly synchronized?

ivory sleet
#

yes

valid vigil
#

thanks

wild inlet
#

But could be

ivory sleet
#

they use it altho its deprecated in favor of adventure

ivory sleet
wild inlet
#

Oh, you just mean Components?

wild inlet
ivory sleet
#

sure link me

wild inlet
#

Uses strings, non-deprecated

#

While the API I'm looking at uses components

ivory sleet
#

Yes because you're depending on paper api

#

I think at least

#

there

wild inlet
#

You're right

#

Google gave me the 1.13 docs

#

God knows why

ivory sleet
#

ah

#

lmao

wild inlet
#

Anyway, makes sense

#

Are components generally considered better here?

#

I can see why you'd use them if they're available

#

But I'm not sure exactly what they can do

#

That others can't

paper viper
#

If you are using Paper API, always use components

wild inlet
#

Not as if you can make click events for the scoreboards

wild inlet
#

Adds a little time to dev to do so

#

(I know they get parsed to components anyway)

paper viper
#

Actually, it will save you a ton of concatenation nightmares

ivory sleet
#

I mean I guess it's good in regards to hover events, click events, translatable messages etc but its significantly more verbose consider normal strings and the special syntax given for them merely

paper viper
#

After all, they are deprecated in the api for a reason - to force devs to use the adventure api more

#

But in this case, I feel like the extra verbosity is def worth

#

the quality it brings on the table

wild inlet
#

Can the scoreboard actually make any use of the JSON message stuff?

#

Like there's no click events etc AFAIK

paper viper
#

In adventure?

wild inlet
#

Yeah

ivory sleet
#

I mean the components are glorified json messages

paper viper
#

uh there are click events?

#

in adventure

wild inlet
#

To me JSON messages = Components = Adventure

wild inlet
#

Unless I'm wrong

ivory sleet
#

Component.text("")

#

thats probably the most essential one you should know

paper viper
#

to add the basic color you can do

#

NamedTextColor

#

Like Component.text("I am red!", NamedTextColor.RED)

wild inlet
paper viper
#

No

#

not for Spigot

wild inlet
#

Thought as much

paper viper
#

however, it is for Paper api

wild inlet
#

Oh, interesting

ivory sleet
#

You can call the toString method I believe or smtng if u wanna use it in spigot

paper viper
#

No need

#

you can shade it in

#

and use audiences

#

unless you referring to getting the json?

ivory sleet
#

Audiences is only for sending stuff right?

wild inlet
#

Nah

#

But anyway - I was wondering if there was any benefit vs using ChatColor

#

Other than performance of course

#

ClickEvents hoverevents etc

ivory sleet
#

ChatColor is a bungee chat thing

paper viper
#

Actually, adventure is known to hog quite a bit of memory

wild inlet
#

I can't imagine scoreboard actually doing anything

ivory sleet
#

NamedTextColor is an adventure thing

wild inlet
#

Every time I ask a simple question you guys do not answer it

paper viper
#

Scoreboards?

wild inlet
#

Does scoreboard make use of any json features like clickevents etc?

ivory sleet
#

no

paper viper
#

Uh.. no

wild inlet
#

Figured, thanks.

paper viper
#

does it look like you can click on one?

#

lol

wild inlet
#

Cheers for the other enlightenment

quaint mantle
#

bofa

wild inlet
#

If components are being used I tend to think they'd put it in for a reason

#

Or maybe there's another special component based feature that can be used

hardy lagoon
#

Hey, how would I loop all the servers, I know you loop ProxyServer.getInstance().getServers(), but what do I set each loop value as?

#

(i want to do something on each server)

paper viper
#

Go into the implementation of the method

austere cove
#

wdym set each loop value

paper viper
#

and see the type

hardy lagoon
#

I looked it up on the doc, and it returns a map (unless im using the wrong method)

paper viper
#

what

sharp bough
#

getOnlinePlayers *

hardy lagoon
paper viper
#

^

hardy lagoon
#

I want to run a command on each of the servers

sharp bough
#

ooh

#

sorry

#

i misread

icy nacelle
hardy lagoon
paper viper
#

Look at the error

#

not applicable to X

#

because it is a map, you have to likely loop through the Entry set of the map

#
for (Map.Entry<String, ServerInfo> server : ProxyServer.getInstance().getServers().entrySet()) {

}
#

try this

hardy lagoon
#

I've got that far, but now I need to figure out what goes there

#

Also that still gives the same error

paper viper
#

i updated it

#

try again

valid vigil
#

can I use == for inventories to see if an inventory event is about the inventory I care about?

paper viper
#

No

hardy lagoon
#

Hmm, ok, no errors, ill give this a try and see if I can even use this lol

#

since i might need a messaging channel if this idea doesnt work

ivory sleet
paper viper
#

^, that's why I said no so you wont use it as it is not good

ivory sleet
#

yeah lol

valid vigil
ivory sleet
#

One way is InventoryHolder, another way is InventoryView

paper viper
#

you should never use getName(), also i beleive the method was removed

#

at some point of time

paper viper
#

lol

ivory sleet
#

🥴

valid vigil
#

so do I compare the titles of the InventoryViews then?

paper viper
#

Get the idea of comparing titles out of your mind

#

you shouldnt do that

valid vigil
ivory sleet
# valid vigil so do I compare the titles of the InventoryViews then?

I mean it may sound like a convincing design but think let's take an example. For instance we might wanna compare humans. It might work if we base it of names, as an example Josh is not equal to Bob. However multiple humans might go with the same name and then we can't uniquely identify every human.

#

yes Player#spigot()#sendMessage

valid vigil
#

I know comparing names is far from a clean thing to do but honestly I doubt any other plugin will be using the same inventory names, and you're not offering an alternative

#

I don't wanna be comparing names but if that's my only option I'm gonna do it

ivory sleet
#

Well I mentioned 2 other ways

#

no that wasnt for you

valid vigil
# ivory sleet Well I mentioned 2 other ways

One way is InventoryHolder, another way is InventoryView
that is pretty vague, I was told that just comparing the inventories wouldn't work because it might just be a wrapper inventory, I assumed the same might be the case for InventoryView

ivory sleet
#

uh no its shaded

valid vigil
#

also, optimally I wanna compare it to an inventory I created earlier, regardless of who the player interacting with it is, having it opened by multiple players

ivory sleet
#
//method one
class Menu implements InventoryHolder {
  final Inventory inv = Bukkit.createInventory(...);
  
  @Override public Inventory getInventory() { return inv; }
}
class MenuListener implements Listener {
  final Menu menu = new Menu();

  @EventHandler void onClick(InventoryClickEvent event) {
    Inventory inv = event.getClickedInventory();
    
    if (inv == null) {
      return;
    }

    if (!(inv.getHolder() instanceof Menu)) {
      return;
    }
    
    //do stuff
  }
}

I believe coll has a good example of how InventoryView would be used. @young knoll

#

Yeah what are you doing rn?

deft geode
#

Which value of the effect enum is the tnt explosion effect? i dont see it

young knoll
#

The simplest way is to add the view to a hashset, and then check contains in the inventory events

valid vigil
#

so I'm supposed to implement my own InventoryHolder?

ivory sleet
#

yeah with InventoryHolders you would do that

#

altho what coll said is more api friendly

#

thats thre wrong one

#

u imported the wrong TextComponent

digital plinth
#

1.17 just released today

ivory sleet
#

ye

digital plinth
#

1.16 plugins should work fine in 1.17 right?

#

they didn;t delete any features

ivory sleet
#

1.17 spigot isnt out yet

digital plinth
#

ik

#

how do I update my server tho

ivory sleet
#

which ones are available for u

digital plinth
#

when I try to load 1.16maps on 1.15 it crashes

digital plinth
#

if i remember it correctly

ivory sleet
#

hmm spigot is forwards compatible

digital plinth
#

and not backward compativle

ivory sleet
#

nope

digital plinth
#

compatible*

#

okay

chrome beacon
#

Minecraft itself isn't backwards compatible

deft geode
#

yeah

ivory sleet
#

which ones can u import?

#

I believe it should contain the term bungee in it

#

remove that one

grave rune
#

Use this one:
import net.md_5.bungee.api.chat.TextComponent;

Its working fine for me 🙂

lapis relic
#

let the IDE make suggestions

ivory sleet
#

if he uses an ide that is

lapis relic
#

You can write, for example, TextComp, you will get a list of classes/interfaces which names starts with TextComp

lapis relic
ivory sleet
#

¯_(ツ)_/¯

#

u might have to add it separately then

#

what dependency are you using btw

#

oh u should use the shaded one

quiet ice
#

We recommend maven

ivory sleet
#

did u run buildtools darthvader?

digital plinth
quiet ice
#

It also includes transitive dependencies, though the shaded one + default IDE builder will still work

visual tide
#

i found this hardcore plugin that puts you into spectator mode when you die the 3rd time, but you cant fly through walls or go through any blocks, ive looked at the sourcecode and the only thing it seems to do is p.setGameMode(GameMode.SPECTATOR)
does anyone know how i can replicate this?

ivory sleet
#

navigate to the directory in which you ran buildtools

#

?bt

undone axleBOT
ivory sleet
#

run it and comeback

ivory sleet
grave rune
digital plinth
#

hmm say if you hire someone to make a plugin for you. But you don't really trust him. You think he might put a virus in the plugin he made. How can you check the plugin?

#

but you don't understand code

ivory sleet
#

I mean then you would need to ask someone code knowledgeable

#

or just skip the commission

digital plinth
#

rip imagine if theres a antivirus for plugins

#

like disable deletion of world files and stuff

quiet ice
#

there is

digital plinth
#

link?

#

mv deletes files

quiet ice
#

optic fusion maintains one afaik

ivory sleet
#

I believe you can also configure javas security manager

digital plinth
ivory sleet
#

yeah then it might be more difficult

digital plinth
#

and you don't have access to security manager

digital plinth
ivory sleet
#

although frankly it would be kinda your own fault if one jumps into something sketchy

ivory sleet
#

just like those antiviruses which are viruses lol

quiet ice
#

like avast

#

That thing should be declared malware

digital plinth
#

umm why is there so many pl in verified chat?

ivory sleet
#

our school pcs run avast

#

lol

digital plinth
#

wait is @onyx fjord the one and only spigot dev?

quiet ice
#

uh no??

digital plinth
#

Nani?

quiet ice
#

That is md_5

#

And even then, there are more devs

digital plinth
#

and stuff

quiet ice
#

He is trooling

digital plinth
quiet ice
#

But md is the only one in charge for updates, everyone else is ... an imposter

young knoll
#

Choco also does a lot

onyx fjord
#

dont ping me tho

digital plinth