Code/net/minecraft/network/codec/StreamCodec.java

451 lines
18 KiB
Java
Raw Permalink Normal View History

2025-07-01 06:20:03 +00:00
package net.minecraft.network.codec;
import com.google.common.base.Suppliers;
import com.mojang.datafixers.util.Function3;
import com.mojang.datafixers.util.Function4;
import com.mojang.datafixers.util.Function5;
import com.mojang.datafixers.util.Function6;
import com.mojang.datafixers.util.Function7;
import com.mojang.datafixers.util.Function8;
import com.mojang.datafixers.util.Function9;
import io.netty.buffer.ByteBuf;
import java.util.function.BiFunction;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.function.UnaryOperator;
public interface StreamCodec<B, V> extends StreamDecoder<B, V>, StreamEncoder<B, V> {
static <B, V> StreamCodec<B, V> of(final StreamEncoder<B, V> p_328457_, final StreamDecoder<B, V> p_332601_) {
return new StreamCodec<B, V>() {
@Override
public V decode(B p_335513_) {
return p_332601_.decode(p_335513_);
}
@Override
public void encode(B p_333998_, V p_335122_) {
p_328457_.encode(p_333998_, p_335122_);
}
};
}
static <B, V> StreamCodec<B, V> ofMember(final StreamMemberEncoder<B, V> p_330640_, final StreamDecoder<B, V> p_327818_) {
return new StreamCodec<B, V>() {
@Override
public V decode(B p_331033_) {
return p_327818_.decode(p_331033_);
}
@Override
public void encode(B p_329484_, V p_332289_) {
p_330640_.encode(p_332289_, p_329484_);
}
};
}
static <B, V> StreamCodec<B, V> unit(final V p_336240_) {
return new StreamCodec<B, V>() {
@Override
public V decode(B p_328164_) {
return p_336240_;
}
@Override
public void encode(B p_336022_, V p_333291_) {
if (!p_333291_.equals(p_336240_)) {
throw new IllegalStateException("Can't encode '" + p_333291_ + "', expected '" + p_336240_ + "'");
}
}
};
}
default <O> StreamCodec<B, O> apply(StreamCodec.CodecOperation<B, V, O> p_335614_) {
return p_335614_.apply(this);
}
default <O> StreamCodec<B, O> map(final Function<? super V, ? extends O> p_327720_, final Function<? super O, ? extends V> p_330478_) {
return new StreamCodec<B, O>() {
@Override
public O decode(B p_328614_) {
return (O)p_327720_.apply(StreamCodec.this.decode(p_328614_));
}
@Override
public void encode(B p_336327_, O p_331146_) {
StreamCodec.this.encode(p_336327_, (V)p_330478_.apply(p_331146_));
}
};
}
default <O extends ByteBuf> StreamCodec<O, V> mapStream(final Function<O, ? extends B> p_332075_) {
return new StreamCodec<O, V>() {
public V decode(O p_331759_) {
B b = (B)p_332075_.apply(p_331759_);
return StreamCodec.this.decode(b);
}
public void encode(O p_334335_, V p_336271_) {
B b = (B)p_332075_.apply(p_334335_);
StreamCodec.this.encode(b, p_336271_);
}
};
}
default <U> StreamCodec<B, U> dispatch(
final Function<? super U, ? extends V> p_333836_, final Function<? super V, ? extends StreamCodec<? super B, ? extends U>> p_335469_
) {
return new StreamCodec<B, U>() {
@Override
public U decode(B p_333769_) {
V v = StreamCodec.this.decode(p_333769_);
StreamCodec<? super B, ? extends U> streamcodec = (StreamCodec<? super B, ? extends U>)p_335469_.apply(v);
return (U)streamcodec.decode(p_333769_);
}
@Override
public void encode(B p_331493_, U p_333683_) {
V v = (V)p_333836_.apply(p_333683_);
StreamCodec<B, U> streamcodec = (StreamCodec<B, U>)p_335469_.apply(v);
StreamCodec.this.encode(p_331493_, v);
streamcodec.encode(p_331493_, p_333683_);
}
};
}
static <B, C, T1> StreamCodec<B, C> composite(final StreamCodec<? super B, T1> p_332516_, final Function<C, T1> p_335276_, final Function<T1, C> p_330982_) {
return new StreamCodec<B, C>() {
@Override
public C decode(B p_331843_) {
T1 t1 = p_332516_.decode(p_331843_);
return p_330982_.apply(t1);
}
@Override
public void encode(B p_330937_, C p_333579_) {
p_332516_.encode(p_330937_, p_335276_.apply(p_333579_));
}
};
}
static <B, C, T1, T2> StreamCodec<B, C> composite(
final StreamCodec<? super B, T1> p_329724_,
final Function<C, T1> p_329438_,
final StreamCodec<? super B, T2> p_328233_,
final Function<C, T2> p_328617_,
final BiFunction<T1, T2, C> p_334409_
) {
return new StreamCodec<B, C>() {
@Override
public C decode(B p_331897_) {
T1 t1 = p_329724_.decode(p_331897_);
T2 t2 = p_328233_.decode(p_331897_);
return p_334409_.apply(t1, t2);
}
@Override
public void encode(B p_334266_, C p_331042_) {
p_329724_.encode(p_334266_, p_329438_.apply(p_331042_));
p_328233_.encode(p_334266_, p_328617_.apply(p_331042_));
}
};
}
static <B, C, T1, T2, T3> StreamCodec<B, C> composite(
final StreamCodec<? super B, T1> p_329473_,
final Function<C, T1> p_334404_,
final StreamCodec<? super B, T2> p_327967_,
final Function<C, T2> p_330724_,
final StreamCodec<? super B, T3> p_328162_,
final Function<C, T3> p_333383_,
final Function3<T1, T2, T3, C> p_334421_
) {
return new StreamCodec<B, C>() {
@Override
public C decode(B p_331065_) {
T1 t1 = p_329473_.decode(p_331065_);
T2 t2 = p_327967_.decode(p_331065_);
T3 t3 = p_328162_.decode(p_331065_);
return p_334421_.apply(t1, t2, t3);
}
@Override
public void encode(B p_333137_, C p_328354_) {
p_329473_.encode(p_333137_, p_334404_.apply(p_328354_));
p_327967_.encode(p_333137_, p_330724_.apply(p_328354_));
p_328162_.encode(p_333137_, p_333383_.apply(p_328354_));
}
};
}
static <B, C, T1, T2, T3, T4> StreamCodec<B, C> composite(
final StreamCodec<? super B, T1> p_331397_,
final Function<C, T1> p_331210_,
final StreamCodec<? super B, T2> p_332449_,
final Function<C, T2> p_329970_,
final StreamCodec<? super B, T3> p_328015_,
final Function<C, T3> p_333423_,
final StreamCodec<? super B, T4> p_332358_,
final Function<C, T4> p_331597_,
final Function4<T1, T2, T3, T4, C> p_332476_
) {
return new StreamCodec<B, C>() {
@Override
public C decode(B p_334517_) {
T1 t1 = p_331397_.decode(p_334517_);
T2 t2 = p_332449_.decode(p_334517_);
T3 t3 = p_328015_.decode(p_334517_);
T4 t4 = p_332358_.decode(p_334517_);
return p_332476_.apply(t1, t2, t3, t4);
}
@Override
public void encode(B p_336185_, C p_330170_) {
p_331397_.encode(p_336185_, p_331210_.apply(p_330170_));
p_332449_.encode(p_336185_, p_329970_.apply(p_330170_));
p_328015_.encode(p_336185_, p_333423_.apply(p_330170_));
p_332358_.encode(p_336185_, p_331597_.apply(p_330170_));
}
};
}
static <B, C, T1, T2, T3, T4, T5> StreamCodec<B, C> composite(
final StreamCodec<? super B, T1> p_332680_,
final Function<C, T1> p_336312_,
final StreamCodec<? super B, T2> p_328131_,
final Function<C, T2> p_332283_,
final StreamCodec<? super B, T3> p_330440_,
final Function<C, T3> p_333147_,
final StreamCodec<? super B, T4> p_329904_,
final Function<C, T4> p_330832_,
final StreamCodec<? super B, T5> p_335857_,
final Function<C, T5> p_333237_,
final Function5<T1, T2, T3, T4, T5, C> p_328623_
) {
return new StreamCodec<B, C>() {
@Override
public C decode(B p_328956_) {
T1 t1 = p_332680_.decode(p_328956_);
T2 t2 = p_328131_.decode(p_328956_);
T3 t3 = p_330440_.decode(p_328956_);
T4 t4 = p_329904_.decode(p_328956_);
T5 t5 = p_335857_.decode(p_328956_);
return p_328623_.apply(t1, t2, t3, t4, t5);
}
@Override
public void encode(B p_328899_, C p_328944_) {
p_332680_.encode(p_328899_, p_336312_.apply(p_328944_));
p_328131_.encode(p_328899_, p_332283_.apply(p_328944_));
p_330440_.encode(p_328899_, p_333147_.apply(p_328944_));
p_329904_.encode(p_328899_, p_330832_.apply(p_328944_));
p_335857_.encode(p_328899_, p_333237_.apply(p_328944_));
}
};
}
static <B, C, T1, T2, T3, T4, T5, T6> StreamCodec<B, C> composite(
final StreamCodec<? super B, T1> p_333401_,
final Function<C, T1> p_329450_,
final StreamCodec<? super B, T2> p_330884_,
final Function<C, T2> p_328085_,
final StreamCodec<? super B, T3> p_332808_,
final Function<C, T3> p_327867_,
final StreamCodec<? super B, T4> p_335472_,
final Function<C, T4> p_328511_,
final StreamCodec<? super B, T5> p_333318_,
final Function<C, T5> p_330123_,
final StreamCodec<? super B, T6> p_332458_,
final Function<C, T6> p_328086_,
final Function6<T1, T2, T3, T4, T5, T6, C> p_329947_
) {
return new StreamCodec<B, C>() {
@Override
public C decode(B p_330564_) {
T1 t1 = p_333401_.decode(p_330564_);
T2 t2 = p_330884_.decode(p_330564_);
T3 t3 = p_332808_.decode(p_330564_);
T4 t4 = p_335472_.decode(p_330564_);
T5 t5 = p_333318_.decode(p_330564_);
T6 t6 = p_332458_.decode(p_330564_);
return p_329947_.apply(t1, t2, t3, t4, t5, t6);
}
@Override
public void encode(B p_328016_, C p_331911_) {
p_333401_.encode(p_328016_, p_329450_.apply(p_331911_));
p_330884_.encode(p_328016_, p_328085_.apply(p_331911_));
p_332808_.encode(p_328016_, p_327867_.apply(p_331911_));
p_335472_.encode(p_328016_, p_328511_.apply(p_331911_));
p_333318_.encode(p_328016_, p_330123_.apply(p_331911_));
p_332458_.encode(p_328016_, p_328086_.apply(p_331911_));
}
};
}
static <B, C, T1, T2, T3, T4, T5, T6, T7> StreamCodec<B, C> composite(
final StreamCodec<? super B, T1> p_362813_,
final Function<C, T1> p_366161_,
final StreamCodec<? super B, T2> p_363894_,
final Function<C, T2> p_362001_,
final StreamCodec<? super B, T3> p_363671_,
final Function<C, T3> p_367051_,
final StreamCodec<? super B, T4> p_366641_,
final Function<C, T4> p_367961_,
final StreamCodec<? super B, T5> p_369011_,
final Function<C, T5> p_368271_,
final StreamCodec<? super B, T6> p_364705_,
final Function<C, T6> p_363391_,
final StreamCodec<? super B, T7> p_369569_,
final Function<C, T7> p_365688_,
final Function7<T1, T2, T3, T4, T5, T6, T7, C> p_370204_
) {
return new StreamCodec<B, C>() {
@Override
public C decode(B p_330854_) {
T1 t1 = p_362813_.decode(p_330854_);
T2 t2 = p_363894_.decode(p_330854_);
T3 t3 = p_363671_.decode(p_330854_);
T4 t4 = p_366641_.decode(p_330854_);
T5 t5 = p_369011_.decode(p_330854_);
T6 t6 = p_364705_.decode(p_330854_);
T7 t7 = p_369569_.decode(p_330854_);
return p_370204_.apply(t1, t2, t3, t4, t5, t6, t7);
}
@Override
public void encode(B p_332524_, C p_336367_) {
p_362813_.encode(p_332524_, p_366161_.apply(p_336367_));
p_363894_.encode(p_332524_, p_362001_.apply(p_336367_));
p_363671_.encode(p_332524_, p_367051_.apply(p_336367_));
p_366641_.encode(p_332524_, p_367961_.apply(p_336367_));
p_369011_.encode(p_332524_, p_368271_.apply(p_336367_));
p_364705_.encode(p_332524_, p_363391_.apply(p_336367_));
p_369569_.encode(p_332524_, p_365688_.apply(p_336367_));
}
};
}
static <B, C, T1, T2, T3, T4, T5, T6, T7, T8> StreamCodec<B, C> composite(
final StreamCodec<? super B, T1> p_367373_,
final Function<C, T1> p_369557_,
final StreamCodec<? super B, T2> p_368011_,
final Function<C, T2> p_363664_,
final StreamCodec<? super B, T3> p_367205_,
final Function<C, T3> p_364055_,
final StreamCodec<? super B, T4> p_361203_,
final Function<C, T4> p_365006_,
final StreamCodec<? super B, T5> p_362409_,
final Function<C, T5> p_367771_,
final StreamCodec<? super B, T6> p_362282_,
final Function<C, T6> p_365852_,
final StreamCodec<? super B, T7> p_361750_,
final Function<C, T7> p_368272_,
final StreamCodec<? super B, T8> p_367402_,
final Function<C, T8> p_369297_,
final Function8<T1, T2, T3, T4, T5, T6, T7, T8, C> p_365425_
) {
return new StreamCodec<B, C>() {
@Override
public C decode(B p_362416_) {
T1 t1 = p_367373_.decode(p_362416_);
T2 t2 = p_368011_.decode(p_362416_);
T3 t3 = p_367205_.decode(p_362416_);
T4 t4 = p_361203_.decode(p_362416_);
T5 t5 = p_362409_.decode(p_362416_);
T6 t6 = p_362282_.decode(p_362416_);
T7 t7 = p_361750_.decode(p_362416_);
T8 t8 = p_367402_.decode(p_362416_);
return p_365425_.apply(t1, t2, t3, t4, t5, t6, t7, t8);
}
@Override
public void encode(B p_366041_, C p_365657_) {
p_367373_.encode(p_366041_, p_369557_.apply(p_365657_));
p_368011_.encode(p_366041_, p_363664_.apply(p_365657_));
p_367205_.encode(p_366041_, p_364055_.apply(p_365657_));
p_361203_.encode(p_366041_, p_365006_.apply(p_365657_));
p_362409_.encode(p_366041_, p_367771_.apply(p_365657_));
p_362282_.encode(p_366041_, p_365852_.apply(p_365657_));
p_361750_.encode(p_366041_, p_368272_.apply(p_365657_));
p_367402_.encode(p_366041_, p_369297_.apply(p_365657_));
}
};
}
static <B, C, T1, T2, T3, T4, T5, T6, T7, T8, T9> StreamCodec<B, C> composite(
final StreamCodec<? super B, T1> p_396599_,
final Function<C, T1> p_394059_,
final StreamCodec<? super B, T2> p_391853_,
final Function<C, T2> p_397231_,
final StreamCodec<? super B, T3> p_397084_,
final Function<C, T3> p_396685_,
final StreamCodec<? super B, T4> p_396284_,
final Function<C, T4> p_396853_,
final StreamCodec<? super B, T5> p_396318_,
final Function<C, T5> p_397637_,
final StreamCodec<? super B, T6> p_392835_,
final Function<C, T6> p_395094_,
final StreamCodec<? super B, T7> p_395281_,
final Function<C, T7> p_392689_,
final StreamCodec<? super B, T8> p_395884_,
final Function<C, T8> p_391389_,
final StreamCodec<? super B, T9> p_394579_,
final Function<C, T9> p_391273_,
final Function9<T1, T2, T3, T4, T5, T6, T7, T8, T9, C> p_396269_
) {
return new StreamCodec<B, C>() {
@Override
public C decode(B p_366688_) {
T1 t1 = p_396599_.decode(p_366688_);
T2 t2 = p_391853_.decode(p_366688_);
T3 t3 = p_397084_.decode(p_366688_);
T4 t4 = p_396284_.decode(p_366688_);
T5 t5 = p_396318_.decode(p_366688_);
T6 t6 = p_392835_.decode(p_366688_);
T7 t7 = p_395281_.decode(p_366688_);
T8 t8 = p_395884_.decode(p_366688_);
T9 t9 = p_394579_.decode(p_366688_);
return p_396269_.apply(t1, t2, t3, t4, t5, t6, t7, t8, t9);
}
@Override
public void encode(B p_364543_, C p_364761_) {
p_396599_.encode(p_364543_, p_394059_.apply(p_364761_));
p_391853_.encode(p_364543_, p_397231_.apply(p_364761_));
p_397084_.encode(p_364543_, p_396685_.apply(p_364761_));
p_396284_.encode(p_364543_, p_396853_.apply(p_364761_));
p_396318_.encode(p_364543_, p_397637_.apply(p_364761_));
p_392835_.encode(p_364543_, p_395094_.apply(p_364761_));
p_395281_.encode(p_364543_, p_392689_.apply(p_364761_));
p_395884_.encode(p_364543_, p_391389_.apply(p_364761_));
p_394579_.encode(p_364543_, p_391273_.apply(p_364761_));
}
};
}
static <B, T> StreamCodec<B, T> recursive(final UnaryOperator<StreamCodec<B, T>> p_336362_) {
return new StreamCodec<B, T>() {
private final Supplier<StreamCodec<B, T>> inner = Suppliers.memoize(() -> p_336362_.apply(this));
@Override
public T decode(B p_397382_) {
return this.inner.get().decode(p_397382_);
}
@Override
public void encode(B p_396343_, T p_395545_) {
this.inner.get().encode(p_396343_, p_395545_);
}
};
}
default <S extends B> StreamCodec<S, V> cast() {
return (StreamCodec)this;
}
@FunctionalInterface
public interface CodecOperation<B, S, T> {
StreamCodec<B, T> apply(StreamCodec<B, S> p_333754_);
}
}