#dev-general

1 messages ยท Page 312 of 1

hot hull
#

Move the spacer above the button?

obtuse gale
#

How do i move the spacer lol

hot hull
#

These are the spacers you need

obtuse gale
#

but the spacers get in the way of the components lol

hot hull
#

Make the components first, then put in the spacers

obtuse gale
#

I havent put one spacer in

#

IJ put it in for me .-.

#

also idk what these lines are

#

because they get in the way of components but they arent spacers

hot hull
#

Check the xml file idk

obtuse gale
#

I got it here which is close enough

#

problem when its actually put in it looks shit lol

#

everythings so small

hot hull
#

Well yea

#

You need to set the size of the components

obtuse gale
#

This is the sized everything is atm lol

old wyvern
#

Group them into multiple layouts

obtuse gale
#

what

hot hull
#

You're also having them through the entire page which looks hideous

old wyvern
#

Youd normally be usign nested layouts to form your ui

obtuse gale
#

what lol

#

how

#

idc how its donei just need it to look ok and have 3 JComboBoxes and a JLabel for each

old wyvern
#

The top part looks like it could use a row box layout, and for the bottom one a similar vertical one

obtuse gale
#

i dont know what those words mean lol whats a row box layout

old wyvern
#

They describe how to set everything up I think

hot hull
#

@old wyvern When you get on let me know, I'll give you a weapon which will be really good for you

old wyvern
#

Alrighty

unkempt tangle
#

me first time with c

obtuse gale
#

Anyone knows which is the packet that draws the crossbow animation and let you look like you are pulling the crossbow?
I was asking for information around.. if you have any please let me know I would appreciate it, thanks!

unkempt tangle
#

Can anybody explain me the difference between those different joins?

EQUIJOIN, THETAJOIN and NATURAL JOIN

obtuse gale
#

Wait why am i meant to use layouts instead of just chucking it all in again?

#

like this is just an IJ plugin, this screen isnt gonna be shown for long lol]

hot hull
#

Cleanness

unkempt tangle
#

Natural Join is the ON clauses on ALL collumns
Theta Join allows you to specify conditions >, <, <>
Equi Join is the most common on it allows you to equal two relations with each other.

#

Is this correct?

jovial warren
#

very nice

unkempt tangle
#

I am about to write exams in 2 hrs

#

no one supports me ;c

jovial warren
#

oof

#

gl

obtuse gale
unkempt tangle
jovial warren
#

I'm bad at spacing out commits lol

jovial warren
unkempt tangle
obtuse gale
#

I just want my thing to be bigger

#

and look not shit lol

obtuse gale
#

its 6 components .-.

old wyvern
#

๐Ÿคท

#

Id suggest doing it

#

But up to you I guess

obtuse gale
#

will that change the appearance of it? Or will it still be way too small

#

OR just make this look less shit lol

old wyvern
#

It will be easier to maintain spacing possibly

#

You wont have to spam spacers everywhere

#

Also, didnt ij provide its own lib for UIs for plugins?

obtuse gale
#

does it?

old wyvern
#

I think so

jovial warren
#

MineKraft is now 0.4.1, anyone wanna test? xD

old wyvern
#

I remember Matt bringing it up once

#

Might wanna confirm with him

#

frost

regal gale
#

It is

obtuse gale
#

I need a JComponent for the return values of things

old wyvern
#

im playin wf rn

#

@hot hull

jovial warren
#

big ew

#

JavaFX objectively superior

hot hull
#

oo

obtuse gale
#

idk im making an IJ plugin

old wyvern
#

IJ stopped packaging JavaFX with it as well

jovial warren
#

ah, IJ's UI

old wyvern
#

So now you'll need to shade that if you need to use it

jovial warren
old wyvern
#

Yea

jovial warren
#

also, MineKraft v0.4.1 test 168.119.171.28:25565 (I think lol)

#

authentication works now, so for the moment you must only use legitimate Minecraft accounts

#

and encryption

obtuse gale
jovial warren
#

๐Ÿ‘€

#

I'd have to find out which one it is that actually does crossbows first

#

but I want to help you, not do it for you ๐Ÿ™‚

obtuse gale
jovial warren
#

I like teaching lol

obtuse gale
#

Wait, you mean you may help me?

#

I don't have nothing to do with coding haha, I rely on my dev for that but he's struggling findind a solution for that..

jovial warren
#

I can help him then if you want

obtuse gale
#

If you could help me out in that I would really appreciate it

#

That would be good actually ๐Ÿ˜„
What about if you make a working plugin that does that and eventually a simple explanation on how it's done?

jovial warren
#

I'd rather just make code that works and then explain that, and then you/your dev can make the plugin themselves

#

tell your dev it will require NMS, he might know what that means

obtuse gale
#

That's the idea, the dev does know what nms is and he's good at it but I think it requires a little bit of "extra" knowledge on that

obtuse gale
#

๐Ÿ™‚

jovial warren
#

well, I'm making my own Minecraft server implementation from scratch, so I know at least a decent amount about packets

obtuse gale
#

Awesome! Basically we are working on a shooting gamemode which requires to send a packet that replicates the crossbow pulling like in the picture, as simple as that just to clarify ๐Ÿ˜„

jovial warren
#

ah right

obtuse gale
#

Oh I cannot send pics sorry

regal gale
#

?imgur

compact perchBOT
#
FAQ Answer:

You won't be able to upload images here directly to avoid spam, so please use https://imgur.com/ to upload images/screenshots.
You can also use a screenshot service like gyazo or jinx and post those links here.

obtuse gale
#

Thanks man

regal gale
#

๐Ÿ‘

obtuse gale
jovial warren
#

ah I see

obtuse gale
#

It's an assault rifle

jovial warren
#

kinda guessed that xD

obtuse gale
#

๐Ÿ˜†

#

Glad it's easily recognizable haha

jovial warren
#

finding the mother fucker that handles this is a pain in the ass lol

obtuse gale
#

Yeah that's why Im here xD

#

Im sure it's possible since a dev once managed to make it work

#

But he scammed me a lot of money and went to Mexico..

jovial warren
#

the rule is: if it's something that other players can see, it's a packet that's sent and received

obtuse gale
#

So no plugin to prove it, but I saw it was actually doable

jovial warren
#

basically, let me try and explain how client-server works in the easiest way possible

obtuse gale
#

All right

jovial warren
#

when you want to do something, you send something called a "packet" to the server, basically saying "hey, I'm doing this", and the server generally either responds to you and says "okay, I've received that" (called an acknowledgement), and then either another response packet to just you saying "right, I've got all that, now can you do this?"

#

or they will send a packet to other clients saying "hey, x is doing this"

obtuse gale
jovial warren
#

indeed

obtuse gale
#

๐Ÿ™‚

jovial warren
#

we need to find the packet where the client goes "hey, I'm drawing my crossbow back" and then the server tells the other clients "hey, x is drawing their crossbow back"

obtuse gale
#

from the backstage someone suggested me that: entity equipment packet

jovial warren
#

that's a shout

obtuse gale
#

Good!

jovial warren
#

you're right

#

send an entity equipment packet with the entity ID (likely just an NMS entity in our case), the slot as a byte enum (likely just an enum), and some NBT data about the item

somber tulip
#

Who was it that made that class name generator that just added words like "Impl, Service, Dao" etc to words and where can I find it lol

jovial warren
#

me and BM did

#

I can give you my Python one if you want

somber tulip
#

That'd be great ๐Ÿ™‚

jovial warren
#
import random

possibilities = [
    "Factory", "Bean", "Wrapper", "Visitor", "Model", "Singleton",
    "Method", "Configuration", "Exception", "Error", "Property", "Value",
    "Identifier", "Attribute", "Authentication", "Policy", "Container",
    "Order", "Info", "Parameter", "Request", "Adapter", "Bridge",
    "Decorator", "Facade", "Proxy", "Worker",
    "Interpreter", "Iterator", "Observer",
    "State", "Strategy", "Template", "Comparator", "Clone", "Task",
    "Resolver", "Candidate", "Expression", "Predicate",
    "Thread", "Pool", "Descriptor", "Interceptor", "Definition",
    "Getter", "Setter", "Listener", "Proccesor", "Printer",
    "Prototype", "Composer", "Event", "Helper", "Utils",
    "Invocation", "Exporter", "Importer", "Serializer", "Callback",
    "Tag", "Context", "Mapping", "Advisor", "Filter", "Field", "Test",
    "Tests", "Connection", "Annotation", "Service", "Repository",
    "Stub", "Mock", "Instance", "Dispatcher", "Client", "Server",
    "Message", "Map", "List", "Collection", "Queue", "Manager",
    "Database", "Reponse", "Broadcaster",
    "Watcher", "Schema", "Mapper", "Publisher", "Consumer", "Producer"
]

print(''.join([possibilities[random.randrange(0, len(possibilities))] for i in range(0, 20)]))

somber tulip
#

Thank you c:

jovial warren
#

yw

#

@obtuse gale PacketPlayOutEntityEquipment with the entity ID and a list of slots apparently

obtuse gale
#

Thanks!

jovial warren
#

yw

#

also, see https://wiki.vg/Protocol#Entity_Equipment for the packet structure and https://minecraft.gamepedia.com/Player.dat_format#Item_structure for the NBT structure (not sure what kind of list the slot list is)

Minecraft Wiki

<player>.dat files are used by servers to store the state of individual players. The format is also used within level.dat files to store the state of the singleplayer player, which overrides any <player>.dat files with the same name as the singleplayer player. These files are in NBT format.

obtuse gale
#

I hope it's doable..

#

We'll try out! ๐Ÿ˜ƒ

jovial warren
#

it's not just doable, it's ez

obtuse gale
#

lol, great to hear!

jovial warren
#
public void sendEntityEquipment(final Player player, final Entity entity, final List<Pair<EquipmentSlot, ItemStack>> slots) {
    final PlayerConnection connection = ((CraftPlayer) player).getHandle().playerConnection;
    final List<Pair<EnumItemSlot, ItemStack>> nmsSlots = slots.stream().map(pair -> new Pair(CraftEquipmentSlot.getNMS(pair.getKey()), CraftItemStack.asNMSCopy(pair.getValue()))).collect(Collectors.toList());

    connection.sendPacket(new PacketPlayOutEntityEquipment(entity.getId(), slots));
}
#

ah, takes a list of pairs

#

lemme change my code gimme a min

obtuse gale
#

๐Ÿ˜ฎ

jovial warren
#

where Pair btw is ```java
public final class Pair<K, V> {

private final K key;
private final V value;

public Pair(final K key, final V value) {
    this.key = key;
    this.value = value;
}

public K getKey() {
    return key;
}

public V getValue() {
    return value;
}

}

#

and gonna amend my code once again because of the change in pair design

obtuse gale
#

lol

jovial warren
#

done

#

yw

obtuse gale
#

Woah.. we'll test it asap, thank you so much m8! ๐Ÿ˜„

jovial warren
#

if you can though, try to shove an @author Callum Seabrook javadoc tag in there ๐Ÿ™‚

#

Bardy = bigbrain

#

sometimes

obtuse gale
#

@author Callum Seabrook

jovial warren
#

just the javadoc tag to say that I authored that bit of code

#
/**
* @author Callum Seabrook
*/
obtuse gale
#

Oh

jovial warren
#

also reminds you that you can come to me if you have issues with it xD

obtuse gale
#

Thank you very much, that's so kind of you!

jovial warren
#

you're welcome bud

obtuse gale
#

See ya soon then ๐Ÿ˜„ โœŒ๏ธ

jovial warren
#

๐Ÿ‘‹

#

also, someone jump on the MineKraft test server please, so I can test entity positioning ๐Ÿ™‚

#

168.119.171.28:25565

hot hull
#

busy playing games rn

jovial warren
#

phat oof

hot hull
#

lemme open mc

jovial warren
#

alright

normal talon
#

advertising ooooh

#

version ?

jovial warren
#

it's called collecting testers xD

#

it's 1.16.5

hot hull
jovial warren
#

that's a fat oof

#

try connecting now I'm disconnected?

#

okay yeah I see

normal talon
#

this minecraft server is written in Kotlin ๐Ÿ™‚

jovial warren
#

kotlin.UninitializedPropertyAccessException: lateinit property profile has not been initialized

normal talon
#

best MOTD ever

jovial warren
#

indeed it is

#

and it has random RGB colours as well

#

courtesy of Komponent's Color#random

hot hull
#

Goddamn, gotta setup mc dev server back

#

My MOTD better

jovial warren
#

that will become configurable

#

soonโ„ข๏ธ

hot hull
#

:moan:

jovial warren
#

beautiful amirite

prisma wave
#

Nice

jovial warren
#

also replaced all printlns with LOGGER.debug

#

where LOGGER is private val LOGGER = logger<ClassName>()

#

and logger is inline fun <reified T> logger() = LoggerFactory.getLogger(T::class.java) ๐Ÿ™‚

#

because SLF4J superior

#

wdym?

#

then it won't compile, since those are all non-null

#

also, ```kotlin
session.sendPacket(PacketOutStatusResponse(StatusResponse(
ServerVersion("1.16.5", 754),
Players(
MAX_PLAYERS,
ServerStorage.playerCount.get(),
players
),
textComponent("MineKraft is a Minecraft Server written in Kotlin!") {
color = Color.random()
}
)))

#

that's all the code pretty much for the status

#

also, might figure out which parts of netty we actually need at some point and depend on those instead of depending on all of netty when we don't need it

#

also, the jar is still 31.8 MB ffs

#

what did I do

oak coyote
#

Jars not from Microsoft themselves are typically much larger

jovial warren
#

maybe because I'm depending on a shit ton of libs

stuck harbor
#

use pdm ;)

prisma wave
#

๐Ÿ˜Š

jovial warren
#

PDM won't do shit here though

#

it'll just split the big phat jar off into lots of smaller jars

stuck harbor
#

and?

#

that's better :)))

jovial warren
#

that literally solves nothing

hot hull
#

kek

stuck harbor
#

then use compression mmm

jovial warren
#

okay @prisma wave fastutil is going

prisma wave
#

no

jovial warren
#

it's almost 23 MB

#

fuck that

frigid badge
#

who cares about size

#

besides women

prisma wave
#

^

jovial warren
#

ffs

#

surely fastutil is modulised

hot hull
#

Lmao Lemmo

prisma wave
#

Surely it can't be 23MB

stuck harbor
#

burp mmm

frigid badge
#

it's only 23mb

hot hull
#

That actually made me laugh

prisma wave
#

Bigger than hibernate ๐Ÿฅฒ

jovial warren
hot hull
#

bardy, beautiful MOTD

jovial warren
frigid badge
#

85M ./oms-api

stuck harbor
#

I love legacy code

jovial warren
stuck harbor
#

java 7 :)

hot hull
#

I will slap you

frigid badge
#

23mb nothing compared to my 85mb

jovial warren
#

which outputs the list of all dependency sizes in order

#

tf do we even use fastutil for anyway?

stuck harbor
#

import lib.from.the.1990s

frigid badge
#

for speeed

prisma wave
#

It's fast

#

Duh

jovial warren
#

I swear we use it literally once

stuck harbor
#

it is a fast util

frigid badge
#

look at that speed

#

incredible

prisma wave
#

Not quite as fast as elara but it's the best you can do in a primitive language like Java and kotlin

stuck harbor
#

primitive what

#

I think wasm is the least privileged language

prisma wave
#

An outdated language ๐Ÿ™‚

stuck harbor
#

stonks

frigid badge
#

lol

stuck harbor
#

php is the most modern imo

#

the syntax of the future

jovial warren
#

surely the speed:size ratio isn't that good

#

based on the fact that we use it in literally 1 place

stuck harbor
#

all of my plugins are O(n!)

#

very good

#

10/10

jovial warren
#

very nice

lunar cypress
#

just the entire plugin

jovial warren
#

||not||

stuck harbor
#

||mm||

jovial warren
#

please can I yeet it BM?

hot hull
#

Better now

stuck harbor
#

stonks

#

my dev server is at 127.0.0.1

jovial warren
#

the only place we use this is an Int2ObjectMap in PacketState

#

I could probably just copy the code of this one class into somewhere and then yeet this

#

but I don't even see how this is really faster

prisma wave
#

no boxing

jovial warren
#

we don't need this entire library

prisma wave
#

We'll probably use it in other places too

jovial warren
#

it's fucking huge though

prisma wave
#

Who cares about jar size anyway

#

Makes no difference

jovial warren
#

I suppose

#

in that case we should've used Spring lol

oak coyote
#

Matters to me ๐Ÿ˜ข

prisma wave
#

The "high performance" framework

hot hull
#

Noone gives two fucks about size

oak coyote
#

Takes me ages to upload

hot hull
#

Except women as Lemmo said

jovial warren
#

lel

oak coyote
#

Hey my internet is very slow so I care

jovial warren
#

also, how many times we actually going to access that packet map?

prisma wave
#

Idk

oak coyote
#

I had to completely fork supervanish recently for being dumb

jovial warren
oak coyote
#

It Decided to modify the same packet in 2 different locations and read it non async both times ๐Ÿ™„

jovial warren
hot hull
#

Pathetic.

oak coyote
#

Well Iโ€™ll likely put a push request soon see if they want it

#

But need to reactivate their Persistence and handle it better cause they didnโ€™t ๐Ÿ˜‚

hot hull
#

:what:

oak coyote
#

They saved persistence (vanished data) every time something changed non async so surprise surprise server didnโ€™t really appreciate that

obtuse gale
#

How do i make this look less shit lol

normal talon
#

don't make it shit

#

๐Ÿ™‚

jovial warren
#

also, can someone please explain to me who's bright idea it was at Mojang to have (inbound) player movement packets be absolute and (outbound) entity movement packets relative

#

lol

normal talon
#

Microsoft stuff you know

jovial warren
#

official language in: the seven seas

regal gale
#

You forgot LOLCAT

normal talon
#

I arrr

jovial warren
#

LOLCAT?

#

wat dis

regal gale
jovial warren
#

wen dis added

regal gale
#

Since 1.9

jovial warren
#

and where I find

regal gale
#

I mean... if you could scroll longer ._.

jovial warren
#

I'm looking for it in game lol

#

ah got it

half harness
#

intellij is taking 15 minutes to index ๐Ÿ˜ซ

#

this is like the third time it's indexed the jdk

#

AHGHHh

#

right when i thought it was done

#

it decided to index the jdk again

#

what is wrong with intellij

#

now it's "Updating indexes"

#

it finished

#

if it starts indexing the jdk again I'm going to go nuts

unkempt tangle
#

@prisma wave finally DONE

obtuse gale
#

how do i disable full capslock name's, is there a plugin for that

signal tinsel
#

Is jetbrains toolbox any good?

#

Setting up a new machine

stuck harbor
#

I mean, yeah

#

it's useful to manage all intellij's IDEs if u have multiple

signal tinsel
#

Yeah, I use multiple

#

Wtf, why is time on my Discord broken as fuck

#

Oh my entire pc's time is dead

prisma wave
signal tinsel
#

Ok, fixed it

heady birch
#

int i = 0;
for (char c : nameToCheck) {
if (c.toUpperCase() == c) {
i++;
}
}

if (i == nameToCheck.length() - 1) {
//name is fully uppercase
}

distant sun
#

d;jdk Chracter#isUpper

ruby craterBOT
#
public static boolean isUpperCase(charย ch)```
Description:

Determines if the specified character is an uppercase character.

A character is uppercase if its general category type, provided by Character.getType(ch), is UPPERCASE_LETTER. or it has contributory property Other_Uppercase as defined by the Unicode Standard.

The following are examples of uppercase characters:

Many other Unicode characters are uppercase too.

Note: This method cannot handle supplementary characters. To support all Unicode characters, including supplementary characters, use the isUpperCase(int) method.

Parameters:

ch - the character to be tested.

Returns:

true if the character is uppercase; false otherwise.

prisma wave
heady birch
#

๐Ÿ™„ Fine

for (char c : nameToCheck) {
if (Character.isUpperCase(c)) {
return false;
}
}
return true;

prisma wave
#

๐Ÿ˜Š

heady birch
#

๐Ÿ˜„

prisma wave
#

both algorithms are O(n)!! Problem???

heady birch
#

republican programmers: cobol, fortran, c ๐Ÿ‡บ๐Ÿ‡ธ
democrat programmers: dart, go, javascript

prisma wave
#

that is a false dichotomy and factually incorrect

heady birch
#

What is a dichotomy

prisma wave
#

idk

jovial warren
#

is defining your own number types a good idea?

#

just wondering if it's worth me having it be a number or not

forest pecan
#

how much are you going to be using it

jovial warren
#

quite a bit

#

I mean, if I could, I would have you define it something like val angle = 4a or something, but that would require compiler changes so fuck that xD

prisma wave
#

F# supports that :)

#

I think

jovial warren
#

yeah but Kotlin unfortunately doesn't

#

and MineKraft is in Kotlin, not F# lol

#

also, the lack of consistency in the protocol is so frustrating

forest pecan
#

I mean ig its ok

#

because you could add some inner methods and stuff

#

inside the angle to change it up

#

and it would be useful

jovial warren
#

there'll be a method to change it to degrees, and to make a new angle from degrees, since those are a pain

forest pecan
#

Yeah

jovial warren
#

what I'm currently using to turn degrees to angles is ((this / 360.0f) * 256.0f).roundToInt()

forest pecan
#

Oof

distant sun
jovial warren
unkempt tangle
#

I think 1.17 will be another iteration that will split the community.

#

Massive changes

ocean quartz
#

How will it split the community?

static zealot
#

I wonder how the performance will be relative to 1.16

ocean quartz
#

Well so far one of the concern ones was the sculk sensor, which they actually optimized pretty well
So hopefully they are having performance in mind now

hot hull
#

It should have better performance than 1.16

forest pecan
#

kid literally leaked his ip address to show a dynmap

#

lol

winter iron
#

Its sad to think that you seriously have to wonder who has your IP these days :/

forest pecan
#

Yeah cause leaking happens too often

jovial warren
#

god damn you signed bytes xD

#

unsigned byte time

forest pecan
#

wish unsigned types existed in java

#

having both would be like

#

๐Ÿคฉ

jovial warren
#

luckily, Kotlin has unsigned types

#

they're experimental, but they work

jovial warren
#

io.netty.handler.codec.DecoderException: Unknown serializer type 300 phat oof

unkempt tangle
#

@ocean quartzThe experiences shown that too many changes can cause huge backlash.

#

World dimension has significally changed. VOID is no longer at y:0

#

Block height increased to 320, depth -64

ocean quartz
unkempt tangle
#

I didn't vote.

unkempt tangle
#

The vote was rigged.

ocean quartz
#

Ricked lmao

hot hull
#

You're an idiot

ocean quartz
#

Oceans, cave, and nether update have been the most wanted ones in years, latest updates have all been pretty damn nice (except the villagers one, was kinda boring)

hot hull
#

What we need is the multithreading update

ocean quartz
#

Yeah

steel heart
#

aether engine implementation when

obtuse gale
#

later tonight

ocean quartz
#

I wonder how hard it be to make aether in java

static zealot
ocean quartz
#

Yeah it'll be awesome

static zealot
#

I mean its just started and it already looks sick

ocean quartz
#

Blitz aether engine not the aether mod xD

jovial warren
#

I have done some proper hacks.exe with metadata writing lol

#
fun ByteBuf.writeMetadata(index: UByte, type: MetadataType, value: Any?) {
    writeUByte(index)
    if (index != 0xFF.toUByte()) {
        writeVarInt(type.id)
        when (type) {
            MetadataType.BYTE -> writeByte((value as Byte))
            MetadataType.VARINT -> writeVarInt(value as Int)
            MetadataType.FLOAT -> writeFloat(value as Float)
            MetadataType.STRING -> writeString(value as String)
            MetadataType.CHAT -> writeChat(value as Component)
            MetadataType.OPTIONAL_CHAT -> writeOptionalChat(value as Component?)
            MetadataType.SLOT -> writeSlot(value as Slot)
            MetadataType.BOOLEAN -> writeBoolean(value as Boolean)
            MetadataType.ROTATION -> writeRotation(value as Rotation)
            MetadataType.POSITION -> writePosition(value as Position)
            MetadataType.OPTIONAL_POSITION -> writeOptionalPosition(value as Position?)
            MetadataType.DIRECTION -> writeVarInt((value as Direction).id)
            MetadataType.OPTIONAL_UUID -> writeOptionalUUID(value as UUID?)
            MetadataType.OPTIONAL_BLOCK_ID -> writeVarInt(value as Int)
            MetadataType.NBT -> writeNBTCompound(value as CompoundBinaryTag)
            MetadataType.PARTICLE -> writeParticle(value as Particle)
            MetadataType.VILLAGER_DATA -> writeVillagerData(value as VillagerData)
            MetadataType.OPTIONAL_VARINT -> writeVarInt(value as Int)
            MetadataType.POSE -> writeVarInt((value as Pose).id)
        }
    }
}
#

hacks.exe

prisma wave
#

wtf

ocean quartz
#

Couldn't this be simplified with generics?

jovial warren
#

probably

#

would still need to cast though

#

doesn't seem to work

#

they throw nosuchmethoderrors I think

#

java.lang.NoSuchMethodError : Method not found: MemberDescription(ownerInternalName = me/bristermitten/minekraft/extension/BytebufsKt, name = writeMetadata-srPc2dE, desc = (Lio/netty/buffer/ByteBuf;BLme/bristermitten/minekraft/entity/metadata/MetadataType;Ljava/lang/Object;)V, isStatic = true)

#

well that's not good

#

yeah the decompiled code for this is proper whack

forest pecan
#

POV: Use try and catch statements and surpress the errors

#

๐ŸŒš

jovial warren
#

yeah that's not gonna work

forest pecan
#

lol

jovial warren
#

maybe I should've just gone with what I was doing before, which was to just make a method for each of the 19 different types of metadata that can be written (which I've kinda somewhat already done anyway)

onyx loom
#

๐Ÿฅถ

jovial warren
#

going to abuse method overloading for this lol

pliant badger
#

can anybody help me with some sort of css styling problem?

#

i hate css.

obtuse gale
steel heart
#

scss

pliant badger
#

i use less

steel heart
pliant badger
#

because less css

#

the better

#

๐Ÿ˜†

steel heart
#

yeah I hate css too

jovial warren
#

not again

unkempt tangle
#

Japanese is so great

jovial warren
unkempt tangle
#

@jovial warren make it easier to add fake players.

jovial warren
#

why?

unkempt tangle
#

Why not

onyx loom
#

player spoofing ๐Ÿ˜

unkempt tangle
#

If you do it in spigot

#

You needs to work with thousands packets

#

nms nightmare

onyx loom
#

ok

#

just dont do it

unkempt tangle
jovial warren
#

omfg me and my alt can see each other now

unkempt tangle
#

movement?

#

animations?

jovial warren
#

there is movement

#

no rotation, so heads don't spin yet

#

but there is movement

#

no animations yet either

unkempt tangle
#

Is there some sort of refresh rate?

jovial warren
#

wdym refresh rate?

unkempt tangle
#

ticks per update

jovial warren
#

it will send entity move packets as soon as it receives the packets from the clients

#

gonna upload the jar and run it for fun if anyone wants to join and see lol

#

168.119.171.28:25565

#

1.16.5

jovial warren
#

no

#

it's a Minecraft server from scratch lol

#

everything in that project was made by me and BM

#

no Mojang code, no Bukkit code, no Spigot code, no Paper code

shy cosmos
#

Can someone here help me maybe?

jovial warren
#

depends on what your issue is

obtuse gale
regal gale
jovial warren
#
private fun handleRotationUpdate(packet: PacketInPlayerRotation) {
    SessionStorage.sessions.filter { it != session && it.currentState == PacketState.PLAY }.forEach {
        it.sendPacket(PacketOutEntityRotation(
            session.id,
            packet.yaw.toAngle(),
            packet.pitch.toAngle(),
            packet.onGround
        ))
    }
}
```got a feeling that's gonna be a bit slow
#

anyone here good with optimisation?

lunar cypress
#

Well, first of all, you don't have to create the same packet over and over again

jovial warren
#

that is a good point

lunar cypress
#

Also whatever sessions is (i'm assuming a collection), you don't need to make a new collection with filter there

jovial warren
#

what can I do instead?

lunar cypress
#

Sequence

jovial warren
#
SessionStorage.sessions.asSequence().filter { it != session && it.currentState == PacketState.PLAY }.forEach {
    it.sendPacket(rotationPacket)
}
```so this?
lunar cypress
#

Those could already be classified as very small optimisations because the input won't be too big but it may still be beneficial if this is called very often

jovial warren
#

it can be called as often as nanoseconds apart

lunar cypress
#

Yeah something like that

jovial warren
#

sequences vs collections?

#

what's the difference there?

lunar cypress
#

If it's really critical you might have to ditch filter completely but that's not a judgement I would make before profiling

jovial warren
#

how would you even ditch filter?

lunar cypress
#

for each + if statement

lunar cypress
jovial warren
#

whereas called on a sequence, it doesn't, since we already have the instance of the sequence

#

on collection, it's gotta run through all the elements, pick the ones matching the predicate, then create a new collection only containing those elements

lunar cypress
#

It still creates a new sequence object

jovial warren
#

which I imagine is quite expensive

prisma wave
#

Sequences don't create collections

#

Unless you tell them to

jovial warren
prisma wave
#

O nvm I misread your message

jovial warren
#

also, I got some whacky maths going on with positioning

prisma wave
#

Don't prematurely optimise

jovial warren
#

well I don't want rotation to visibly lag if I can help it lol

prisma wave
#

Keeping it as a sequence will probably be good enough

jovial warren
#

yeah I'm keeping it as a sequence for now

jovial warren
#

also, ```kotlin
val oldLocation = session.player.location
val newLocation = packet.location
session.player.location = newLocation

SessionStorage.sessions.filter { it != session && it.currentState == PacketState.PLAY }.forEach {
it.sendPacket(PacketOutEntityPosition(
session.id,
((newLocation.x * 32 - oldLocation.x * 32) * 128).toInt().toShort(),
((newLocation.y * 32 - oldLocation.y * 32) * 128).toInt().toShort(),
((newLocation.z * 32 - oldLocation.z * 32) * 128).toInt().toShort(),
packet.onGround
))
}

#

got a feeling that doing two separate conversions there is a terrible idea

prisma wave
#

You got enough magic numbers there

jovial warren
#

that's an algorithm

#

change in position as (current * 32 - prev * 32) * 128

forest pecan
#

you know, you could use some math and optimize that using bitwise operators

#

lol

lunar cypress
#

Just no

forest pecan
#

why no ๐Ÿ™‚

jovial warren
#

are bitwise operations faster than standard pure maths stuff?

forest pecan
#

Uh.. yeah

prisma wave
#

in some cases

jovial warren
#

surely multiplication is about the same as bitwise stuff

forest pecan
#

its a bit shift

#

you shift by 5

#

for 32 and shift by 7

#

for 128

jovial warren
#

direction?

lunar cypress
#

Extract this into a proper function first

prisma wave
#

I feel like a compiler could probably optimize constant multiplication into shifting where applicable

#

^^^

forest pecan
#

Bro I wish

#

Does java do that?

jovial warren
#

right, I'm gonna write this down and do this tomorrow lol

prisma wave
#

It might be done in the JIT

#

No idea tho

#

Just an educated guess

forest pecan
#

I mean ig it wouldn't hurt

#

to add it

jovial warren
#

and when I say write this down, I mean on physical paper with a physical pen xD

prisma wave
#

consider using a faster language like Rust

forest pecan
#

(current * 32 - prev * 32) * 128 = 32 (current - prev) * 128

#

you could simplify that to a bitwise

lunar cypress
#

Only do that if it matches what the calculation is supposed to express, not because it happens to be a power of 2

prisma wave
forest pecan
#

bitwise shift by 12

#

(current - prev) >> 12

#

i think?

lunar cypress
#

No

jovial warren
#

I think the more expensive thing here is the type conversions, out of all that maths

forest pecan
#

or other direction

lunar cypress
#

Yes

forest pecan
#

yeah so

#

(current - prev) << 12

#

also that returns an integer

prisma wave
#

"other direction"

lunar cypress
#

Wrong again

jovial warren
#

that's a right shift lol

forest pecan
#

oh

jovial warren
#

you want a left shift

forest pecan
#

lmao

jovial warren
#

third time's the charm

forest pecan
#

i typed it wrong

#

lol

#

there

#

(current - prev) << 12

#

((current - prev) << 12).toShort()

#

cause that returns an integer already

prisma wave
#

Rust could do this in a single CPU cycle ๐Ÿ™‚

jovial warren
#

or in my case, ((newLocation.x - oldLocation.x) shl 12).toShort()

forest pecan
#

Yea

jovial warren
#

because Kotlin doesn't have Java operators

forest pecan
#

that should be faster

jovial warren
#

maybe

#

will write that down

forest pecan
#

cause you dont need to cast to integer

jovial warren
#

yeah

#

wait hold on though

#

what if current and previous are doubles?

#

I still gotta cast, no?

lunar cypress
#

Casts are literally free

forest pecan
#

Hm actually yeah you cant use bitwise really for decimals

jovial warren
#

since you can't cast a double to a short, you gotta cast it to an int first

jovial warren
#

I guess they're only bit shifts

onyx loom
#

but this sounds like a massive micro optimisation lmao

jovial warren
#

anyway, gn all

forest pecan
#

gn

jovial warren
onyx loom
#

๐Ÿค”

forest pecan
#

its rotation

onyx loom
#

alr man

forest pecan
#

player rotation

onyx loom
#

goodnight ๐Ÿ™‚

jovial warren
#

every millisecond counts when you're receiving a packet every like 3 ms lol

#

and positioning

#

this is positioning

#

gn

prisma wave
#

prematurely optimising is a sin

prisma wave
forest pecan
#

intellij randomly freaks out for me

#

and i have to invalidate and restart

#

can intellij takes medications?

#

๐ŸŒš

onyx loom
#

intellij 2021.1 - added a new warning to allow users to optimise their multiplications into bit shifts

lunar cypress
prisma wave
#

Prematurely optimising with no evidence

#

Double sin

lunar cypress
#

Well is it premature if you have evidence?

prisma wave
#

Good question

frail glade
#

I moved IJ to a different drive and lost all the configurations for it ๐Ÿ™‚

onyx loom
#

โ˜น๏ธ

#

can u not import them?

prisma wave
#

๐Ÿฅฒ

forest pecan
#

:frowning3

#

fuck

#

๐Ÿฅฒ

prisma wave
#

That's hideous

onyx loom
jovial warren
prisma wave
#

that doesn't mean it's gonna cause lag

#

Things that are called a lot get inlined anyway

#

Which improves performance a lot

jovial warren
#

Inlined? Does that happen automatically?

prisma wave
#

Yes

#

When it happens will depend on the VM

#

But that's why the Hotspot VM is called Hotspot

#

It analyses hot spots to optimise them

onyx loom
#

im gonna make my own jvm

#

optimised primarily for elaras usage

regal gale
#

Still on NMS practice

#

What challenge should I doo ๐Ÿ‘€

jovial warren
prisma wave
onyx loom
#

!!!

jovial warren
#

Lol

#

Gl

prisma wave
#

ur so smart

#

I will make a JVM in Haskell

jovial warren
#

Kaliber like you have enough brain cells to build your own JVM

onyx loom
#

wow bardy do u not believe in me?

#

๐Ÿ˜”

prisma wave
#

I do!!!

onyx loom
#

this is OUTRAGEOUS

jovial warren
surreal quarry
#

I believe in you!

#

You can do anything you put your mind to!

prisma wave
#

Write it in a fast language like python

jovial warren
#

Lol

prisma wave
#

Or js

onyx loom
#

yeah ive heard good things about js

prisma wave
#

very high performance!!

surreal quarry
#

I've never heard anything negative about js in my life

onyx loom
#

idek if python compiles or is interpreted tbh lol

prisma wave
#

technically both

surreal quarry
#

what?

prisma wave
#

The same way java is technically both

surreal quarry
#

what?

#

lol

onyx loom
#

oh right ok

prisma wave
#

Afaik python has bytecode

#

Which gets interpreted

onyx loom
#

ye

surreal quarry
#

wait how is java both?

prisma wave
#

I might be making this up

#

But I think bytecode is often interpreted by the JVM

#

Rather than immediately compiled

surreal quarry
#

hm

#

interesting if true

prisma wave
#

There's like a 50% chance I'm totally wrong here but yeah

#

Maybe a 100% chance

#

Some implementations of JVM may choose to interpret the bytecode instead of JIT compiling it to machine code, and running it directly. While this is still considered an "interpreter," It's quite different from interpreters that read and execute the high level source code (i.e. in this case, Java source code is not interpreted directly, the bytecode, output of Java compiler, is.)

#

Found this

#

I guess it depends

onyx loom
#

interesting

#

i thought it was all jit

#

anyway as for python, its compiled into bytecode then interpreted into machine code at runtime
so yea ur right

prisma wave
#

PDM in rust coming soon????????

onyx loom
#

๐Ÿ˜ฎ

#

say goodbye to these "old" and "outdated" programming "languages"

half harness
#

๐Ÿ‘€

#

funny number

night canyon
#

?dm-filler

compact perchBOT
#
FAQ Answer:
  filler-item:
    priority: 100
    display_name: ' '
    material: gray_stained_glass_pane
    slots:
    - 0-53```
half harness
regal gale
#

Still need suggestion and ideas for my NMS practice

#

Anyone?

quiet depot
#

@heady birch what ide do u use for rust

half harness
#

time to build my jar :))

#

taking a while

ocean quartz
half harness
#

Jetbrains fingerguns

quiet depot
#

jetbrains has a rust plugin

#

i just want to know if niall uses it on intellij or clion

forest pecan
#

This is a crazy idea

#

but does mixins work on spigot?

#

could I use mixins and modify other plugin's execution?

charred torrent
#

@wind patio or just press tab?

obtuse gale
#

since "multiple vararg paremeters are not permitted" do i just use an array instead?

hot hull
#

Just use a list?

trail forum
#

disconnected with: Kicked whilst connecting to hub: VPNs or proxies are not allowed in this server

Can any pro know how to fix this?

frail glade
#

Turn off vpn

trail forum
#

The player turned off the vpn & proxy, also tried to restart his modem/wifi,

after than still the same

#

I whitelisted his IP , checked all the antibot plugin ๐Ÿ˜…

#

Still cant

obtuse gale
#

Is there a way to add an extension method for all enums?

hot hull
#

Just use the Enum interface?

obtuse gale
#

o is that a thing

regal gale
#

Woo hoo. Found a good nms practice

old wyvern
#

uhh

#

oh yea nvm the : character

hot hull
#

Holy shit is world gen inefficient

old wyvern
#

Whats wrong?

hot hull
#

Still going

#

Also I think my map function is wrong

#
    public static float map(final float value, final float inMinimum, final float inMaximum, final float outMinimum, final float outMaximum) {
        return (value - inMinimum) * (outMaximum - outMinimum + 1) / (inMaximum - inMinimum + 1) + outMinimum;
    }
old wyvern
#

Writing a 3d visualizer for your generator ๐Ÿ˜ฎ

obtuse gale
#

Can I "disable" a package in ij?

old wyvern
#

huh?

obtuse gale
#

so its just as if it doesnt exist

old wyvern
#

Dont think so

#

Why would you need that?

old wyvern
#

An external visualizer

#

Without having to run a server

hot hull
#

You mean you're writing it or what?

#

Your sentence confuses me

old wyvern
#

No* I was suggesting you to write one

#

Could be fun, plus hopefully makes it easier for you to test stuff

hot hull
#

Well yea I've been trying all these ui frameworks are disgusting tho

#

Also yea my map function doesn't work at all kek

old wyvern
#

Ideally you would be using a game engine or something

hot hull
#

Unity perhaps?

old wyvern
#

That would require C#

hot hull
#

Would be yikes tho cause that's C# yea

old wyvern
#

There are a few on Java itself, plus I dont think youll need a visual editor anyway

obtuse gale
#

return this could never be null right?

hot hull
#

I mean the generator stuff would be pretty similar so that's not an issue

old wyvern
obtuse gale
old wyvern
#

lmao

hot hull
#

kek

obtuse gale
#

How come in the IJ plugin settings tutorial page theyve marked this as nullable thne lol

old wyvern
#

No idea

obtuse gale
#

Theres no way to do like companion val or something is there? Ive just gotta do

companion object {
val x ......
}```
hot hull
old wyvern
#

https://libgdx.com/
This seems to be nice

#

or you could use lwjgl

hot hull
#

I know what we're gonna do today

heady birch
obtuse gale
#

I need someone who is smart lol

hot hull
#

That wouldn't be me

sonic basin
#

Hey I was wondering if I could get some help with coding, im relatively new but ill try my best to understand the solutions

hot hull
#

Cool default app

sonic basin
#

so I'm using hashmaps rn and ive got a inventoryclickevent and an inventory that is created after that click event

obtuse gale
#

I want my intellij plugins settings page to have like a list of stuff on the left hand side

#

Simliar to that

#

You say your smart

#

how do i

heady birch
#

Oh, i'm not that smart ๐Ÿ˜ฆ

#

Is it Swing?

obtuse gale
#

its the J stuff idk if thats spring

heady birch
#

JList?

obtuse gale
#

like JForm Jpanel JLabel

#

JList

#

yeah but how d o i like make it look likje that

hot hull
#

swing/awt

heady birch
#

Use a border layout and add another panel into the left (or is it called west?) then give that panel a borderlayout and add a JList to the centre

sonic basin
#

So when a player clicks an item it saves the name into the hashmap and when the inventory is created the name of the item becomes the title of the inventory the issue im having is that one key isn't doing what it should be since I'm using the event to get a player then im using the create inventory to get the player so ik the issue lies there im just not sure how to work around it

hot hull
#

Honestly not sure what you mean by that Lazza

sonic basin
#

alright so

#

I have a menu which when a player clicks on the item in that menu it creates another inventory, this new inventory I need to have the same title as the displayname of the item that was clicked

hot hull
#

You using any gui libs?

sonic basin
#

no

hot hull
#

You should look into mf-gui, it'll make your life a lot easier

sonic basin
#

Yeah thanks

#

I know the way ive been making inventories so far has been long way around

#

but ill have a look into that now improve my code and come back if I still havent found a solution

jovial warren
#

@obtuse gale Swing

#

Why

obtuse gale
#

ij plugin'

jovial warren
#

JavaFX superior

obtuse gale
#

ij plogin

hot hull
#

They all shit

jovial warren
#

TornadoFX is actually good

hot hull
#

not being updated anymore tho

#

For the time being

jovial warren
#

What? TornadoFX?

prisma wave
#

Stupid "kotlin ecosystem" full of legacy code

wind patio
jovial warren
prisma wave
#

Am I wrong

jovial warren
#

Yes

prisma wave
#

Elaborate

jovial warren
#

I can't remember the last time I saw legacy Kotlin code in the Kotlin ecosystem

prisma wave
#

TornadoFX

jovial warren
#

Is that really legacy?

prisma wave
#

Last commit 9 months ago

jovial warren
#

That's not legacy

prisma wave
#

Not yet compatible with java 9

jovial warren
#

????

hot hull
#

It's legacy Bardy

#

<o/

old wyvern
#

Kotlin to move to EVM

prisma wave
#

not to mention the ridiculous model of "this requires an experimental annotation" ๐Ÿ™„

jovial warren
#

I've used it on Java 11 with no issues

prisma wave
#

Compiling against java 9 they mean

jovial warren
#

Also, who tf uses Java 9?

old wyvern
#

Java 9 users do

hot hull
#

noone

old wyvern
#

๐Ÿ™‚

jovial warren
#

Exactly Frosty

prisma wave
#

Anyone who isn't in the modern stone age

#

Java 8's time has come and gone

old wyvern
#

bm he means using a higher version than 9

prisma wave
#

Either use a modern version or switch language

#

ik

#

Java 11

#

Java 15

hot hull
#

java 21

old wyvern
#

There are branches for 9 and above

prisma wave
#

And they haven't been updated in 2-3 years

#

Even more legacy

old wyvern
#

10 months*

#

Check the jdk10 one

prisma wave
#

The java 9 one I mean

#

10 months is a long time

#

Let's compare it to something modern like GHC

old wyvern
#

๐Ÿคท

prisma wave
#

That receives over 200 commits every month

old wyvern
#

tornadofx isnt part of kotlin tho

prisma wave
#

Much more active!n

old wyvern
#

Its a separate framework built on top of jfx

jovial warren
#

You think JavaFX has added anything in that time?

prisma wave
#

probably not

old wyvern
#

Yes

prisma wave
#

Wow!

old wyvern
#

xD

prisma wave
#

Therefore java > kotlin

old wyvern
#

I think the implication is Haskell > Everything else

#

๐Ÿ˜Œ

prisma wave
#

But of course

#

Java switch expressions? Copied Haskell

old wyvern
#

yes!

prisma wave
#

Pattern matching? Haskell had it first

#

Records?

#

Being modern?

#

Haskell did that in 1995 ๐Ÿ˜Š

old wyvern
#

Such a ripoff, burn down oracle!

prisma wave
#

Why are we still supporting this corrupt and outdated company??

#

fork OpenJDK and replace it with GHC

old wyvern
#

Especially when they expressed intentions to buying tiktok!!

prisma wave
#

horrible!!!!

regal gale
#

Yall need drug thonking

prisma wave
#

No

#

We have monads

#

๐Ÿ˜Š

jovial warren
#

No

prisma wave
#

Please provide substantial evidence

jovial warren
#

Kotlin's entire purpose was to fix the problems with Java

#

And it's done that

#

You write less code for the same result

prisma wave
#

Ever heard of java 15?

jovial warren
#

What did that add?

prisma wave
#

Everything

jovial warren
#

I think 16 added records, which are good, but nobody's on 16 yet lol

prisma wave
#

Records were in 14 iirc

jovial warren
#

Nobody's on 15 yet either

prisma wave
#

Speak for yourself

jovial warren
#

When I say nobody, I mean maybe a very small minority of Java's users

#

Most are either on 8 or on 11

prisma wave
#

Java 12+ more users than kotlin ๐Ÿฅฒ

jovial warren
#

Oof

#

Programming languages are just personal preference mostly anyway

prisma wave
#

Except rust and Haskell which are objectively the best languages

jovial warren
#

Wrong

prisma wave
#

true

jovial warren
#

That's what you think

unkempt tangle
#

Senpai

prisma wave
#

They provide things no other language does

unkempt tangle
#

What did i just see

prisma wave
#

Very weird

jovial warren
#

I personally prefer Kotlin over those, as I'm not the biggest fan of functional (trash imo) programming and I know Kotlin a lot better

prisma wave
#

It's funny

#

I have never heard someone who actually knows a functional language say they're trash

jovial warren
#

I mean, functional languages aren't terrible actually, that's not true, but I don't like purely functional languages

prisma wave
#

and yet C style fanboys see 1 line of Haskell and decide that an entire paradigm sucks without knowing the slightest bit about it

jovial warren
#

It's not a bad language, I just don't prefer it over Kotlin because I haven't used it

prisma wave
#

consider learning one

#

I would recommend F# because it's not pure but still has a lot of the concepts, and it's super clean

jovial warren
#

Alright

prisma wave
#

a >> b ๐Ÿคค

jovial warren
#

Bit shift?

prisma wave
#

nope

jovial warren
#

What then

prisma wave
#

function composition operator

jovial warren
#

Tf?

#

Wat dis

prisma wave
#

fancy f# features

#
let toUpperCase str = ...
let reverse str = ...

let result = toUpperCase (reverse "hello")

let reverseUpperCase = toUpperCase >> reverse
let result = reverseUpperCase "hello"
``` the 2 `result`s are equivalent
#

it's a lot more useful than that tho

jovial warren
#

What does reverse upper case do?

lunar cypress
#

In mathematics, function composition is an operation that takes two functions f and g and produces a function h such that h(x) = g(f(x)). In this operation, the function g is applied to the result of applying the function f to x. That is, the functions fโ€‰: X โ†’ Y and gโ€‰: Y โ†’ Z are composed to yield a function that maps x in X to g(f(x)) in Z.
Int...

jovial warren
#

I knew that

#

Totally remembered it

prisma wave
#

reverseUpperCase is a function taking a String and returning a String equivalent to toUpperCase (reverse str)

jovial warren
#

What does reverse do?

prisma wave
#

reverses a string

jovial warren
#

"olleh"?

prisma wave
#

i havent included the actual implementation cuz it's not important

#

yeah

jovial warren
#

Yeah

prisma wave
#

the result would be OLLEH

jovial warren
#

That's noice

prisma wave
#

mhm

#

it gets better than that

#
let formatUrlToTitle =
    getPathAfterUrl
    >> words
    >> List.map capitalise
    >> List.filter Option.isSome
    >> List.map Option.get
    >> Seq.ofList
    >> String.concat " "
``` this is used in the wiki
jovial warren
#

That's nice

prisma wave
#

mhm

#

very clean

#

there's also |>

#

which lets you write functions in reverse

#

eg instead of toUpperCase "hello" you can have "hello" |> toUpperCase

#

like a pipe in bash

lunar cypress
#

wait is function composition in f# in the objectively wrong order

prisma wave
#

uh

#

i dont think so

old wyvern
#

Looks right

prisma wave
#

f >> g is g (f x) afaik

#

i might have done it wrong in the earlier example

old wyvern
#

wait

lunar cypress
#

yeah that is the wrong order ๐Ÿ˜ก

old wyvern
#

fog (x) is supposed to be f(g(x))

prisma wave
#

wot

#

produces a function h such that h(x) = g(f(x))

#

?

old wyvern
#

Did I write that wrong there?

#

Lemme check

lunar cypress
#

The resulting composite function is denoted gโ€‰โˆ˜โ€‰f : X โ†’ Z, defined by (gโ€‰โˆ˜โ€‰fโ€‰)(x) = g(f(x)) for all x in X.

old wyvern
#

Seems to be right bm

#

Where was that quote from?

lunar cypress
#

wikipedia

old wyvern
#

ah

#

wait no

#

I meant bm's quote

lunar cypress
#

yes

prisma wave
#

let inline (>>) f g x = g(f x)

old wyvern
#

ah

lunar cypress
#

it didn't specify the order in that sentence though

prisma wave
#

true

lunar cypress
#

sorry but f# is dead to me now

prisma wave
#

is it actually the wrong order

#

what

lunar cypress
#

yes

old wyvern
#

Yea seems f# has both

prisma wave
#

there might be a different syntax for normal composition

#

idk

lunar cypress
#

redemption arc?