#help-development

1 messages ยท Page 2079 of 1

warm dust
#

I just have my plugin

tardy delta
#

wut

granite owl
#

actually minecraft supports multiline msgs but it has to be declared as char '\n' and not as appended string "\n"

warm dust
#

I already see this but, how or where can i download protcollib?

granite owl
#

just figured

tardy delta
#

if you just cancell the event why is the animation still there?

echo basalt
#

what type of animation?

#

arm swing? chest open?

warm dust
#

Chest open

granite owl
#
public static String parseFormattedString(ArrayList<String> args)
    {
        String s = "";
        Pattern p = Pattern.compile("#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})");
        Matcher m = null;
        
        for (String str : args)
        {
            m = p.matcher(str);
            
            if (m.matches())
            {
                s += ChatColor.of(str);
            }
            else
            {
                s += str;
            }
        }
        
        return s;
    }
```can arraylists like this cause memory leaks?
#

when going out of scope

echo basalt
#

Don't think so, but avoid using string concatenation on a loop

#

StringBuilder is O(1)

hexed hatch
granite owl
echo basalt
#

Yeah but its processing time increases exponentially

granite owl
#

its just an example tho cause i dont want to cause memory leaks

#

to then regret it later

noble lantern
#

even if its not the question at hand you should seriously use java naming conventions

#

?conventions

undone axleBOT
warm dust
#

It does the same

muted sand
#

~~can I somehow use wget to download plugins? my upload speed is being fuzzy and i dont want to wait

root@localhost:~/server/plugins# wget https://www.spigotmc.org/resources/viaversion.19254/download?version=443043
--2022-04-09 18:52:02--  https://www.spigotmc.org/resources/viaversion.19254/download?version=443043
Resolving www.spigotmc.org (www.spigotmc.org)... 2606:4700:21::681b:c35f, 2606:4700:21::681b:c45f, 104.27.195.95, ...
Connecting to www.spigotmc.org (www.spigotmc.org)|2606:4700:21::681b:c35f|:443... connected.
HTTP request sent, awaiting response... 503 Service Temporarily Unavailable
2022-04-09 18:52:02 ERROR 503: Service Temporarily Unavailable.
```~~
nvm :(
noble lantern
warm dust
arctic moth
#

any ideas?

#

on why its happening

wide coyote
#

do some debug

#

like, add a message where the first foreach (chunk) starts

arctic moth
#

wdym

#

they spawn in no other chunks

#

only that one

#

even when the chunk is unloaded

wide coyote
#

yes, thats what im talking about

#

you need to find the issue to fix it

#

and debugging is the only way

tall dragon
#

is it somehow possible to activate spawners programatically?

#

normally they have a player activation range

#

i could not rlly find a way to do this

arctic moth
#

even upon creating a new world, it still spawns only in the chunk of 8 11

wide coyote
stuck flax
#
java.lang.NoClassDefFoundError: org/bukkit/plugin/messaging/PluginMessageListener
    at java.base/java.lang.ClassLoader.defineClass1(Native Method)
    at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1012)
    at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
    at net.md_5.bungee.api.plugin.PluginClassloader.findClass(PluginClassloader.java:152)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:587)
    at net.md_5.bungee.api.plugin.PluginClassloader.loadClass0(PluginClassloader.java:66)
    at net.md_5.bungee.api.plugin.PluginClassloader.loadClass(PluginClassloader.java:59)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
    at net.md_5.bungee.api.plugin.PluginManager.enablePlugin(PluginManager.java:340)
    at net.md_5.bungee.api.plugin.PluginManager.loadPlugins(PluginManager.java:250)
    at net.md_5.bungee.BungeeCord.start(BungeeCord.java:271)
    at net.md_5.bungee.BungeeCordLauncher.main(BungeeCordLauncher.java:67)
    at net.md_5.bungee.Bootstrap.main(Bootstrap.java:15)
Caused by: java.lang.ClassNotFoundException: org.bukkit.plugin.messaging.PluginMessageListener
    at net.md_5.bungee.api.plugin.PluginClassloader.loadClass0(PluginClassloader.java:103)
    at net.md_5.bungee.api.plugin.PluginClassloader.loadClass(PluginClassloader.java:59)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
    ... 13 more

bungeecord plugin lmk if more info needed

tall dragon
#

could be wrong

wide coyote
#

you cant use bukkit api in your bungee plugin

wide coyote
supple elk
#

For something like this, what would I do if I wanted to extend Projectile which would then take new parameters?

wide coyote
tall dragon
#

make sense

#

ig il try that then, ty

wide coyote
#

np

supple elk
#

however I'm worried this will inhibit my ability to use inner classes like ```java

new Porjectile(){
@Override
project(){
//do new stuff
}
};

patent horizon
#

is there a safety check for valid numbers? I'm getting this when trying to calc a K/D ratio

java.lang.ArithmeticException: / by zero
    at net.plexpvp.core.misc.npc.Stats.open(Stats.java:87) ~[PlexPvP-1.0-SNAPSHOT-all.jar:?]```
```java
Util.format("&8ยป &eK/D: &f" + data.getKills()/data.getDeaths())```
tall dragon
#

cant devide by 0

supple elk
#

could you just check if data.getDeaths() == 0 before doing it and otherwise display something else?

#

what's spring?

quiet ice
desert musk
#

?paste

undone axleBOT
desert musk
#

and figure out this bug

#

whenever multiple people are in the server, it spams the "You have entered a nest" to all players inside of a nest

#

whenever 1 person is in the server it works fine

twin obsidian
#

How would I prevent elytra damage? It doesn't count as fall damage and I don't see a damage type for it.

desert musk
desert musk
#

lol

arctic moth
#

why is this barely lasting any time at all

((Arrow) event.getProjectile()).addCustomEffect(new PotionEffect(PotionEffectType.LEVITATION, 10, 3, false, true), false);
#

like it lasts about 1 tick

#

even though its 10 second duration

#

or is it in ticks

#

its in ticks isnt it

arctic moth
#

fsuihufhdsjfhsdkdhfjdshkf

desert musk
#

lole

supple elk
#

it's always in ticks ๐Ÿ˜‰

supple elk
#

so it works...

#

kinda

#

however I have to make stuff public/protected if I want to be able to do this

golden turret
#

why the sendTitle dont work

#

i tried with sendMessage and it worked

#

this is inside a sync runnable which is executed every tick

wooden fable
golden turret
#

wtf

#

it worked

#

thanks

wooden fable
#

Np

sterile token
# supple elk

Maybe you can do a static builder getter instead of calling directly the builder class

smoky oak
#

is there a javadoc macro to the effect of 'same javadoc as that method'?

lavish hemlock
#

/** @inheritDoc */ iirc

#

But it only works on overridden methods

smoky oak
#

dang it but thanks

#

(im asking bc of nullable operator overloaded methods)

tiny wolf
#

using the PlayerItemHeldEvent event what's better?
A. using the newSlot number and getting the item using inventory method something like:player.inventory.getItem(newSlot
B. just use player.inventory.itemInHand?

left swift
#

How can I automatically deploy jar to my server after building? (best using intellij idea deploy tool)

supple elk
sterile token
supple elk
#

without making the constructor public

smoky oak
#

has World::getNearbyEntities a spherical or cuboid area

supple elk
#

probably finds magnitude of the difference between position vectors

#

which would result in spherical

smoky oak
#

wait

#

it can use bounding box

supple elk
#

that's true

smoky oak
#

is there a stack trace

chrome beacon
#

?paste send it

undone axleBOT
chrome beacon
#

How are you spawning the entity

#

Also what does the custom entity class look like

spring pike
#

how can I change join messages now that .setJoinMessage is deprecated?

chrome beacon
#

Read the deprecation note

#

Yes

delicate lynx
spring pike
#

bruh moment

delicate lynx
#

no, just Component

chrome beacon
#

Well uh that's a mess. Anyways try without adding PathfinderGoalAvoidTarget

#

You are? Line 57

#

Or is it in a comment?

cursive loom
#

Hey I search to make a sellchest plugin but I want wen i place a chest a sign get automatically place on the face of the chest do you know how I can do that ?

left swift
#

Is there any way to automatically deploy jar to the server after building?

chrome beacon
#

Yes you can set the output folder

quaint mantle
left swift
chrome beacon
#

That would be unsafe

left swift
#

Why?

supple elk
quaint mantle
#

Can I have it please ?

supple elk
#

yeah sure

#

dm me

quaint mantle
#

I did ๐Ÿ™‚
Thanks!

#

just looks like eclipse dark

delicate lynx
#

check block place event, see where the player looks if they place a sign, move the sign if it's on a chest to the front

cursive loom
#

Yes but how I can get the front ?

chrome beacon
#

How many versions are you targeting with your plugin?

#

Yeah that code is pretty much only going to work with 1.17 and maybe 1.18

echo basalt
#

damn reuse some code won't you

chrome beacon
#

You can. You just need even more. You cannot import any NMS classes

#

You are

#

import net.minecraft.world.entity.ai.goal.PathfinderGoalAvoidTarget; import net.minecraft.world.entity.ai.goal.PathfinderGoalRandomStrollLand; import net.minecraft.world.entity.ai.goal.PathfinderGoalZombieAttack; import net.minecraft.world.entity.ai.goal.target.PathfinderGoalNearestAttackableTarget; import net.minecraft.world.entity.monster.EntityZombie; import org.bukkit.Bukkit;

#

And CraftWorld

echo basalt
#

then remove it

left swift
chrome beacon
#

Uploading jars automatically to your server is a bad

#

Are you just using it for testing?

left swift
#

Yeah

chrome beacon
#

Then I guess it's relativly fine just make sure to use sftp

patent horizon
#

how could i get a java class by it's name? and not the entire class directory, just the class

arctic moth
#

what event should i use for during the dragons pillar respawning phase on each pillar

#

like is there an event for when a crystal gets respawned

left swift
arctic moth
#

oh no why

#

ew

#

scary

#

ahhhhhhh

#

but how do i detect if its spawned from the respawn phase

#

cuz if someone places a crystal during that phase, itll also think that it's spawned from the phase if it just check the current phase

cursive loom
#

Hey do you know how I can do somthing like this ?

if(block.getRelative() == BlockFace.NORTH)

quaint mantle
#

what are you trying to do basically

arctic moth
quaint mantle
#

nah mr54180

cursive loom
#

I want to place a sign on the front of a chest

arctic moth
#

but idk what

chrome beacon
#

You can listen to the entity place event and ignore those entities

arctic moth
#

im not trying to do it for when someone places it tho

#

im trying to do it during the dragon respawn phase

#

like when the beams of the 4 in the center respawn a pillar

chrome beacon
#

Yeah but you wanted it not to do something with other entities so you add them to the ignore list

quaint mantle
#

try this

arctic moth
#

EntityPlaceEvent i think only registers when the item is used to place it

chrome beacon
#

Correct

quaint mantle
arctic moth
#

well its not using an item

chrome beacon
#

Use the EntitySpawn and PlaceEvents together

arctic moth
#

wdym

#

@chrome beacon

quaint mantle
#

oh yeah

#

you have to modify the sign after you place it

cursive loom
#

I have the same problem with my way where I try with player YAW

#

Yes but is that my problem x)

#

I don't know how I can do that

quaint mantle
#

just

#

jesus

#

im spoonfeeding okay

chrome beacon
# arctic moth <@437524407435395082>

I'll have to get some sleep now so I will make this quick..

Listen to the place event and add the entities to an ignore list or use pdc

Listen to spawn event and if the entity isn't ignored and is spawned during the correct phase do your logic

quaint mantle
#
Block block = event.getBlock();

if (block.getBlockData() instanceof Chest chest) {
    BlockFace face = chest.getFacing();
    Block signBlock = block.getRelative(face);

    signBlock.setType(Material.OAK_SIGN);
    signBlock.setFacing(face);
}

@cursive loom

arctic moth
cursive loom
arctic moth
#

do i just

#

like

#

runnable?

#

xD

chrome beacon
#

I assume place would be fired first

#

Just test it

cursive loom
chrome beacon
#

setFacing requires another type than block

#

Directional iirc

quaint mantle
cursive loom
quaint mantle
#

uhh no cause you have to set the type

#

so

#
signBlock.setType(Material.OAK_SIGN);
((Directional) signBlock).setFacing(face);
#

inline casts are ugly

#

but you can change it

sonic cosmos
#

how i can get from - 'PROTECTION_ENVIRONMENTAL:4' number 4? I made this but i have error with it

for(String enchants : this.instance.getConfig().getStringList("shop." + item + ".enchants")) {
  String enchant = enchants.split(":")[0];
  int enchantLevel = Integer.parseInt(enchants.split(":")[1]);
}
java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1
quaint mantle
#

weird

#

ok try

cursive loom
#

Ok wait I error with the Directional line

quaint mantle
#
    BlockFace face = chest.getFacing();
    BlockState sign = block.getRelative(face).getState();

    sign.setType(Material.OAK_SIGN);
    sign.setFacing(face);
    sign.update();
pliant oyster
arctic moth
#

is this my problem or just spigot being spigot

sonic cosmos
pliant oyster
pliant oyster
#

do

cursive loom
quaint mantle
#

you imported the wrong thing it seems

#

show your imports

#

also you're running paper

pliant oyster
quaint mantle
#

you should be asking in paper

pliant oyster
arctic moth
cursive loom
#
import com.songoda.skyblock.api.SkyBlockAPI;
import fr.herllox.hinitial;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.block.BlockState;
import org.bukkit.block.DoubleChest;
import org.bukkit.block.data.Directional;
import org.bukkit.block.data.type.Chest;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockPlaceEvent;
pliant oyster
arctic moth
#

oh

#

yay

cursive loom
arctic moth
#

tbh it probably might be because of this

quaint mantle
#

im just trying to figure out why that wont work

pliant oyster
#

I uploaded my first coding tutorial today ๐Ÿ˜Ž

pliant oyster
#

I can help in dms

#

I have to go soon

cursive loom
pliant oyster
#

?paste

undone axleBOT
quaint mantle
#

are nametags usually dull?

#

im sure the pixels are pretty pixel-ish

cursive loom
quaint mantle
#

go ahead

#

im kinda busy rn sorry

cursive loom
#

Np

quaint mantle
#

(i cannot verify yet because i just locked myself out of my spigotmc account, and then my gmail account)

mortal hare
#

oh man

#

i love reverse engineering

#

i crashed 50+ times today because assembly debugger uses base 16 instead of base 10

#

while IDA uses base 10 for disassembly

#

all i needed to change: add esp, 12 -> add esp, C and it started to work

#

im crying

fierce hawk
#

How can I find the slot that an item ends up on when either shift-clicked or moved manualy using the InventoryClickEvent?

echo basalt
#

if it's clicked manually, event.getSlot while the cursor is not null

#

if it's a shift-click, you need to loop through the opposite inventory, check each item in order for a match, or locate an empty slot

fierce hawk
#

The manual part should be easy however the shift click is different because I need to see if the item ends up in a specific slot by using getRawSlot(). If I understand your reply correctly, you are saying where the end slot can be.

echo basalt
fierce hawk
echo basalt
#

getRawSlot returns the clicked slot but taking into account the clicked eventory

#

this is a sloppy demonstration

#
if(clickedInventory.equals(view.bottonInventory))
  rawSlot = clickedSlot + view.topInventory.size;
#

in reality it's kinda calculated the opposite way iirc

cyan compass
#

I have a question:

If i have a structure (.nbt format like vanilla structure blocks), How might i replace certain blocks in that file upon loading it

#

Say white glass into cyan glass

#

(currently i'm using structureblocklib to load it)

echo basalt
cyan compass
echo basalt
#

then you can paste a schematic or set the block types

#

But hmm

#

Since you want to replace data written in files, rather than when pasting it

#

you need a hex editor

cyan compass
#

I'm okay with doing it when pasting

echo basalt
#

Well, there's also ChunkLoadEvent and things like that

#

I mostly do my block matching with this class

#

Closest thing I have to your problem

graceful oak
#

Hey guys so I am saving arrayLists to a yml file to keep data between server close and startup is there a way to display the arrayList in one line instead of the one per line format its in right now?

This is how it is showing now:

Completed:
    - false
    - true
    - false
    - false
    - false
    - etc...

I am looking for something like this:

Completed:
    - false, true, false, false, etc...
noble lantern
graceful oak
#

So im assuming there is no easy way to convert it other than formatting it myself?

quaint mantle
#

i mean why keep it on one line

noble lantern
#

pretty much yes you can do [true, true, true] but idk how to save it that way via code

quaint mantle
#

try converting it to an array

graceful oak
#

I was just looking for a cleaner way to sort everything because I currently have 3 lists being stored in this file

noble lantern
#

well its not like youll be manually editing them

#

your code will just be storing them and loading them

quaint mantle
#

i mean if you're really that picky you can store them as ones and zeros in a string

#
completed: "0100"
graceful oak
graceful oak
noble lantern
#

you could do what imajin did up above ^

#

sometimes someone might need to manually edit a value but in all reality if its just for storing stuff between restarts its fine

#

if you want it to really look nice you could store it using a json lib like gson

#

those have one-liner arrays (or try casting the List to array as imajin said for YAML)

graceful oak
#

Yeah at the end of the day I already have it setup in Yml so I wont be too picky

#

Also with notpad ++ I am able to collapse the tabs so I guess thats a good way to look through easier

fierce hawk
graceful oak
#

Now would it be too intensive to live update a file when something is done in game? I was told it might be better so people dont lose progress on a crash or if something like that occurs

#

or would it be a better system to just every 5 min do a save instead of when something occurs

noble lantern
#

and save on server close ofc

#

dont do server closing saves async, there is a chance if saving takes too long it wont finish and wont save

#

other saves can be done async

echo basalt
quaint mantle
#

i havent heard that word in a while

noble lantern
#

clusterfuck or async

quaint mantle
#

both

noble lantern
quaint mantle
#

i need to get back into plugin development

#

i still have all of my knowledge, i just lost motivation

noble lantern
hexed hatch
#

make a plugin that gives mobs ninja tactics

echo basalt
#

make a plugin that allows mobs to backflip

lavish hemlock
#

I will stand behind my opinion of Bukkit being shit

quaint mantle
lavish hemlock
#

I had an idea for a modified server that would allow you to use a special kind of plugin called an "extension."

#

These would allow you to use Mixin to directly modify shit and could allow for multiple API support

#

e.g. it comes with some more modern API but you can also add a Bukkit extension

hexed hatch
#

I would love to use a platform that has the performance boost of Paper with mixin support

lavish hemlock
hexed hatch
#

the performance difference is the only reason I don't put my servers on fabric

lavish hemlock
#

It would also allow you to customize the server to your liking if you wished

#

So yeah, cool concept in my eyes

#

Also server jars would use Yarn mappings so NMS wouldn't require reflection

#

MCP is outdated, and Mojmap is illegal

#

So, Yarn suffices

lavish hemlock
#

'specially if you use Lithium

hexed hatch
#

Is it?

quaint mantle
#

someone recode a minecraft server in rust

lavish hemlock
#

Yeah

hexed hatch
#

Maybe I've just been looking for excuses to not run a fabric server

lavish hemlock
#

It's quite lightweight compared to something like Forge

#

It loads way faster, uses less memory, and results in higher FPS

hexed hatch
#

I should give it a shot. I've been wanting to write my own AI for mobs for a long time and other server-side mechanics for a long while now

lavish hemlock
#

Also has better FPS mods

lavish hemlock
quaint mantle
#

well im making a multiplayer game purely in rust rn

lavish hemlock
#

There is a Rust-based Minecraft server

quaint mantle
#

already?

lavish hemlock
#

It's just not complete at all

quaint mantle
#

repo?

lavish hemlock
quaint mantle
#

this will actually be extremely influential if it gets completed

#

i wanna contribute ๐Ÿค”

noble lantern
#

go mc server when

lavish hemlock
#

There's also some custom client implementations

#

They've been worked on for literal years

#

and...

#

are barely finished.

#

Yeah the from-scratch client scene is fucked, it's impossible to reimplement all of Minecraft without a fucking team of people.

#

I met the dev of one, his client uses Swift and is quite impressive, but not playable

quaint mantle
#

hmmm

#

you're making me want to write a multiplayer 3d game in rust

lavish hemlock
#

I mean

#

Bevy exists

patent horizon
#

is it possible to put a return statement in a scheduled task

#

i want to repeat a method every time it finishes it's course

fallow valley
#

Is it possible to get a player's maximum health capacity including health boost if any? I mean using get attribute only returns 20 and doesn't account for health boost.

echo basalt
fallow valley
#

ah that makes sense thanks.

echo basalt
wheat abyss
fierce hawk
hybrid spoke
arctic moth
graceful oak
#

I am trying to create a temp map to remove keys/values from to prevent myself from picking duplicates out of it but when I remove a value/key from the temp map it also removes from the map I create the temp map from. I am assuming the temp map is still pointing to the main map how do I make them entirely different maps? This is what im doing right now:

temp.putAll(QuestCreator.questMap);

Would I have to loop through and put each value in on its own to separate them or am I doing something wrong

quaint mantle
#

wtf are you doing

graceful oak
#

So I have a map <Int, Quest> and I want to make a temp version of it that I can remove keys out of to prevent myself from choosing duplicates from my random number gen but when I try to make the temp map and remove key/val from it it removes it from the other map aswell.

Quest is an object I made just to be clear

graceful oak
noble lantern
#

Whats the name of the event for block state changes

#

i cant remember it

#

i guess i have to use PlayerInteractEvent sad

echo basalt
noble lantern
#

Trying to tell when a state of a noteblock changes, would of assumed theres some type of block state change event but ill just use interact event

noble lantern
#

ohhh

#

well thing is

#

would that trigger on right clicks too?

#

Since its technically changing the note

echo basalt
#

probably

#

the game doesn't really fire any events here

quaint mantle
echo basalt
#

yeah just thought of that

noble lantern
#

ill try that event few mins

#

so it works for left clicking

#

well

#

kinda

#

oh my loader isnt loading my blocks lmfao

noble lantern
#

fucking hell im an idiot

#

"Why the fuck arent these loading"

doesnt spell my own name right

#

yeah the NotePlayEvent only works for left clicks as by the time the note block plays the actual notes different than the previous one

last citrus
#

Hello! I am making a plugin similar to LifeSteal but instead of hearts its time that you steal. I already have almost the entire plugin done but I need help with some things that I cant seem to figuring out. How the plugin works is as you play on the server you gain time that you can use to speed up and slow down time (Potion effects). The longer the time the longer the effects. When you kill someone though you can steal 15% of their time. I am having trouble adding a cap to how long the potion effects can be and adding the stealing part. Can anyone help me?

last citrus
#

What about the time stealing part though?

quaint mantle
#

its actually really easy

#

i cant really explain it without like making the plugin for you

#

ok basically load them from however you gonna store there time

#

you can use a config for this

#

then add them to a hashmap

#

and whenever you wanna access that time

#

well

last citrus
#

Right now im using the built in statistic

quaint mantle
#

playtime?

last citrus
#

Yes

#

int secondsPlayed = p.getStatistic(Statistic.PLAY_ONE_MINUTE) / 20;

quaint mantle
#

doesnt really work like that but okay

#

i think your time calculations are a bit off

last citrus
#

Oh ok

dapper sapphire
#

How do I get Player from HumanEntity?

last citrus
#

How would I do the config and hash map thing. Iโ€™ve never really done anything like that

noble lantern
#

who pinged?

dapper sapphire
noble lantern
#

You would cast Player to your HumanEntity variable/instance you have

noble lantern
last citrus
# quaint mantle well

Would making it so the server adds the player and a number to a file work? Every time the player is killed the number goes down and every time they kill someone it goes up then we just add that number to their current time on the server

noble lantern
#

so yes doing that would work

last citrus
#

Ok

wet breach
#

adding a cap isn't hard o.O

#

I mean it is just an arbitrary number you decided on lol

lofty laurel
#

I haven't touched Java for a while, anyone know how to fix this?

jagged thicket
lofty laurel
quaint mantle
#

you need to get an instance of Chat

sweet pike
#

yo, so let's say i have an instance of PlayerMoveEvent, and im simply trying to amplify the direction that they are going in with a vector, but not reliant on where they are looking. So for example, if a player presses A, they'd be launched in that direction with a vector

#

my knowledge on vectors are pretty sad so if anyone could help out that would be appreciated

waxen plinth
#

e.getPlayer().setVelocity(e.getTo().subtract(e.getFrom()).toVector().multiply(5));

sweet pike
#

could you quick just explain this for me?

quaint mantle
#

he said hes too tired

#

pretty sure he just went to bed

wet breach
#

or in this case you just want to amplify how far they go. Also keep in mind that you have to be mindful about the server configuration as if you make them go to fast the server may complain

sweet pike
wet breach
#

well at least you were honest about understanding vectors

#

so the method you are asking about, is to just get a vector in where they are going, and then it multiplies it by a factor of 5 thus launching them

#

unless you want to launch them in the air

#

in which case you need to do a bit more math

#

all a vector is, is a direction and velocity in the given direction

sweet pike
#

right okay

sleek flume
#

can someone help me please, im trying to make a plugin that adds custom chickens to the game and that removes all other mobs, but everytime a chicken dies, a couple of new one spawns at the same place, i think this has something to do with the item drops but im not sure. this is my code: ```java
@EventHandler
public void onMobSpawn(EntitySpawnEvent e){
Entity mob = e.getEntity();
if (!(mob.getType() == EntityType.DROPPED_ITEM || mob instanceof Player || mob instanceof Chicken)){
Location loc = mob.getLocation();
mob.remove();

        ExplodeChick.createChick(loc);
    }
}``` and this is my other code:
#
new BukkitRunnable() {
            @Override
            public void run() {
                if (!chick.isDead()) {
                    if (chick.getTarget() == null) {
                        for (Entity entity : chick.getNearbyEntities(10, 10, 10)) {
                            if (entity instanceof Player) {
                                Player player = (Player) entity;
                                chick.setTarget(player);
                            }
                        }
                    } else {
                        LivingEntity target = chick.getTarget();
                        if (target.getLocation().distanceSquared(chick.getLocation()) < 25) {
                            chick.getWorld().playSound(chick.getLocation(), Sound.ENTITY_CREEPER_PRIMED, 5, 5);
                            chick.getWorld().spawnParticle(Particle.SMOKE_LARGE, chick.getLocation(), 1);
                            Bukkit.getScheduler().runTaskLater(main, new Runnable() {
                                @Override
                                public void run() {
                                    chick.remove();
                                    chick.getWorld().createExplosion(chick.getLocation(), 5, false);
                                    chick.getWorld().dropItemNaturally(chick.getLocation(), drops);
                                    chick.getWorld().playSound(chick.getLocation(), Sound.ENTITY_CHICKEN_HURT, 5, 5);
                                    cancel();
                                }
                            }, (2 * 20));
                        }
                    }
                } else {
                    cancel();
                }
            }
        }.runTaskTimer(main, 0L, 20L);```
hasty prawn
#

mob instanceof Chicken

sleek flume
#

no i dont want a chicken to spawn if it dies

eternal night
#

That is the biggest stack overflow ever

hasty prawn
#

Yeah I know. But you're telling it to do that.

crisp steeple
#

Infinite chickens seems pretty cool

wet breach
#

should show your code that you have so far

#

?paste

undone axleBOT
sleek flume
sweet pike
crisp steeple
#

isnt this pretty redundant

hasty prawn
wet breach
hasty prawn
#

Are you listening to EntityDeathEvent anywhere?

sleek flume
#

no

hasty prawn
#

Well I don't think any of the code you sent is doing that

wet breach
# crisp steeple isnt this pretty redundant
public static void bitwiseMultiply(int n1, int n2) {
    int a = n1, b = n2, result=0;
    while (b != 0) // Iterate the loop till b==0
    {
        if ((b & 01) != 0) // Logical ANDing of the value of b with 01
        {
            result = result + a; // Update the result with the new value of a.
        }
        a <<= 1;              // Left shifting the value contained in 'a' by 1.
        b >>= 1;             // Right shifting the value contained in 'b' by 1.
    }
    System.out.println(result);
}

here is how you multiply using bitshifting ๐Ÿ™‚

#

in case the other way was too easy

sleek flume
# hasty prawn Well I don't think any of the code you sent is doing that

this is my other piece of code:```java
public final class Main extends JavaPlugin {

@Override
public void onEnable() {
    getServer().getPluginManager().registerEvents(new ExplodeChick(this), this);
    getServer().getPluginManager().registerEvents(new PreventMobs(), this);
}

@Override
public void onDisable() {
    // Plugin shutdown logic
}

}```

#

the main class

wet breach
#

recommend people save that snippet of code

#

literally the fastest way to multiply without using much resources ๐Ÿ˜›

#

but most people don't know math like that

#

if anyone is curious to understand the math behind it, let me know ๐Ÿ™‚

wet breach
#

this one is bitwise adding

#
public static void bitwiseAdd(int n1, int n2) {
    int x = n1, y = n2;
    int xor, and, temp;
    and = x & y;
    xor = x ^ y;

    while (and != 0) {
        and <<= 1;
        temp = xor ^ and;
        and &= xor;
        xor = temp;
    }
    System.out.println(xor);
}
#

if you want division or subtraction, you just do the opposite of these two I have shown

crisp steeple
#

That is quite interesting

wet breach
#

and that concludes this weeks snippet of codes that may be useful ๐Ÿ˜„

sleek flume
noble lantern
#

:p

wet breach
#

lol

#

but its good right?

noble lantern
#

indeed it is

#

i might use it tbh

#

now

#

do you have

#

bitwiseRandom

#

:))

wet breach
# noble lantern bitwiseRandom
long seed = Systen.nanoTime();
    
public long randomLong() {
  seed ^= (seed << 21);
  seed ^= (seed >>> 35);
  seed ^= (seed << 4);
  return seed;
}
#

anything else? probably didn't think I had one ๐Ÿ˜›

noble lantern
#

oh shit

#

how would i make it for between 2 ranges by chance

wet breach
#

you would just have to check the result is between the numbers you want it in

noble lantern
#

And is calling System.nanoTime() resource-intensive, or should i store it on program startup

wet breach
#

nanoTime() is just used as an example

sharp flare
#

howdy guys, may I ask what are any examples of itemstack who doesn't auto generate their meta

wet breach
#

you can literally use anything as the starting point

noble lantern
#

i wroded this horrible

#

i meant, a random between 2 ranges with that

#

ie between 1 and 4

noble lantern
#

new ItemStack() auto generates a blank meta

sharp flare
#

I added a not null validation to my event and it got triggered since the meta is null

sharp flare
noble lantern
#

thats the error

#

im meaning code

sharp flare
#

Always thought item meta are never null on most items

noble lantern
#

And what ItemStack are you using? i normally make things like that return null if the metas null

#

Nah meta can be null at times like with Material.AIR

sharp flare
#

ill just add a null check on this

#

instead of validating it

noble lantern
#

you can make an ItemWrapper class like so

sleek flume
wet breach
# sleek flume do you have bitwise square root?
short isqrt(short num) {
    short res = 0;
    short bit = 1 << 14; // The second-to-top bit is set: 1L<<30 for long

    // "bit" starts at the highest power of four <= the argument.
    while (bit > num)
        bit >>= 2;

    while (bit != 0) {
        if (num >= res + bit) {
            num -= res + bit;
            res = (res >> 1) + bit;
        }
        else
            res >>= 1;
        bit >>= 2;
    }
    return res;
}
noble lantern
#

wait i have a meme for this

sharp flare
wet breach
#

So, we got multiplication, addition, XORShift, and now square root in bitwise operation ๐Ÿ˜›

noble lantern
#

it's just boilerplate bs to make item stacks easier to work with

sharp flare
#

yeah great thing, I used to make one of those on my previous plugins that I already archived

noble lantern
#

i make an API for my plugins that way i never lose stuff like this

#

might add frost's stuff to it

#

and credit as my own

#

jk

sleek flume
wet breach
#

Lol

noble lantern
#

actually ngl frost imma make a MathUtils class now

wet breach
#

wouldn't bother me ๐Ÿ˜›

sleek flume
#

i bet you can't make cube root

sharp flare
#

I didn't make a wrapper for it since the items are retrieved from the mainhand in the entity damage event and is only used by the gem enchantments I made, I could just add a null check for now

wet breach
#

so will have to give me a bit to adapt some code ๐Ÿ˜›

terse ore
#

In which version was implemented sending resource packs to the players?

#

or is there somewhere I can check that?

noble lantern
#

Frost whats your github

noble lantern
#

you can check javadocs for Player object for 1.8 1.9 etc

wet breach
terse ore
noble lantern
#

"You can check javadocs for Player object for 1.8 etc"

#

IR check javadocs for sendResourcePack(String)

#

or w/e the name of the method is

#

i dont quite remember i think thats it though

terse ore
#

uhm oki ty

noble lantern
#

i just wanna link you in this class

#

before i commit

wet breach
#

is there more then one frostalf on github?

#

๐Ÿค”

noble lantern
#

oh

#

no theres not wow

wet breach
#

๐Ÿ˜‰

noble lantern
#

speeeed

#

lowkey

#

have no idea wtf this is doing but imma take your word its faster

wet breach
#

also fun fact about using bitshifts

#

it is required on hardware that doesn't support floating points

noble lantern
#

what hardware wouldnt support that?

wet breach
#

you would be surprised

#

but the fact that you can however still do FP arithmetic in the way I showed however, technically the hardware still supports it. And the reason bitshifting is faster in Java then if you were to use normal math operations is due to the fact you are cutting out the middle in what happens

#

so, in Java, if you do math related functions, it has to go through the jvm then to native code to the cpu to compute. Bitshifting cuts all that out, and essentially you are doing what the cpu would eventually do. You are just having the program go ahead and do it.

#

some of the downsides of using bitshifting is you can lose readability, however in others you can increase it

#

well maybe not readability, but make it harder to understand for those who don't know how to do binary math

noble lantern
#

wont ever have to read or learn it if you shove it in a library think

#

god damnit why isnt there a state change event for blocks

plain helm
#
                        economy.depositPlayer(offlinePlayer, plugin.moneyLinker.get(p)); ``` the 2nd line gives me an error,  moneyLinker is a hashmap that returns a Double.
I get economy like this: 
```             Economy economy = plugin.getEconomy();

noble lantern
plain helm
#

p is a Player

#

gotten from e.getPlayer

noble lantern
#

you need to Bukkit.getOfflinePlayer(p) or cast Player to OfflinePlayer

#

or

plain helm
#

i did

noble lantern
#

Bukkit.getOfflinePlayer(uuid)

plain helm
#

alr I'll try

#

ty

#

still throws an error

noble lantern
#

send the error

plain helm
noble lantern
plain helm
#

...

noble lantern
#

thats likely the error as it cant find vaults classes

plain helm
#

It is indeed not installed ๐Ÿค• sorry for disturb

vocal cloud
#

Another day another moment to learn weSmart

plain helm
#

lmao

noble lantern
#

i guide others to a treasure i cannot obtain, functional code

plain helm
#

I'm coding a robbery

wet breach
#

to add to your utils

#

probably can reduce this to one line lmao

noble lantern
#

that one has an error

#

n&1 isnt a boolean

wet breach
#

might be missing something

#

lol

#

comment might be fixed

#

or change the 0 to a 1 instead

noble lantern
#

there ๐Ÿ˜›

#

ide still screamed with that but adding paranthesis fixed it

wet breach
#

lol

#

its the fastest way of checking ๐Ÿ™‚

noble lantern
#

fastest way of ==?

wet breach
#

it is the fastest way to check if a number is even or odd

noble lantern
#

nono like

#

so you have all these methods currently

#

now a equals using bit math

#

ie ==

#

lmao

#

i doubt theres nothing faster tbh

wet breach
#

== just does a pointer comparison in java

#

so like no you couldn't get faster

noble lantern
#

if (n &^<< I >**& n) return true

#

something like that

wet breach
#

still need to compare against something

#

there is no bitwise operator for comparing

noble lantern
#

joking about that if btw lol

#

its what this stuff looks like to me xD

wet breach
#

lol

#

bitshifting is really handy

#

I mean you seen my color compressor ๐Ÿ˜›

#

it compresses hex or rgb into 8bit colors

#

and even rounds the color to nearest best match ๐Ÿ™‚

#

all with bitshifting

noble lantern
noble lantern
wet breach
#

not really

#

math took care of that easily ๐Ÿ™‚

supple elk
#

So I have this static inner builder class:

#

trying to do something like this however

#

can't access cause it's private, even though the Builder class is a member of the Projectile class

#

anyway I can get around this without making the Projectile constructor public?

#

Ideally it wouldn't be so it can only be accessed through the builder

noble lantern
#

soi basically have to make a getter in the parent class for the subclass

wet breach
# noble lantern the debugging for this must of been aids
//fast exponentation
public long calculate(int a,int b) {
    // initialize ans with 1
    long ans = 1;
    while(b>0) {
        // check if last bit 1    
    if((b&1)==1){
        ans = (ans * a);
    }
      
    // update value of a by a*a  
    a = a*a;
      
    // right shift b by 1  
    b = b>>1;
    }    
    return ans;
}

here is another for you

noble lantern
#

This on calculates exponents correct

#

ie

#

1, 2 would be one to the power of 2?

wet breach
#

so lets say you want to know what 2 to the power of 3 is

#

this will calculate that in a fast way ๐Ÿ™‚

noble lantern
#

why tf you so smart

#

also b&1 -> to parenthesis idk if your ide is showing those errors to you haha

wet breach
#

this method is O(log n) time

noble lantern
#

WAIT FROST

wet breach
#

yep was going to tell you that

#

but you figured it out ๐Ÿ˜›

noble lantern
#

super speed ๐Ÿ˜›

wet breach
#

doesn't change how fast the method is though

#

can do that for ans*a if you want too

noble lantern
wet breach
#

feel free to benchmark the differences

#

its fast regardless ๐Ÿ˜›

#

also I don't have an IDE, just pulling these things from my snippets library I have saved lol

noble lantern
#

now if only

#

i rly hate the interact event in spigot

wet breach
#

what does the code look like?

supple elk
#

I don't think it lets me do this though

#

I can't do java new Projectile() { //new stuff }

noble lantern
supple elk
#

as constructor is still private

#

and can't change what's in the builder cause I can only get a new builder by calling the static getter method

noble lantern
#

sec

supple elk
#

perhaps

#

I've tried this

wet breach
#

eew annotations

noble lantern
#
class Something {
   public MoreStuff MoreStuff(someStuffInstancehere) {
       return new MoreStuff(someStuffInstanceHere);
   }
   static class MoreStuff {
       MoreStuff(someStuff) {}
   }
}```
#

and you use Something.MoreStuff(someStuff)

#

wait no im retarded

#

cause you have that

#

wait nah

#

i see

noble lantern
supple elk
#

Projectile() is private

#

the constructor

noble lantern
#

your calling new Projectile.Builder() and you cant do that because Builder is private

#

So make a public constructor?

supple elk
#

but I don't want to give projectile a public constructor

#

cause the whole point is that is has a private constructor and is built by the builder

noble lantern
#

so then Projectile.getBuilder() and no new in front of it

#

your calling new on something thats already returning a new instance

supple elk
#

but then I can't edit the builder with a static inner class cause the method creates the builder

#

gimme a sec

noble lantern
#

?paste

undone axleBOT
noble lantern
#

sry needed that

noble lantern
#

so i just reset the BlockMetaData and then place a block against its block face

wet breach
#

why do you need the block to be placed?

supple elk
#

@noble lantern so this is what I'm trying to do

#

it works as long as I have the projectile constructor public

#

and give the builder fields getters

#

I guess making the projectile constructor public isn't the end of the world

#

the only point of the builder is to make the constructor of the projectile class simpler

noble lantern
#

my keyboar dbugged

#

idk why it didnt paste lmao

noble lantern
#

idk what that is

#

builders are done like

#

Gson gson = new GsonBuilder().setPrettyPrinting().build();

#

.build() returns a new instance of a class

#

for some reason your overriding project()

wet breach
noble lantern
#

which should be your actual building

wet breach
#

haven't quite answered that part o.O

noble lantern
#

sorry i was doing 3 things at once

#

had to do something in cipher too

wet breach
#

no I mean why can't you just cancel the event?

#

I mean you can still place a block even though you canceled the event o.O

noble lantern
#

lemme try to cancel and not reset data again

#

ill see if it still does it

supple elk
wet breach
#

well, without cancelling you won't be able to prevent that glitch without resorting to NMS

#

but you can place blocks IE change air to a block even though you cancelled the event

supple elk
#

ok having these 2 variables both called project is confusing

#

I'm just rename to build

noble lantern
#

tbh i think i can actually cancel this event now

#

since im placing the block on my own

supple elk
#

So that's what I do normally

#

however

noble lantern
#

you make b a Projectile

#

and use builder to construct a Projectile

#

ie

#

build() returns a projectile class

noble lantern
#

make all your setters

#

returns this

supple elk
#

right right

noble lantern
#

so you can chain them

supple elk
#

yeah I see that

#

it's effectively the same but I'll do that

noble lantern
# supple elk

well with this b.build() wouldnt do much since its value isnt being used

supple elk
#

the constructor of the Projectile spawns the projectile itself

noble lantern
#

i see

supple elk
#

so by calling build I've set the projectile in motion

noble lantern
#

why not just like

#

make this so much easier on yourself

#

and do this

supple elk
#

I could prob just do this all in the projectile class itself couldn't I

#

rather than making a static builder

noble lantern
#
class Projectile {

    public Projectile doSomething(int one) {
        // do stuff
        return this;
    }

}
#

yep

#

and you could chain newProjectile().thingOne().thingTwo().build();

#

build being the method that spawns the projectile

supple elk
#

yeah

#

I think by using this builder I make Projectile immutable?

noble lantern
#

im not entirely sure IMO, i dont use inner classes a whole bunch

supple elk
#

doesn't seem particularly helpful tbh

#

and tbh being able to change the things like the entityTraceFilter half way through a projectile's life span seems like it could be useful

#

main reason I was doing this shit was just to experiment

#

but it seems like it's quickly becoming convoluted

noble lantern
#

if you really want to seperate it into classes you could create a ProjectileBuilder class that has a method that returns Projectile but you would be right, you wouldnt be able to entityTradeFilter on it once its created

#

same with gsons builder

#

ayyyy frost i did it lmao

#

hi alex

tender shard
#

many people hate lombok, but

#

for stuff like Builder classes, it's awesome

noble lantern
tender shard
tardy delta
#

I like the code being writtn out

noble lantern
#

Bukkit.broadcastMessage() is the best debugger

#

change my mind

tender shard
#

why?

noble lantern
#

oh wait thats what hes talking about

tender shard
#

I mean, it's just a bunch of setters that after that call your constructor

noble lantern
#

you see here at project cipher

#

we dont like lines of code

tardy delta
#

Mye idk

tender shard
noble lantern
tardy delta
#

Player sendmessage

noble lantern
#

nooo

#

broadcast

#

is where its at

#

unless you make a debug logger for production with true false settings

tardy delta
#

True false setting?

noble lantern
#

ie

#

debug: true in config

#

and itll log debug in console

#

ill do that for prod but when testing

tardy delta
#

Ahh

noble lantern
#

broadcastMessage() is the best

#

ill literally fight anyone in here who says differently

wet breach
#

dev/null is better

supple elk
noble lantern
#

they like to add time to development

supple elk
#

lol

wet breach
#

also, people like me who don't like annotations

#

over use of annotations can take away from readability or simply understanding what is going on since it moves that from the source code to compile time

noble lantern
#

i only use lombok on variables

#

like so

tender shard
#

I really don't get it

#

lombok is just awesome

tender shard
noble lantern
#

i just tried it out earlier this week

tender shard
#

it's basically Getter & Setter on every variable (unless it's final ofc) + hashcode + toString

#

oh and it also adds the required constructors

noble lantern
#

interesting

#

i dont see to much of a use for me as i dont use data in this plugin currently

#

but the other ones i defo will

tender shard
#

it basically turns every class into a "record"

#

but without needing java 16+

noble lantern
#

those poor sould

#

stuck on outdated versions using java 16

#

almost feel sorry for em

wet breach
#

but Java 17 is awesome, I wouldn't use anything less

tender shard
#

I always code for java 8

wet breach
#

nope not me

noble lantern
#

jdk 16 bare minimum for me

tender shard
#

:<

noble lantern
#

when i make plugins

supple elk
#

Now down to this

noble lantern
#

i only make them with latest version in mind

wet breach
#

Java 17 has native unix socket support ๐Ÿ™‚

noble lantern
#

fuck anything else

crimson terrace
crimson terrace
#

fuck

#

still wrong message

#

its glitching around for me

tender shard
#

a java 8 compiled plugin will run in ANY environment java 8 or later

noble lantern
#

grammarly helps a lot

#

^

crimson terrace
#

was trying to do with the java 16 one

tender shard
wet breach
#

if it uses reflection it won't work in Java 11+

tender shard
tender shard
#

I use reflections a lot

#

works fine in java 11+

wet breach
#

not if you use certain reflections

crimson terrace
#

yeah thats what I meant, just woke up XD

tender shard
noble lantern
#

how about you reflect some bitches ahha ahaahaa

#

jkjk

tender shard
#

I e.g. access sun.misc.unsafe using reflection, no problem at all

supple elk
#

that is a lot simpler

crimson terrace
noble lantern
#

my mirror has a hole in it

crimson terrace
#

most use peanut butter

noble lantern
tender shard
crimson terrace
#

XD

noble lantern
#

its called

#

getting some bitches

#

FUCK

tender shard
#

innocent 12 year old american: "why is everyone talking about female dogs :o"

molten hearth
#

your bitches so fat they don't even fit on discord in compact mode

noble lantern
#

maybe i like em fat

molten hearth
#

Sheit

noble lantern
#

cushion for the pushin

wet breach
crimson terrace
#

still confused af about this if anyone is able to help me out

noble lantern
tender shard
wet breach
#

but I would never compile for java 8

noble lantern
tender shard
#

I remember when I was playing GTA:VC and killed bitches the whole time, yet I didnt even know what that term meant

wet breach
#

I don't support old stuff that is a decade old with no updates lol

crimson terrace
tender shard
noble lantern
#

if (file.delete())

tender shard
noble lantern
#

a lot of file stuff needs to be used in a boolean

wet breach
#

1.16 does't use java 8

tender shard
#

it does

molten hearth
#

It should

tender shard
#

1.16 uses java 8

#

1.17 uses 16 and 1.18 uses 17

noble lantern
wet breach
#

well, I still wouldn't compile for java 8

noble lantern
#

i manually set my jdks for 1.17 and 1.18

molten hearth
#

you should

noble lantern
#

jdk 8 works everything else

crimson terrace
wet breach
#

mc 1.16 can be ran on java 17

tender shard
noble lantern
#

way im doing it is aids

tender shard
molten hearth
#

This works well for me

tender shard
#
$ cat ~/.bash_aliases
alias java8='/c/Program\ Files/Java/jdk1.8*/bin/java.exe'
alias java11='/c/Program\ Files/Java/jdk-11*/bin/java.exe'
alias java14='/c/Program\ Files/Java/jdk-14*/bin/java.exe'
alias java16='/c/Program\ Files/Java/jdk-16*/bin/java.exe'
alias java17='/c/Program\ Files/Java/jdk-17*/bin/java.exe'
alias java='/c/Program\ Files/Java/jdk-16*/bin/java.exe'

alias deobstack='java -Xms128m -Xmx512m -cp ~/.m2/repository/com/allatori/allatori/8.1/allatori-8.1.jar com.allatori.StackTrace2'

noble lantern
#

oh

#

its that easy

tender shard
#

ofc

#

:3

wet breach
#

you can do the same in windows

noble lantern
#

sir

#

im using windows linux

#

Winux

#

lindows

#

winbuntu

molten hearth
#

Average wsl user

tender shard
#

Winbian

wet breach
#

I don't use wsl

tender shard
#

me neither, just git bash

woven gazelle
#

any idea which file specifies which nms classes (that aren't already patched) to be present in the Spigot-Server src directory? I want to edit a class that isn't already there.

wet breach
#

well if I want linux, I run a proper environment lol

molten hearth
#

I tried it cause setting up a different partition seemed like a pain

#

But it sucks and now its just there

molten hearth
#

None of the tutorials I could find actually worked

tender shard
#

If so, classes have different names

woven gazelle
wet breach
#

could have just ran a VM

molten hearth
#

Lag moment

noble lantern
#

that one box vm probram

#

vmbox

#

i think

wet breach
#

virtualbox

molten hearth
#

I do have virtual box and the experience feels like team viewer

noble lantern
#

yee vbox

tender shard
#

all my servers are virtual machines

#

VMs really don't have any performance loss

#

well maybe 3%

wet breach
#

all my linux VM's are headless

tender shard
#

proxmox โค๏ธ

molten hearth
#

I could do that but also that introduces pain

wet breach
#

pain?

#

not sure how using a terminal could be painful o.O

tender shard
molten hearth
#

I need kali for work I'd rather not pull up a github and find out what parameters I need each time instead of getting a gui

#

Well for what supports a gui anyway

wet breach
molten hearth
#

CAp

wet breach
#

I can launch any GUI application I want from the terminal

molten hearth
#

Damn

#

The only terminal guis I've seen are those scuffed setting selection ones

wet breach
#

I use putty

#

but I mean I can run applications on a headless VM or even dedicated box

#

and the only thing you need is redirect its output to some remote place

#

IE your desktop ๐Ÿ˜›

molten hearth
#

Unnecessary pain

wet breach
#

no that is just laziness on your part

#

nothing painful about it, nothing difficult either

molten hearth
#

Well no when you could just be normal and have a gui why would you decide to go ahead and do it the hard way

wet breach
#

because it isn't the hard way

#

you just assume it is because you never done it

molten hearth
#

Sounds like it is lol

wet breach
#

sounds like doesn't mean it really is