#help-development

1 messages Β· Page 478 of 1

eternal oxide
#

your error says you are wrong

quaint mantle
#

but the files are right

chrome beacon
#

Send the jar here

eternal oxide
#

The jar on your server does NOT contain the plugin.yml you are showing us

tawdry echo
#

Use String instead of Object and String.equal()

quaint mantle
quaint mantle
#

wdym

chrome beacon
quaint mantle
#

ok I did not do that

#

so its maven

#

poggerz

chrome beacon
#

Nah it's not maven

#

It's a you problem

#

You did not use the newly generated jar

quaint mantle
#

I mean its changing it after it compiles

#

I'm compiling again

chrome beacon
#

it might not be able to do that while the server is running

quaint mantle
#

showing this for the record

#

it might take like 30 seconds

#

don't switch off

#

I hate how it worked

#

ok problem solved

#

somehow

#

thank u

#

and thanks for being patient

#

** dies **

quaint mantle
lost matrix
#

Show your updated code

regal scaffold
#

Are the names above the players head

#

Considered player.setDisplayName#?

analog thicket
#

Yo, quick question. I have a plugin with generators. Basically, it saves their generators to a file, loads on join, and unloads on leave. The problem is if a player spam joins the server the file bugs, and ends up deleting all their stuff. How would i fix this?

earnest lark
#

Im making a tabCompleter how would i make it so that there are multiple different things for each of the different spaces

eternal oxide
#

check args.length()

earnest lark
#

yea

#

but

#

i dosent work

eternal oxide
#

your code doesn't work. The design does.

earnest lark
#

yea

#

thats usually how it goes

eternal oxide
#

The magic 8-ball says "you messed up"

earnest lark
#

The magic 8-ball says "your dumb"

#

not you

#

me

eternal oxide
#

πŸ™‚

#

?paste some code

undone axleBOT
earnest lark
#

i got it

#

im just sooooo good at coding

eternal oxide
#

We all gods here

earnest lark
#

but my String[] keeps something from one before

eternal oxide
#

?

#

you shoudl be returning a List

#

and args[] will contain what you have typed

#

eg```java
List<String> result = new ArrayList<>();

    /*
     * Return a TabComplete for users.
     */
    switch (args.length) {

    case 0:
        break;

    case 1:
        result = tabCompleteUsers(args[0]);
        break;

    default:
        result = getPermissionNodes(args[args.length - 1]);
        break;
    }

    return result;```
regal scaffold
#

Is

#

Smile around

#

I'm having a bit of an issue with this GUI implementation

#

If I have a clickable item that's supposed to open a new gui

lost matrix
#

Kind of

regal scaffold
#

But I also want to be able to use escape to go back

#

There's a conflict

#

And it takes you back every time

#
    @Override
    public void onClose(InventoryCloseEvent event) {
        super.onClose(event);
        Bukkit.getScheduler().runTaskLater(plugin, () -> {
            plugin.guiManager.openGUI(new MainMenuInventory(ultraChest), (Player) event.getPlayer());
        }, 1L);
    }
#

Inside InventoryButton

                    Bukkit.getScheduler().runTaskLater(plugin, () -> {
                        plugin.guiManager.openGUI(new MembersUpgradeInventory(ultraChest), player);
                    }, 1L);
#

I want the inventoryButton to refresh the current inventory

#

I guess I could call decorate again instead of opening the same GUI again, right?

lost matrix
#

Yeah both should work. But clear the inv before decorating again.

regal scaffold
#

Oh ok

#

Also... uhhh

#

Caused by: java.lang.IllegalArgumentException: Specified class does not exist ('me.tomisanhues2.ultrastorage.utils.UpgradeType')

#
        ConfigurationSerialization.registerClass(UpgradeType.class);
#

But it is registered

#

Ah... hehehe. Code is obviously executed top to bottom

quaint mantle
# lost matrix Show your updated code
    public void OnEvent(PlayerDropItemEvent event){
        Player thePlayer;
        thePlayer = (Player) event.getPlayer();

        String salam = thePlayer.getDisplayName();

        String mrdxo = "mrdxo";

        if(salam == mrdxo){
            thePlayer.sendMessage("Salam Owner");
        }else{
            thePlayer.sendMessage("Salam"+salam);
        }
    }
}```
worldly ingot
#

== won't work for strings

lost matrix
river oracle
#

you never know bro they could somehow end up at the exact same memory location

quaint mantle
#

any of you has a good youtuber that teaches spigot basics?

river oracle
#

not that I know of

#

if you have a good foundation of java though it shouldn't be too hard

#

I'd argue spigot is the easiest of the Minecraft api's out there

quaint mantle
#

I keep finding old tutorials

#

where do you learn?

river oracle
#

My friend taught me java and spigot

#

mostly used google though

#

combination of using forums + google got me to where I am

#

mostly

quaint mantle
#

Y2K_ one question

#

you see how in forge 1.17 stuff wont work in 1.18 because they keep changing class names and shit? is that the same with spigot?

river oracle
#

no

quaint mantle
#

or would 1.17 spigot scripts work in 1.18?

river oracle
#

spigot is braindead easy to maintain

quaint mantle
#

nice

river oracle
#

unless you use a shit ton of NMS

#

there might be breaking changes every great once and a while

#

but more often than not its 0 effort to get to the next version

quaint mantle
#

I'll pay you 2 dolars if you teach me all the basic stuff

#

not more than 2 'cuz I'm broke

#
  • a thank u
serene sigil
#

does any one know why it tps me always to the surface?

#

like not actually underground

quaint mantle
#

I hate compiling everything in a .jar every time I wanna test the plugin. Is there a way to open minecraft dev mode or something like in forge?

quaint mantle
rough ibex
#

if (string1.equals(string2)) {}

quaint mantle
serene sigil
torn oyster
#

well it doesn't work

#
        redissonClient.getTopic("status").addListener(String.class, (channel, msg) -> {
            System.out.println(channel);
            System.out.println(msg);

            String[] args = msg.split(" ");
            if (!args[0].startsWith("minigame-")) return;

            MinigameServer server = getServer(Integer.parseInt(args[0].replace("minigame-", "")));
            if (server == null) return;
            MinigameState state = MinigameState.valueOf(args[1]);

            System.out.println("Server " + args[0] + " sent state data: " + state + ".");

            server.setState(state);

            if (state == MinigameState.CLOSING) {
                MinigameServerManager.get().removeServer(server);
            }
        });```
#

it establishes the connection with redis fine

#
redissonClient.getTopic("status").publish(minigameId + " " + state.toString());```
this is on the other server's end
#

it established connection fine too

torn oyster
tardy delta
#

cuz chunk loading

misty current
#

can I code a pseudo-random number generator with a seed that would always return a fixed value when I input two values?

eternal oxide
#

a seeded random will always produce the same sequence of numbers.

misty current
#

is there an implementation in java or do I have to create one myself?

ivory sleet
#

There is

eternal oxide
#

just java random will do

ivory sleet
#

All of them except thread local random

#

Hence why thread local random is bad due to lack of reproducability

fluid river
#

fast

misty current
#

i know that if i input the same seed in two different Random objects i'll always get the same output, but i don't know in what order will the nextSomething methods be called, and also some could be called twice and yield the same result

fluid river
#

cast ArrayList<Entity> to ArrayList<Player>

#

how

ivory sleet
#

SplittableRandom is faster

misty current
#

i basically need a method that does something like boolean shouldSpawn(int x, int y, double chance)

fluid river
#

joking

ivory sleet
#

And has reproducability

misty current
#

now that i'm putting it this way, this is similar to what perlin noise does

#

but i don't need it to be gradual

#

i just need random values to be always the same with the same x and the same y

#

could I make an hash of the two values and evaluate a pseudo random number from that?

eternal oxide
#

explain better what you need to do

misty current
#

i have a chunk generation system and i want a method to reliably check if at said x and z something should spawn

eternal oxide
#

for generation, to ensure it always generates teh same you use a seeded random. You access that random in teh exact same order every time

misty current
#

i am aware of that, but i need to check if a certain structure would spawn/has spawned not necessarily when the chunk generates

fluid river
#

meh

eternal oxide
#

I'm not understanding yoru issue

#

chunk spawns exactly the same every time

#

if there should be a structure there, it will be there every time

misty current
#

i need to generate structures using such a formula so i can then tell if a structure spawned at that location

#

or i can tell before the structure itself is generated

eternal oxide
#

what EXACTLY are you trying to do? as it doesn;t sound like you actually want chunk generation

fluid river
#

how do i get the vector of where player is looking

#

for rayTraceEntities

eternal oxide
#

really nuker?

misty current
#

i've made a chunk generator that randomly generates structures using the provided random from the generateNoise method, but chunks close to that chunk also generate structures depending on what generated in the first chunk, so i need nearby chunks to be able to tell if the original chunk will spawn a structure

fluid river
#

idk i never used the thing

#

i preferred old good algorithm

eternal oxide
#

Player#getEyeLocation().getDirection()

fluid river
#
Location eye = player.getEyeLocation();
for (Entity entity : player.getNearbyEntities(64, 64, 64)) {
    Vector toEntity = entity.getEyeLocation().clone().toVector().subtract(eye.toVector());
    double dot = toEntity.normalize().dot(eye.getDirection());
    if (dot < 1) return entity;
}```
fluid river
#

OOOOOH

#

shit

#

there is a getVelocity

#

im dumb

eternal oxide
#

there is

#

has the same vector but different magnitude

#

I don;t believe you need to do that, you just set whether the generator can spawn structures

#

also if you go using the random from noise you will alter how the chunk spawns

#

unless you use it identically every time

misty current
#

i see

#

i'll try that way

#

thanks

fluid river
#
Entity result = player.getWorld().rayTraceEntities(player.getEyeLocation(), player.getLocation().getDirection(), 8).getHitEntity();```
#

this thing don't return player in creative mode in front of me

eternal oxide
#

exclude the player

#

it will collide with yourself

fluid river
#

how do i do that

#

is there a method or param or smth

eternal oxide
#

use teh raytrace that accepts a predicate

fluid river
#

oh

eternal oxide
#

(e) -> e != player

fluid river
#

yeah i know

#

would the != work tho

eternal oxide
#

yes it's an instance check

fluid river
#

shouldnt i compare UUID's or smth for safety

#

polymorphism and freaking Player object both go brrt

eternal oxide
#

no, there will only ever be one instance of the player during a raytrace

fluid river
#

when was this rayTrace added

#

i used the Vector#dot() since like i started coding for mc

fluid river
#

shit

#

the RayTraceResult can also be null

#

not only the HitEntity

eternal oxide
#

yes for no hit

fluid river
#

then why is getHitEntity nullable heh

eternal oxide
#

no clue πŸ˜›

#

oh it would be null if you were tracing blocks

#

single RayTraceResult for both entity and blocks

fluid river
#

oh shit rt result is for both

#
var rtr = player.getWorld().rayTraceEntities(player.getEyeLocation(), player.getEyeLocation().getDirection(), 8, e -> e != player);```
#

this still can't find player in creative mode right in front of me

#

spamming everywhere possible

#

it returns null everytime

eternal oxide
#

not surprising if the target player is in creative. Creative is a nightmare

fluid river
#

shiit

#

so i need to switch back to my old method

#

with vector stuff

eternal oxide
#

I see no reason it wouldn't find them, but when it comes to creative.

fluid river
#

nope

#

doesn't also work in survival

eternal oxide
#

are you sure you are looking the right direction and are within 8 blocks?

fluid river
#

i guess

eternal oxide
#

Thats an actual player and not an NPC?

fluid river
#

yes

#

sitting one meter to the right from me

eternal oxide
#

Sorry you dude needs a white stick

#

and a guide dog

fluid river
#

?

eternal oxide
#

did you mess up your predicate?

fluid river
#

its right here in the code

#

i just pasted

eternal oxide
#

player not Player

fluid river
#

it is

eternal oxide
#

yep looks ok

fluid river
#
if (event.getAction() != Action.LEFT_CLICK_AIR) return;
Player player = event.getPlayer();
var rtr = player.getWorld().rayTraceEntities(player.getEyeLocation(), player.getEyeLocation().getDirection(), 8, e -> e != player);
if (rtr == null) return;
if (!(rtr.getHitEntity() instanceof Player target)) return;
UUID damagerId = player.getUniqueId(), targetId = target.getUniqueId();```
#

probably also need to add filter for only searching players

#

instead of if in the end

#

i just made sysout before checking if rtr == null

#

and it always says null

eternal oxide
#

no clue, makes no sense

fluid river
#
var rtr = player.getWorld().rayTraceEntities(player.getEyeLocation(), player.getEyeLocation().getDirection(), 8, e -> e != player && e instanceof Player);
if (rtr == null) return;
Player target = (Player) rtr.getHitEntity();
#

still

#

fucked up

#

it's on playerinteractevent and the action is left click air

#

it actually worked for some reason

#
var rtr = player.getWorld().rayTraceEntities(player.getLocation(), player.getLocation().getDirection(), 8, e -> e != player && e instanceof Player);```
#

but it only works if i click above players head now

#

not on the player body or head

#

and player is in creative

eternal oxide
#

due to using player location it's using teh vector of yoru body, not the direction you are facing

fluid river
#

cool lets go

#

ohh

#

i get it

worldly ingot
#

Pls make a variable of that. New Location instances are created each time

fluid river
#

player interact event is not called when you hit random player in the way

worldly ingot
#

PlayerInteractEntityEvent should be though

fluid river
#

it's for right click only

#

stated on javadocs

worldly ingot
#

Gotcha

fluid river
#

i need creative player left click

worldly ingot
#

If you want a right click, it's a damage event ;p

fluid river
worldly ingot
#

Unsure if that's called for a "damaged" player in creative though

eternal oxide
fluid river
#

Craft event

worldly ingot
#

while loop?
nature49ThisIsFine

fluid river
#

oh you mean

#

you just have chest

#

umm, you just listen to inv clicks

flint coyote
fluid river
#

sleep()

flint coyote
#

why does the server keep crashing, I'm pausing the loop

while(true) {
sleep(1000);
System.out.println("test");
}
undone axleBOT
eternal oxide
#

NO clue, code looks fine to me πŸ˜‰

flint coyote
#

Dang it. Better create a jira ticket, surely a bug in spigot

eternal oxide
#

Probably md5 messign up again

flint coyote
#

Last time I saw md5 blaming Choco that he broke something πŸ€”

eternal oxide
#

probably chocos fault then

worldly ingot
#

D:

#

I mean it was my fault

#

But D:

ivory sleet
#

Dw Choco you our sweet chocolate no matter what :3

flint coyote
#

Server crashing due to while(true) is a bug. Just like I'm from america, right Choco?

#

Only because I used "mile" once in my life D:

quaint mantle
#

Is there any easyish way to make a custom crafting table that only crafts certain recipes? My friend had me make a plugin where similar to hypixel the ender dragon has special drops and he wants a special crafting station to craft stuff with the material it drops (which is really just gonna be something like iron but with a custom model id that retextures it and a display name)

#

I know I can make menus but idk if there's an easy way πŸ₯²

ivory sleet
#

There is sorta

#

I mean u can use the crafting stuff nms uses

#

Or write ur own matrix logic

river oracle
#

Do better than mojang write some 200iq matrix logic

#

Blow everyone away

ivory sleet
#

Fr lol

river oracle
#

Write code and say I did better than Mojang ever could

trim lake
#

Can I someonehow get instace of class? I just want some simplest way πŸ˜„ Want to make pl for editing and disabling/enabling recipes. Ofc first I need to save them some how.

for(Iterator<Recipe> iterator = Bukkit.recipeIterator(); iterator.hasNext();) {
            Recipe rec = iterator.next();
            if (rec instanceof BlastingRecipe) {
                
            }
            else if (rec instanceof CampfireRecipe) {
                
            }
        }
river oracle
#

if your on java 20 or above you can use pattern matching

trim lake
#

JaveSE-17 rip πŸ˜„

river oracle
#

rip yeah I wish 17 had some nice 20+ features

#

unfortunately you will have to just write the else if statements

#

you could also use a switch statement if you use rec.getClass() you could match like that

trim lake
#

Just looking for some ezy way to save recipes. Saving in YAML file trowing errors πŸ˜„

org.yaml.snakeyaml.constructor.ConstructorException: could not determine a constructor for the tag tag:yaml.org,2002:org.bukkit.craftbukkit.v1_19_R1.inventory.CraftShapedRecipe
 in 'reader', line 2, column 3:
    - !!org.bukkit.craftbukkit.v1_19_R ... 
      ^
        at 
...```
river oracle
#

Looks like you should avoid the "!"

young knoll
#

Aww man there is no event fired when an empty dispenser activates

#

Sad

river oracle
#

or is there just no packet

young knoll
#

Why would there need to be a packet

#

Dispensers fire on the server, events are called on the server

river oracle
#

oh truee

trim lake
#

code was like this just simple xD

for(Iterator<Recipe> iterator = Bukkit.recipeIterator(); iterator.hasNext();) {
            Recipe rec = iterator.next();
            listRecp.add(rec);
        }
        
        recipes.getConfig().set("recipes", listRecp);
        recipes.saveConfig();
young knoll
#

Yeah sadly recipes are not ConfigurationSerializable

river oracle
trim lake
#

Hmm Im probably gona do yml like this (or idk in what else I can save it, new in java 😦 )

rectype:
  name:
     atributs:

Is there some better way? πŸ€”

ivory sleet
#
recipes:
  <recipe-name>:
    type: <type>
    attributes:
      #type specific stuff
trim lake
#

thanks a lot

ivory sleet
#

cheers

young knoll
#

Someone go make recipes ConfigurationSerializable :p

#

I’ll add it to my list I suppose

mortal hare
#

man clion is so good

#

compared to vs

#

i recently got my educational license

worldly ingot
mortal hare
#

and its literally intellij idea but on c++

earnest lark
#

In my TabCompleter i want to just have all the playters online be displayed how would i do that

delicate lynx
#

make it return the online players

earnest lark
#

Bukkit.getOnlinePlayers() returns a collection not a List

young knoll
#

It needs to be strings anyway

#

Use a loop to add their names to a list

delicate lynx
#

iterate through it and make your own list then

young knoll
#

Or get fancy with streams

worldly ingot
#

You can also just return null

earnest lark
#

oooh

#

yea

worldly ingot
#

Word of warning on that though, Paper has an option to disable that functionality (for some reason?)

earnest lark
#

well

worldly ingot
#
  • it doesn't support vanished players
earnest lark
#

im not on paper

worldly ingot
#

Then you're good to go lol

earnest lark
#

yea

young knoll
#

Wait that isn’t a paper only feature

#

Dang

warm mica
#

Should be the standsrd behavior

#

I am not the first

#

Nvm

warm mica
#

And they're decision making is more depandant on the position of the sun than whether it really makes sense and whether it would potentially damage existing servers, plugins or compatibility

trim elbow
#

If anyone needs help I can develop any plugin

#

message me any time

warm mica
river oracle
undone axleBOT
worldly ingot
#

Two to three days at most

#

He's consistent there

young knoll
#

Keep track of where the inventory was opened?

warm mica
#

I also don't think that you need to actually clone the items as spigot does that for you when it converts it to nms

#

.clone() is not needed in that line

young knoll
#

πŸ’€

#

I don’t understand how that plugin causes issues for people

#

Sounds like it should be a pretty simple plugin

river oracle
#

what plugin

#

if ur talking about crafting plugins I think i'd struggle with an effective way to chex matrixes without looping a god awful amount

#

that might actual require some decent though

#

Oh nvm

#

I miss reading lol

river oracle
worldly ingot
#

?

#

BlockPlaceEvent?

#

I'm not sure I understand

young knoll
#

If you are placing an item into an inventory slot it’s basically always the click event

#

Unless you are dragging it over multiple slots, then it’s the drag event

worldly ingot
#

Why'd you say block then? lol

#

putting a block in a space

valid solstice
#

Hello i’m not sure if this is dev related but when I try running a command or chatting, I get an error β€œChat disabled in client mode”

#

Anyone know how I can fix this?

#

I’m pretty sure it’s plug-in related

#

Cause when I restart the server, I can chat again

#

Then when a function runs from my plugin (essentially turns my gamemode to spectator), I can’t chat again

#

And I can certainly chat in other servers

#
@EventHandler
public void onRespawn(PlayerRespawnEvent e){
        Player player = e.getPlayer();

        if(not_yet_respawned.contains(player)){
            not_yet_respawned.remove(player);
            player.setGameMode(GameMode.SPECTATOR);
            String msg = mainClass.getConfig().getString("messages.end_event_leave");
            player.sendMessage(ChatColor.translateAlternateColorCodes('&', msg));
    }
}
#

this is the event handler

#

the if condition is what triggers this effect I think. That's my hypothesis

#

Fixed it… nvm

tepid acorn
#

Is there any way to change the players name on bungeecord?

You know like how there is the .setUniqueId(); method is there a .setUsername(); ? or similar?

misty ingot
#

iirc #setDisplayName should work on bungee

tepid acorn
misty ingot
#

cant do that

#

not possible

tepid acorn
#

rlly?

#

even if i modify bungeecord source?

misty ingot
#

you cant force change a someone's username in a game

#

you can only put a false username instead of it for show

#

yes, even if you modify source

tepid acorn
misty ingot
#

yeah, thats called setting a display name πŸ’€

#

the plugin just sets your display name to the target's username

#

it doesnt actually change your base username

tepid acorn
misty ingot
#

"forwarded username"?

tepid acorn
#

Well yeah its gonna be offline since its a backend lol

misty ingot
tepid acorn
#

no like

misty ingot
#

this guys brain is all over the place

tepid acorn
#

Username -> Bungee (Changes to NotUsername) -> SMP

#

Well the username is changed after the client logins so auth?

misty ingot
#

my brother in god, for the sake of ours and your own sanity
just make use of #setDisplayName and set it to the target name
and do pretty much the same for the skin

#

offline stuff = spigot is not the place

tepid acorn
#

where is the place

misty ingot
#

?whereami

misty ingot
remote swallow
#

most likely you would also have to spoof the name the client knows, so it still gets told the right thing

#

oh lmfao

tepid acorn
#

Well i just searched change name on bungee its the only thing i could find

misty ingot
#

only thing i could find != works

tepid acorn
#

true it doesnt work cuz the class it uses doesnt exist or smth

#

so i cant compile it

misty ingot
#

ok at this point theres 2 possibilities

sullen canyon
misty ingot
#
  1. this guy is trolling hard
  2. this guy is genuinely dumb but is at the wrong place because spigot is not the right place for offline stuff
remote swallow
#

i already know the exact issue why it cant compile and exactly how to fix it

misty ingot
#

bro its literally #setDisplayName just give up

remote swallow
sullen canyon
#

nah hypixel is using packets for this

misty ingot
#

thy must only useth resources why thine be bound by

tepid acorn
remote swallow
#

highly doubt that

misty ingot
#

packets is only for skin i believe

remote swallow
#

if anything hypixel works like libs disguise

misty ingot
#

^^^

tepid acorn
#

its kinda not a disguise

sullen canyon
#

😭 bro just look at proper copy of hypixel nick system like advancednick or smth

remote swallow
sullen canyon
#

setdisplayname is not enough

#

for something like that

#

the advancednick plugin is opensource

remote swallow
#

do hypixel use advanced nick?

misty ingot
#

ok @tepid acorn , "kinda" isnt accurate enough for us to help you
tell us what it IS and then maybe we could help

sullen canyon
remote swallow
#

okay? its not a copy

sullen canyon
#

if you think for a second you will understand setdisplayname is not enough bruuh

remote swallow
#

it might be similar but it isnt the exact hypixel code

misty ingot
#

cant be a copy if you dont have the og source

misty ingot
#

its schrodinger's cat thing

tepid acorn
#

so

#

basically i have a bungeecord hub

#

so you can do /name (username)

remote swallow
#

they set display name , modify chat formatting, use npcs for the skin and an armor stand for the name

tepid acorn
#

and then /join (ip) to join a server with that username

remote swallow
tepid acorn
#

You can start yelling abt piracy now ig...

sullen canyon
#

gimme a sec

tepid acorn
sullen canyon
#

i will send you the srcs

tepid acorn
#

GPT4 doesnt know anything about minecraft either so i cant use that 😒

remote swallow
remote swallow
misty ingot
#

or just servers on your network

tepid acorn
remote swallow
#

so you need a plugin on that proxy

tepid acorn
misty ingot
#

ok yeah

tepid acorn
#

except for the fact that its online mode

misty ingot
#

this is not happening sir

tepid acorn
misty ingot
#

nope

#

not possible

tepid acorn
#

i already have the /join (ip)

#

but i need to change name

remote swallow
#

you cant

misty ingot
tepid acorn
#

bruh

remote swallow
#

you cant auth with mojang

tepid acorn
#

so i can change UUID but not name

misty ingot
#

BECAUSE

remote swallow
#

you cant even connect to the servers

tepid acorn
misty ingot
#

you cant change UUID either bro πŸ’€

tepid acorn
misty ingot
#

BRO

#

MY

#

GUY

#

LISTEN UP

remote swallow
#

you still need something on that server to spoof your info, there is no way to do it without

remote swallow
#

if you want only want offline only, there is no point of this

#

just join with offline

tepid acorn
tepid acorn
#

cuz the bungeecord modifies packets

remote swallow
#

an extra step in the process

misty ingot
#

whatever point there is, you arent going to get the answer here

remote swallow
#

if its oflfine the server doesnt care what your name or uuid is

misty ingot
#

spigot is not the place for piracy

#

sorry

remote swallow
#

so why do you need bungee

torn oyster
remote swallow
sullen canyon
#

tbh this is funny how the whole minecraft coding community that injected their api beforehand decompiled minecraft srcs caring about piracy

tepid acorn
torn oyster
sullen canyon
#

isn't it piracy πŸ€”

torn oyster
#

Surely more than one person knows how to use redisson

remote swallow
tepid acorn
tepid acorn
#

The player joins the proxy

#

selects a name

#

and joins a server

#

then on the server i can modify the player's packets since its connected through a proxy

remote swallow
#

no?

#

thats not how bungee works

tepid acorn
#

Yeah it would have probably been easier to make my own reverse proxy but imma figure out the packet modification part later

misty ingot
#

@tepid acorn what part of "spigot is not the right place for piracy" do you not understand

#

and also what part of "that is not possible" do you not understand

#

so we can help you understand that part

remote swallow
#

you pretty much have to rewrite the entire bungee passing system to work on servers that arent even expecting "bungee" packets or info

tepid acorn
#

okay shit

remote swallow
#

it may be possible and this is a heavy maybe, if you had full access to the backend servers and could constantly modify that data if anything you have to modify the entire bungee passing and even at a minimum modify the server jar before spigot or anything gets to it

tepid acorn
#

bruh

#

so it would be easier to make a custom reverse proxy right?

#

so i have full access to the packets

remote swallow
#

idk why you are "bruhi"ing minecraft isnt built for this

tepid acorn
#

i mean like 2 ppl have done what im trying to do already

slim wigeon
#

Anyone has made a project in eclipse? I cannot get a working 1.19.3 spigot plugin, stuck using older versions like 1.17 or 1.16

tepid acorn
#

just that their stuff is private

remote swallow
remote swallow
#

?bootstrap

undone axleBOT
#

Bootstrap Jar
The main spigot-1.18.jar is now a bootstrap jar which contains all libraries. You cannot directly depend on this jar. You should depend on Spigot/Spigot-API/target/spigot-api-1.18-R0.1-SNAPSHOT-shaded.jar, or the entire contents of the bundler directory from your server, or use a dependency manager such as Maven or Gradle to handle this automatically.

Please read the release notes for further information: https://www.spigotmc.org/threads/9-years-of-spigotmc-spigot-bungeecord-1-18-1-18-1-release.534760/#post-4305163

tepid acorn
remote swallow
#

okay?

slim wigeon
#

Do you mind I talk to you via PM, I tried everything possible?

remote swallow
#

i dont use eclipse or an ide build system so i prob wont be much help

slim wigeon
#

I guess I have to downgrade my server and throw viaversion onto it

remote swallow
#

you can make a plugin for 1.17 and it work on 1.19

slim wigeon
#

I just seen that, thanks

torn oyster
wet breach
tepid acorn
#

πŸ‘€

#

dm

slim wigeon
#

@remote swallow Does 1.17 plugins work on 1.19.x? My plugin works but look at #help-server

wet breach
#

I dont do dms. There is nothing about it that would warrant such things

remote swallow
remote swallow
wet breach
#

Sounds like illegal things

kind hatch
#

^

tepid acorn
slim wigeon
#

Well, I don't know. it allows me to use /fly and /god like I said there, I just don't know

tepid acorn
#

its allowed on minecraft ToS

kind hatch
#

I don't know about that one chief.

wet breach
#

No it isnt

slim wigeon
#

You right @wet breach , who said anything about this?

tepid acorn
remote swallow
#

except it isnt

remote swallow
wet breach
wet breach
tepid acorn
#

Its offline mode network

wet breach
#

Then just send the packet with whatever name you want. We dont support offline mode here nor support doing shady things that have nothing to do with spigot

tepid acorn
slim wigeon
#

Offline mode/Cracked accounts. These don't work on paid servers such as Hypixel but I recommend stop talking about it as hacking into servers is illegal. No, I not talking about Wurst. These are 2 different things. Now to my programming

wet breach
#

But again go somewhere else with your shady stuff. Mc tos does not allow you to use offline mode for the purposes you have described, you not having backend access network to said network also points to you wanting to do shady things that is basically illegal or borderline as such. In all, this is not the place for such support and goes against the spigot rules and what spigot supports.

quaint mantle
#

Hello, does anyone knows reason of why ProtocolLibrary.getProtocolManager() is null?

#

Caused by: java.lang.NullPointerException: Cannot invoke "com.comphenix.protocol.ProtocolManager.createPacket(com.comphenix.protocol.PacketType)" because "pm" is null

#

google says In maven, I have to add <scope>provided</scope> but im using gradle

lost matrix
quaint mantle
lost matrix
#

On runtime?

lost matrix
quaint mantle
#

on my plugins folder

torn oyster
#

7smile idk if u saw but i kinda need your help with redisson

lost matrix
#

Hm? Whats the problem

torn oyster
#

well it just doesn't work

#

lemme reply to my post

torn oyster
lost matrix
torn oyster
#

the publish + subscribe

true perch
#

I don't need help at the moment, I just wanted to say that you're awesome @lost matrix ❀️

lost matrix
true perch
#

You're here helping people every time I check the discord haha

slim wigeon
#

@lost matrix You used maven before?

lost matrix
quaint mantle
torn oyster
lost matrix
torn oyster
#

otherwise the entire thing would not work

slim wigeon
#

I tried to write a plugin using maven and it was not compling so I just downgraded to 1.17 plugin structure

lost matrix
lost matrix
lost matrix
slim wigeon
#

Eclipe

lost matrix
#

Ok and how do you compile there?

slim wigeon
#

What you mean how?

lost matrix
#

What steps to you take in order to kick off the compiling and packaging of your plugin

#

Do you click buttons? Do you type something into console?

slim wigeon
#

I clicked buttons

#

I just tried to upload a gif

#

Showing what I do

lost matrix
#

sigh
Do you build artifacts? Thats what interests me.

#

In that case you can as well delete your pom.xml
because you dont use maven at all.

remote swallow
#

use imgur or verify to upload stuff

lost matrix
#

?paste

undone axleBOT
slim wigeon
#

I did but I first ran into this Java 18 error which I fixed but this one error showing the directory is not in the project folder, I just gave up and downgraded to 1.17 structure so I can just program without errors

lost matrix
lost matrix
slim wigeon
#

Before I switched to 1.17, @remote swallow said he does not program using mevan and I cannot find anyone to help me with it. If you the one that can, allow me to switch back. Otherwise, I running out of options

torn oyster
#

or well similar

#

do i have to create a new RedissonClient every time

#

or should I keep one instance defined in my class body

lost matrix
lost matrix
torn oyster
#

good

#

does my code look fine

lost matrix
#

Also, this is considered IO:

RTopic topic = client.getTopic(TOPIC_NAME);

As well as this:

topic.publish("Message [" + i + "]");
#

So not on the main thread pls

lost matrix
torn oyster
#

well i'm not too sure how to not do it on the main thread

remote swallow
#

futures or scheduler, futures are prob better

torn oyster
#

okay

lost matrix
# torn oyster okay

Your code looks fine. Make sure that both connect to the same redis instance.
Also: Add a debug message right before your subscribe and right before you send a message

true perch
#

My main plugin has 3 Manager variables.

public final ItemManager ITEM_MANAGER = new ItemManager(this);
public final GroupManager GROUP_MANAGER = new GroupManager(this);
public final PlayerManager PLAYER_MANAGER = new PlayerManager(this);```Is there any way my API could reference these variables? I can't think of a way for the life of me but it would make my life so much easier
slim wigeon
#

This is what I was seeing at first```Build path specifies execution environment J2SE-1.5. There are no JREs installed in the workspace that are strictly compatible with this environment. MG-Staging Build path JRE System Library Problem

lost matrix
# true perch My main plugin has 3 Manager variables. ```java public final ItemManager ITEM_MA...

First of all: All fields have to be private.
Only exception are constants (public static and final)

Your naming should be

  • itemManager
  • groupManager
  • playerManager

For referencing:
Really depends on how your API and plugin are structured.
The easiest way would be to create a static getter in your
JavaPlugin class. Then API methods should look like this:

  public static PlayerData getPlayerData(UUID playerId) {
    YourPlugin plugin = YourPlugin.getInstance();
    PlayerManager playerManager = plugin.getPlayerManager();
    return playerManager.getPlayerData(playerId);
  }
lost matrix
#
<properties>
    <maven.compiler.source>18</maven.compiler.source>
    <maven.compiler.target>18</maven.compiler.target>
</properties>

Add this to your pom as well

quaint mantle
#

problem solved thanks 7smile

lost matrix
quaint mantle
#

protocollib problem

lost matrix
#

Not version 5.0.0 i suppose

torn oyster
#

figured it out

#

i think

lost matrix
torn oyster
#

i called the setState() method before i initialized redis

#

so i made it call again after the server was ready

#

its a bit hacky since its setting itself to PRE_GAME twice but it shouldn't affect anything

slim wigeon
#

@lost matrix I missed a config tag, that might be why I was seeing errors. Lets see

#

I got it to work, plugin shows on my server

torn oyster
#

redis is a database right

#

how would i use that? i'd like to keep track of all live minigames

lost matrix
#

An in memory db

torn oyster
#

yeh that's fine

#

how do i read/write to it

lost matrix
#

Get a RMap and use it like a map

torn oyster
#

does it use SQL

lost matrix
#

No

torn oyster
#

what would be the best way to track the following:
minigame-id | port | state | player-count

#

all in one

lost matrix
#

RMap<Integer, MinigameData>

#

Or whatever your minigames id is

#

You can think about RMap like a HashMap.
But its on redis, so all connected servers can use it

slim wigeon
#

You can just use the Map built on Java. I forgot what function it is but it does work if you don't care about SQL

torn oyster
lost matrix
#
map.put(id, minigame);
quaint mantle
#

Hello, I hope you're doing well. in 1.19.4, how do you spawn a fake armorstand with custom name?

It prints "SEND FAKE ENTITY2.9",
This is my code and when I run this, server says "An internal error occurd..." Without Any coonsole errors.

#
ProtocolManager pm = ProtocolLibrary.getProtocolManager();
        PacketContainer packet = pm.createPacket(PacketType.Play.Server.SPAWN_ENTITY);
        packet.getModifier().writeDefaults();
        packet.getEntityTypeModifier().write(0, EntityType.ARMOR_STAND);
        packet.getUUIDs().write(0, UUID.randomUUID());
        packet.getIntegers().write(1, 1);
        packet.getDoubles().write(0, location.getX());
        packet.getDoubles().write(1, location.getY());
        packet.getDoubles().write(2, location.getZ());

        WrappedDataWatcher.Serializer byteSerializer = WrappedDataWatcher.Registry.get(Byte.class);
        WrappedDataWatcher.Serializer chatSerializer = WrappedDataWatcher.Registry.getChatComponentSerializer(true);
        WrappedDataWatcher.Serializer boolSerializer = WrappedDataWatcher.Registry.get(Boolean.class);
        List<WrappedDataValue> dataValues = new ArrayList<>();

        Byte flags = 0x20;
        dataValues.add(new WrappedDataValue(0, byteSerializer, flags));
        Optional<?> optChat = Optional.of(WrappedChatComponent.fromChatMessage(name.replace("&", "Β§"))[0].getHandle());
        dataValues.add(new WrappedDataValue(2, chatSerializer, optChat));

        Bukkit.broadcastMessage("SEND FAKE ENTITY2.5");
        Boolean nameVisible = true;

        Bukkit.broadcastMessage("SEND FAKE ENTITY2.6");
        dataValues.add(new WrappedDataValue(3, boolSerializer, nameVisible));

        Bukkit.broadcastMessage("SEND FAKE ENTITY2.7");
        Byte armorStandTypeFlags = 0x10;
        Bukkit.broadcastMessage("SEND FAKE ENTITY2.8");
        dataValues.add(new WrappedDataValue(15, byteSerializer, armorStandTypeFlags));

        Bukkit.broadcastMessage("SEND FAKE ENTITY2.9");
        packet.getDataValueCollectionModifier().write(0, dataValues);

        Bukkit.broadcastMessage("SEND FAKE ENTITY3");
        pm.sendServerPacket(player, packet);
#

So i stacktraced, stacktrace says that packet.getDataValueCollectionModifier().write(0, dataValues); is the problem
[20:18:56 WARN]: FieldAccessException: Field index 0 is out of bounds for length 0

torn oyster
#

redissonClient.getMap("name").doSomething

#

right?

lost matrix
#

Get the map once

remote swallow
#

anyone know if its possible to somehow use rcon and gradle to execute reload confirm on said rcon

lost matrix
eternal night
#

And writing the small kotlin yourself

remote swallow
#

bc ill prob only be using it for testing stuff

rotund ravine
#

You can.

eternal night
#

Like

#

Just smack a rcon lib in there

#

Have a buildAndReload task somewhere that depends on build/jar/shadowJar that copies the jar over into the plugins folder and then shoots a rcon command

remote swallow
#

kekw i cant find any working gradle rcon libs

eternal night
#

What do you mean gradle libs

#

Any java lib will do

remote swallow
#

ive tried them too

eternal night
#

I mean, either all tried open source java rcon libs are broken or you messed up somewhere XD

remote swallow
eternal night
#

What are you doing

#

Did you read the gradle docs I linked

#

You don't add that dependency as a dependency for your plugin, it's a dependency of your build script

remote swallow
#

still the same

eternal night
#

You reloaded the gradle project properly I presume ?

remote swallow
#

yep

eternal night
#

Version 1+ is a funny one ,

remote swallow
#

works as the latest 1.--- version

#

same error if i specify a version

eternal night
#

Missing the dot tho

#

But yes

remote swallow
#

doesnt work if i add the dot

true perch
#

Are you sure this would be best to do though? java public static PlayerData getPlayerData(UUID playerId) { YourPlugin plugin = YourPlugin.getInstance(); PlayerManager playerManager = plugin.getPlayerManager(); return playerManager.getPlayerData(playerId); }

#

I've been doing my absolute best to avoid static methods

#

since the data inside the PlayerManager is a HashMap (and I was told exposing that is not a good idea)

true perch
eternal night
#
buildscript {
    repositories {
        maven("https://jitpack.io")
    }

    dependencies {
        classpath("com.github.Pequla:RconCore:1.+")
    }
}

tasks.register("example") {
    Rcon("localhost", 42, "password".toByteArray())
}
#

works for me

#

obviously a import net.kronos.rkon.core.Rcon at the top

#

but beyond that

#

Β―_(ツ)_/Β―

remote swallow
#

without the dot

#

huh

#

it does work with the dot

#

it never did that like 2 weeks ago

eternal night
remote swallow
#

it appears rcon didnt want to start

lost matrix
true perch
lost matrix
lost matrix
true perch
#

For some reason I thought it'd be bad if they depended on each other

#

πŸ€·β€β™‚οΈ

#

That makes this so much easier! gaaaaah thank you

lost matrix
#

Well, your plugin should not depend on your API

true perch
#

My main use for the API at the moment is to have a way for multiple servers to be able to understand the same thing. Like, what a custom item is. I have all custom items loaded into memory on each server so they can be quickly accessed right away.

lost matrix
#

Your main should not use your API

true perch
#

Are you suggesting the way I'm using it at the moment is bad design? If so I would love to hear your thoughts on how I can improve.

lost matrix
#

You plugin should not use an API to basically communicate with itself.
It should work as a standalone application. The API should be written
after you are done with your plugin. If you follow the basic design principles
then your plugin should easily be accessible through the means of an API.

warm mica
#

But a separation between API and business code is definetly important

warm mica
true perch
#

At the moment my plugin is depending heavily on the API. I will do my best to take both of your advice and revert that

lost matrix
#

This is like calling someone over a phone that stands right next to you.
Why not just talk with him instead? If others want to speak with him they
need a phone and his number. But you dont.

remote swallow
#

i cant tell if your text is being forcefully wrapped across lines or you're doing

lost matrix
#

XD this is actually just me adding newlines at the end. Its because i have DC on
my second monitor and i dont want to turn my head all the way to the right when
writing something.

remote swallow
#

ahhh

echo basalt
#

bruh moment

#

just... create some distance between you and the monitors

#

no need to have your eyes glued

lost matrix
remote swallow
#

thats literally me

#

my bed is right behind my desk so i even put my feet up

wet breach
#

Just use a vr headset

#

I have a virtual computer workspace in vr. Its so awesome

lost matrix
wet breach
#

No need for physical monitors uwu

wet breach
eternal oxide
#

I've considered VR for dev work but I'm reluctant to buy

wet breach
eternal oxide
#

crappy lenses make it hard to pick a system

lost matrix
#

beat saber

#

Shapeless should be pretty easy, right?

#

But shaped recipes are really complicated to get right here.

true perch
lost matrix
#

InventoryClickEvent?

#

Yeah

wet breach
true perch
wet breach
#

You learn to type and grab stuff in the air

#

My headset can see and track my hands and arm movements

lost matrix
#

The hard part will be to actually detect which recipe is inside the matrix.
Checking when to update should be easy. Every time the matrix changes you need to
recalculate the output.

wet breach
#

Think of the second matrix movie where they have people in that control station

#

Its like that

#

But highly customizable to your liking lol

#

I can watch movies in vr too. Headset i have lets me create virtual rooms

#

So i can a movie going in vr and be doing stuff on my virtual computer. Virtual computer is linked to real computer but lets you do some neat stuff

#

Yes but no

#

I would use a 2d array. Map the slot id to the array indexes

#

This makes it easier to check the slots without needing to do a loop

wet breach
#

I will probably eventually get into vr programming

#

Then i could just wear my headset out in public and it provide me all kinds of info in regards to the physical environment. Like telling me how fast vehicles are travelling for example

true perch
lost matrix
#

You dont program in VR when programming for VR

wet breach
#

When first learning it your wpm will suffer

wet breach
#

Thats like saying you cant use a java ide to program in java lol

remote swallow
#

anyone know how i can relocate + exclude stuff from a minimize task in gradle, ive tried excluding in the minimize with / and . but it still removes the classes

lost matrix
wet breach
wet breach
#

Applications for vr are separate from the vr os system. Its no different the reloading an app on your computer. You dont need to reboot your entire computer to do it unless it involved the os itself

icy beacon
#

saw you talking about wpm and decided to test myself

#

last time i checked it was about 80-90

remote swallow
icy beacon
#

in my native language (Russian) my wpm is 94 πŸ’€

#

lower than in English

icy beacon
remote swallow
eternal oxide
#

if we are talkign no typos I can do about 10

icy beacon
#

ty

remote swallow
icy beacon
wet breach
remote swallow
#

wait until you find out i only do 7 second tests

icy beacon
#

yeah i thought it was lower lmao

icy beacon
#

let me try that

remote swallow
#

you get a lot higher speed on 7 second tests if you get lucky

icy beacon
wet breach
#

Most employers in the us that require typing typically have a minimum of 90 lol

icy beacon
#

consistency is really hard to keep

#

i'll try 2 minutes

remote swallow
#

not too bad

eternal oxide
#

All my time is spent correcting mistakes

wet breach
#

A proper test measures in 5 minute intervals

eternal oxide
#

Then again I havn't typed in MANY years

icy beacon
wet breach
icy beacon
#

is this good lol

remote swallow
#

im so slow

icy beacon
#

let's try 5 minutes

#

maybe you'll unlock your second breath

wet breach
icy beacon
#

hmm

#

yeah i'll try 5 minutes now

#

my fingers will not thank me

wet breach
#

At 90% you should easily have over 100wpm

#

Its faster to correct typos later and therefore you shouldnt worry about correcting a lot of them while typing.

#

You need to make your own matrix

lost matrix
#

This is a matrix

wet breach
#

Hence why i said use a 2d array

#

Int[][]

lost matrix
#

How is this helpful?

wet breach
#

I suppose you could keep it 1d array

lost matrix
#

What does that even mean?

#

I got to drive to uni now

wet breach
#

But 2d is just super quick in terms of looping if its needed.

lost matrix
#

alf will do

remote swallow
#

god im not good at typing for long periods of time

icy beacon
#

this shit was hard

eternal oxide
#

the matrix is the 3x3 grid

true perch
#

I ask one question about WPM and the chat really just took it and went with it lol

icy beacon
#

lmao

remote swallow
icy beacon
#

tbh i didn't except this high score

remote swallow
#

do you type with your hands left on f, right on j

#

or just randomly

wet breach
eternal oxide
#

just override it

#

to return the 9 you want

icy beacon
icy beacon
#

oh damn

remote swallow
#

when i was like 10 my school tried to teach us home row, left hand on f, right on j but i was way quicker just typing with two fingers but i just slowly after that started picking up where i could put other fingers to make it quciker to type

icy beacon
#

ngl every hand-related part of my body hurts now though

remote swallow
#

now i just use all fingers and mis spell a lot

remote swallow
#

my hands dont hurt, my elbows do

icy beacon
#

oh same yeah

remote swallow
#

posture be like

icy beacon
#

probably should rethink my ways of typing

remote swallow
#

my left pinky is shift and control my right just kinda sits there

#

or presses enter

wet breach
# icy beacon oh damn

You took a test 5 minutes long and got 100wpm. That means you could write 4 paragraphs or a small essay in 5 minutes as that is 500 words in that 5 minutes

remote swallow
eternal oxide
#

If your elbows hut you need to adjust your sitting position. You will suffer carpal tunnel syndrome VERY quickly. It will start with numbness in your pinkie finger

icy beacon
#

it'd probably be 6 minutes seeing as my speed would decrease over time but that's a good point yeah

icy beacon
#

i'll keep my posture in mind

remote swallow
#

how do i adjust my posture

wet breach
#

Also the reason for 5 minutes being the minimum for proper tests is it prevents copy and pasting

#

And makes such things more obvious

remote swallow
#

im just too quick

icy beacon
#

daamn

true perch
#

holy crap

#

insane.

#

F12 op

icy beacon
#

you'd type a 500 word essay in 0 minutes

remote swallow
#

nah

icy beacon
#

impressive

remote swallow
#

do the words test then just pre-emtively get read

icy beacon
#

frostalf

#

what's your wpm

#

you probably said it already but i forgot

#

rusting slowly πŸ˜›

wet breach
# icy beacon good to know, thanks

In regards to this recommend a rest pad for your wrists for when typing prolong periods. This helps your hands not get tired, and provides some comfort without losing posture

remote swallow
#

but its my elbow that hurts

#

its only my left elbow that hurts, because it rests off my desk

icy beacon
#

as a person who used to jitterclick a shit ton, your elbow and fingers are somehow related

round finch
#

why should developers be fast a typing
all we do is copy and paste

icy beacon
#

and copilot does all the typing

#

we are the minds

wet breach
#

Indeed because you have 2 nerves that run from your shoulder to your hands that go through your elbow on either side

icy beacon
#

that's easy though

#

Shift+F6, new name, enter

remote swallow
#

i changed that so i can shift right click lol

icy beacon
#

also good

remote swallow
#

zbll

icy beacon
#

hm?

remote swallow
#

do a punctionation + numbers minute test

wet breach
#

Yes

icy beacon
#

hm

#

alright

remote swallow
#

or just punctuation

icy beacon
#

time?

remote swallow
#

60

icy beacon
#

kk

wet breach
#

It can be 1d, but it should be a 2d array

remote swallow
icy beacon
#

that's quite eh

remote swallow
wet breach
#

Most keyboards have numbads unless its a small keyboard

icy beacon
#

numpad is too far away though

remote swallow
#

i have a tkl keyboard

#

i dont have the space for a numpad

icy beacon
#

let me try with a numpad actually

#

nah

#

it isn't convenient for me

remote swallow
#

numbers are hard

icy beacon
#

epic

#

try a long quote

remote swallow
#

im a fuckin speedy bitch

icy beacon
#

"custom"

#

speedy

#

xD

#

do this

remote swallow
#

it was The quick brown fox jumps over the lazy dog

icy beacon
#

I just had the quote from all star

remote swallow
wet breach
# icy beacon let me try with a numpad actually

Numpad you use your right hand and keep it placed in the center. Index on 4 middle on 5 and ring finger on 6. In this fashion you dont have to move your fingers very far to hit any of the numbers and your thumb is used for the 0 and bottom keys

icy beacon
#

Well, the years start coming and they don't stop coming Fed to the rules and I hit the ground running Didn't make sense not to live for fun Your brain gets smart but your head gets dumb So much to do, so much to see So what's wrong with taking the back streets?

#

this shit

#

but i restarted it

#

😭

icy beacon
#

moving the hand from here to there is a hassle and a bit

wet breach
#

Thats when you learn a different style of typing. But numpad is only good if you have a lot of numbers to type

remote swallow
#

fuck me

wet breach
#

Not just a few lol

remote swallow
#

punctuation is hard

icy beacon
#

quotes are goated

#

you can both practice wpm

#

and get an existential crisis

remote swallow
#

im great at all lower case no punctuation

icy beacon
#

try english 450k

remote swallow
#

as soon as i need to add capitals, full stops or quotes in im dead

icy beacon
#

πŸ˜„

wet breach
#

Yeah sometimes punctuation tests can be hard. Most of my accuracy misses on tests is mainly me forgoing punctuation because its faster for me to leave those out and then go back after i am done to add them in

remote swallow
#

i'll add commas randomly if i think what im saying is too long but thats it

#

and i wont be typing at max speed

wet breach
#

I usually have my word processor setup to auto capitalize after using a space after the period

icy beacon
#

should we move to #general ?

remote swallow
#

this is general

icy beacon
#

fair

remote swallow
#

im gonna give my elbow a break

#

it hurts a bit

wet breach
#

Lol

remote swallow
#

for some reason its only my left elbow

wet breach
#

Also the type of keyboard you have affects your wpm too

#

I use a mechanical keyboard uwu

remote swallow
#

if you dont you arent a real dev

icy beacon
#

i have a membrane keyboard

remote swallow
#

get out

icy beacon
#

because i can't afford time to buy a mechanical 😭

brisk estuary
#

or you just don't have money to buy one

#

which is my case lol

icy beacon
#

i've wanted one for like 1.5 years to get it

remote swallow
#

also when you do get one, whatever you do

icy beacon
#

but yeah first of all shit's expensive

remote swallow
#

dont get blue switchesd

icy beacon
#

haha

remote swallow
#

blue switches are so loud

wet breach
icy beacon
#

yeah if i buy one i want to get a good one

remote swallow
#

you only get blue if you live alone

icy beacon
wet breach
#

Lol

icy beacon
#

i'm waiting for my commission pay still

#

and i'll put off 100% of it

wet breach
#

You live in the US?

icy beacon
#

nope

#

Russia

remote swallow
#

how much is it

#

the comission

icy beacon
#

170$ approx

wet breach
#

Nvm then cant buy you one

remote swallow
#

dayum

icy beacon
#

which is a steal ngl

brisk estuary
#

I wish I lived in US, everything is cheaper

icy beacon
#

i've increased my prices approximately 3 times after this commission lmao

remote swallow
#

zbll are you in helpchat

#

theres so many just easy comissions there

icy beacon
icy beacon