Update fabwork and switch a lot of the packets to records and replace the client handler with the new receiver method of registering callbacks

This commit is contained in:
Sollace 2022-12-30 20:42:18 +01:00
parent 1763f433d4
commit 83932bfea1
21 changed files with 109 additions and 205 deletions

View file

@ -20,7 +20,7 @@ org.gradle.daemon=false
modrinth_project_id=
# Dependencies
fabwork_version=1.0.1
fabwork_version=1.1.0
modmenu_version=5.0.0-alpha.3
minelp_version=4.7.2
kirin_version=1.13.2

View file

@ -1,5 +1,6 @@
package com.minelittlepony.unicopia;
import java.util.Map;
import java.util.Optional;
import org.jetbrains.annotations.NotNull;
@ -8,12 +9,13 @@ import org.jetbrains.annotations.Nullable;
import com.minelittlepony.unicopia.ability.magic.CasterView;
import com.minelittlepony.unicopia.block.data.Ether;
import com.minelittlepony.unicopia.entity.player.dummy.DummyPlayerEntity;
import com.minelittlepony.unicopia.network.handler.ClientNetworkHandler;
import com.mojang.authlib.GameProfile;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.network.PacketByteBuf;
import net.minecraft.server.world.ServerWorld;
import net.minecraft.util.Identifier;
import net.minecraft.world.BlockView;
import net.minecraft.world.World;
@ -41,11 +43,8 @@ public class InteractionManager {
return Optional.empty();
}
/**
* Returns the client network handler, or throws if called on the server.
*/
public ClientNetworkHandler getClientNetworkHandler() {
throw new NullPointerException("Client network handler called by the server");
public Map<Identifier, ?> readChapters(PacketByteBuf buf) {
throw new RuntimeException("Method not supported");
}
/**

View file

@ -1,5 +1,6 @@
package com.minelittlepony.unicopia.client;
import java.util.Map;
import java.util.Optional;
import java.util.function.Predicate;
@ -12,12 +13,11 @@ import com.minelittlepony.unicopia.USounds;
import com.minelittlepony.unicopia.ability.magic.CasterView;
import com.minelittlepony.unicopia.block.data.Ether;
import com.minelittlepony.unicopia.client.gui.DismissSpellScreen;
import com.minelittlepony.unicopia.client.gui.spellbook.ClientChapters;
import com.minelittlepony.unicopia.client.sound.*;
import com.minelittlepony.unicopia.entity.player.PlayerPhysics;
import com.minelittlepony.unicopia.entity.player.Pony;
import com.minelittlepony.unicopia.entity.player.dummy.DummyClientPlayerEntity;
import com.minelittlepony.unicopia.network.handler.ClientNetworkHandler;
import com.minelittlepony.unicopia.network.handler.ClientNetworkHandlerImpl;
import com.mojang.authlib.GameProfile;
import net.minecraft.client.MinecraftClient;
@ -31,16 +31,17 @@ import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.passive.BeeEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.vehicle.AbstractMinecartEntity;
import net.minecraft.network.PacketByteBuf;
import net.minecraft.server.world.ServerWorld;
import net.minecraft.sound.SoundCategory;
import net.minecraft.sound.SoundEvents;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.random.Random;
import net.minecraft.world.BlockView;
import net.minecraft.world.World;
public class ClientInteractionManager extends InteractionManager {
private final ClientNetworkHandler handler = new ClientNetworkHandlerImpl();
private final MinecraftClient client = MinecraftClient.getInstance();
private final Optional<CasterView> clientWorld = Optional.of(() -> MinecraftClient.getInstance().world);
@ -54,9 +55,8 @@ public class ClientInteractionManager extends InteractionManager {
}
@Override
@Nullable
public ClientNetworkHandler getClientNetworkHandler() {
return handler;
public Map<Identifier, ?> readChapters(PacketByteBuf buffer) {
return buffer.readMap(PacketByteBuf::readIdentifier, ClientChapters::loadChapter);
}
@Override

View file

@ -16,6 +16,8 @@ import com.minelittlepony.unicopia.client.render.shader.ViewportShader;
import com.minelittlepony.unicopia.container.*;
import com.minelittlepony.unicopia.entity.player.PlayerCamera;
import com.minelittlepony.unicopia.entity.player.Pony;
import com.minelittlepony.unicopia.network.handler.ClientNetworkHandlerImpl;
import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
import net.fabricmc.fabric.api.client.item.v1.ItemTooltipCallback;
@ -60,6 +62,7 @@ public class UnicopiaClient implements ClientModInitializer {
@Override
public void onInitializeClient() {
InteractionManager.INSTANCE = new ClientInteractionManager();
new ClientNetworkHandlerImpl();
KeyBindingsHandler.bootstrap();
URenderers.bootstrap();

View file

@ -78,7 +78,7 @@ public class TribeSelectionScreen extends GameGui implements HidesHud {
finished = false;
if (result) {
Channel.CLIENT_REQUEST_SPECIES_CHANGE.sendToServer(new MsgRequestSpeciesChange(race, true));
Channel.CLIENT_REQUEST_SPECIES_CHANGE.sendToServer(new MsgRequestSpeciesChange(true, race));
finish();
} else {
client.setScreen(this);

View file

@ -9,7 +9,7 @@ import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.server.network.ServerPlayerEntity;
public interface Channel {
C2SPacketType<MsgPlayerAbility<?>> CLIENT_PLAYER_ABILITY = SimpleNetworking.clientToServer(Unicopia.id("player_ability"), MsgPlayerAbility::new);
C2SPacketType<MsgPlayerAbility<?>> CLIENT_PLAYER_ABILITY = SimpleNetworking.clientToServer(Unicopia.id("player_ability"), MsgPlayerAbility::read);
C2SPacketType<MsgRequestSpeciesChange> CLIENT_REQUEST_SPECIES_CHANGE = SimpleNetworking.clientToServer(Unicopia.id("request_capabilities"), MsgRequestSpeciesChange::new);
C2SPacketType<MsgMarkTraitRead> MARK_TRAIT_READ = SimpleNetworking.clientToServer(Unicopia.id("mark_trait_read"), MsgMarkTraitRead::new);
C2SPacketType<MsgRemoveSpell> REMOVE_SPELL = SimpleNetworking.clientToServer(Unicopia.id("remove_spell"), MsgRemoveSpell::new);
@ -17,7 +17,7 @@ public interface Channel {
S2CPacketType<MsgPlayerCapabilities> SERVER_PLAYER_CAPABILITIES = SimpleNetworking.serverToClient(Unicopia.id("player_capabilities"), MsgPlayerCapabilities::new);
S2CPacketType<MsgSpawnProjectile> SERVER_SPAWN_PROJECTILE = SimpleNetworking.serverToClient(Unicopia.id("projectile_entity"), MsgSpawnProjectile::new);
S2CPacketType<MsgBlockDestruction> SERVER_BLOCK_DESTRUCTION = SimpleNetworking.serverToClient(Unicopia.id("block_destruction"), MsgBlockDestruction::new);
S2CPacketType<MsgCancelPlayerAbility> CANCEL_PLAYER_ABILITY = SimpleNetworking.serverToClient(Unicopia.id("player_ability_cancel"), MsgCancelPlayerAbility::new);
S2CPacketType<MsgCancelPlayerAbility> CANCEL_PLAYER_ABILITY = SimpleNetworking.serverToClient(Unicopia.id("player_ability_cancel"), MsgCancelPlayerAbility::read);
S2CPacketType<MsgUnlockTraits> UNLOCK_TRAITS = SimpleNetworking.serverToClient(Unicopia.id("unlock_traits"), MsgUnlockTraits::new);
S2CPacketType<MsgTribeSelect> SERVER_SELECT_TRIBE = SimpleNetworking.serverToClient(Unicopia.id("select_tribe"), MsgTribeSelect::new);
@ -42,7 +42,7 @@ public interface Channel {
pony.setSpecies(race);
Unicopia.LOGGER.info("Setting {}'s race to {} due to host setting", handler.player.getDisplayName().getString(), Race.REGISTRY.getId(race).toString());
} else {
sender.sendPacket(SERVER_SELECT_TRIBE.id(), new MsgTribeSelect(handler.player).toBuffer());
sender.sendPacket(SERVER_SELECT_TRIBE.id(), new MsgTribeSelect(Race.allPermitted(handler.player)).toBuffer());
}
}
sender.sendPacket(SERVER_RESOURCES_SEND.id(), new MsgServerResources().toBuffer());

View file

@ -1,6 +1,5 @@
package com.minelittlepony.unicopia.network;
import com.minelittlepony.unicopia.InteractionManager;
import com.sollace.fabwork.api.packets.Packet;
import it.unimi.dsi.fastutil.longs.Long2ObjectMap;
@ -11,26 +10,15 @@ import net.minecraft.entity.player.PlayerEntity;
/**
* Sent by the server to update block destruction progress on the client.
*/
public class MsgBlockDestruction implements Packet<PlayerEntity> {
private final Long2ObjectMap<Float> destructions;
public record MsgBlockDestruction (Long2ObjectMap<Float> destructions) implements Packet<PlayerEntity> {
MsgBlockDestruction(PacketByteBuf buffer) {
destructions = new Long2ObjectOpenHashMap<>();
this(new Long2ObjectOpenHashMap<>());
int size = buffer.readInt();
for (int i = 0; i < size; i++) {
destructions.put(buffer.readLong(), (Float)buffer.readFloat());
}
}
public MsgBlockDestruction(Long2ObjectMap<Float> destructions) {
this.destructions = destructions;
}
public Long2ObjectMap<Float> getDestructions() {
return destructions;
}
@Override
public void toBuffer(PacketByteBuf buffer) {
buffer.writeInt(destructions.size());
@ -41,7 +29,5 @@ public class MsgBlockDestruction implements Packet<PlayerEntity> {
}
@Override
public void handle(PlayerEntity sender) {
InteractionManager.instance().getClientNetworkHandler().handleBlockDestruction(this);
}
public void handle(PlayerEntity sender) {}
}

View file

@ -1,6 +1,5 @@
package com.minelittlepony.unicopia.network;
import com.minelittlepony.unicopia.InteractionManager;
import com.sollace.fabwork.api.packets.Packet;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.network.PacketByteBuf;
@ -8,20 +7,16 @@ import net.minecraft.network.PacketByteBuf;
/**
* Sent to the client when an ability fails its server-side activation checks.
*/
public class MsgCancelPlayerAbility implements Packet<PlayerEntity> {
public final class MsgCancelPlayerAbility implements Packet<PlayerEntity> {
static final MsgCancelPlayerAbility INSTANCE = new MsgCancelPlayerAbility();
MsgCancelPlayerAbility(PacketByteBuf buffer) {
}
public MsgCancelPlayerAbility() {
static MsgCancelPlayerAbility read(PacketByteBuf buffer) {
return INSTANCE;
}
@Override
public void toBuffer(PacketByteBuf buffer) {
}
public void toBuffer(PacketByteBuf buffer) { }
@Override
public void handle(PlayerEntity sender) {
InteractionManager.instance().getClientNetworkHandler().handleCancelAbility(this);
}
public void handle(PlayerEntity sender) { }
}

View file

@ -10,21 +10,15 @@ import com.sollace.fabwork.api.packets.Packet;
import net.minecraft.network.PacketByteBuf;
import net.minecraft.server.network.ServerPlayerEntity;
public class MsgMarkTraitRead implements Packet<ServerPlayerEntity> {
public final Set<Trait> traits = new HashSet<>();
public record MsgMarkTraitRead (Set<Trait> traits) implements Packet<ServerPlayerEntity> {
MsgMarkTraitRead(PacketByteBuf buffer) {
this(new HashSet<>());
int length = buffer.readInt();
for (int i = 0; i < length; i++) {
Trait.fromId(buffer.readIdentifier()).ifPresent(traits::add);
}
}
public MsgMarkTraitRead(Set<Trait> traits) {
this.traits.addAll(traits);
}
@Override
public void toBuffer(PacketByteBuf buffer) {
buffer.writeInt(traits.size());

View file

@ -17,7 +17,6 @@ public class MsgOtherPlayerCapabilities extends MsgPlayerCapabilities {
public MsgOtherPlayerCapabilities(Pony player) {
super(player);
}
@Override

View file

@ -15,22 +15,20 @@ import net.minecraft.server.network.ServerPlayerEntity;
/**
* Sent to the server when a player activates an ability.
*/
public class MsgPlayerAbility<T extends Hit> implements Packet<ServerPlayerEntity> {
private final Ability<T> power;
private final Optional<T> data;
private final ActivationType type;
public record MsgPlayerAbility<T extends Hit> (
Ability<T> power,
Optional<T> data,
ActivationType type
) implements Packet<ServerPlayerEntity> {
@SuppressWarnings("unchecked")
MsgPlayerAbility(PacketByteBuf buffer) {
power = (Ability<T>) Abilities.REGISTRY.get(buffer.readIdentifier());
data = buffer.readOptional(power.getSerializer()::fromBuffer);
type = ActivationType.of(buffer.readInt());
}
public MsgPlayerAbility(Ability<T> power, Optional<T> data, ActivationType type) {
this.power = power;
this.data = data;
this.type = type;
static <T extends Hit> MsgPlayerAbility<T> read(PacketByteBuf buffer) {
Ability<T> power = (Ability<T>) Abilities.REGISTRY.get(buffer.readIdentifier());
return new MsgPlayerAbility<>(
power,
buffer.readOptional(power.getSerializer()::fromBuffer),
ActivationType.of(buffer.readInt())
);
}
@Override

View file

@ -13,21 +13,18 @@ import net.minecraft.network.PacketByteBuf;
/**
* Sent to the client when a player's animation changes.
*/
public class MsgPlayerAnimationChange implements Packet<PlayerEntity> {
private final UUID playerId;
private final Animation animation;
private final int duration;
public record MsgPlayerAnimationChange (
UUID playerId,
Animation animation,
int duration
) implements Packet<PlayerEntity> {
MsgPlayerAnimationChange(PacketByteBuf buffer) {
playerId = buffer.readUuid();
animation = Animation.values()[buffer.readInt()];
duration = buffer.readInt();
this(buffer.readUuid(), buffer.readEnumConstant(Animation.class), buffer.readInt());
}
public MsgPlayerAnimationChange(Pony player, Animation animation, int duration) {
this.playerId = player.asEntity().getUuid();
this.animation = animation;
this.duration = duration;
this(player.asEntity().getUuid(), animation, duration);
}
@Override

View file

@ -12,15 +12,13 @@ import net.minecraft.server.network.ServerPlayerEntity;
/**
* Sent to the server when a player activates an ability.
*/
public class MsgRemoveSpell implements Packet<ServerPlayerEntity> {
private final UUID id;
public record MsgRemoveSpell (UUID id) implements Packet<ServerPlayerEntity> {
MsgRemoveSpell(PacketByteBuf buffer) {
id = buffer.readUuid();
this(buffer.readUuid());
}
public MsgRemoveSpell(Spell spell) {
id = spell.getUuid();
this(spell.getUuid());
}
@Override

View file

@ -14,23 +14,13 @@ import net.minecraft.server.world.ServerWorld;
* <p>
* The server responds back with the accepted capabilities and the race the client should use (if the preferred was not permitted)
*/
public class MsgRequestSpeciesChange implements Packet<ServerPlayerEntity> {
private final boolean force;
private final Race newRace;
public record MsgRequestSpeciesChange (
boolean force,
Race newRace
) implements Packet<ServerPlayerEntity> {
MsgRequestSpeciesChange(PacketByteBuf buffer) {
force = buffer.readBoolean();
newRace = buffer.readRegistryValue(Race.REGISTRY);
}
public MsgRequestSpeciesChange(Race newRace) {
this(newRace, false);
}
public MsgRequestSpeciesChange(Race newRace, boolean force) {
this.newRace = newRace;
this.force = force;
this(buffer.readBoolean(), buffer.readRegistryValue(Race.REGISTRY));
}
@Override

View file

@ -12,21 +12,25 @@ import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.network.PacketByteBuf;
import net.minecraft.util.Identifier;
public class MsgServerResources implements Packet<PlayerEntity> {
public final Map<Identifier, SpellTraits> traits;
public final Map<Identifier, ?> chapters;
public final Map<Identifier, TreeTypeLoader.TreeTypeDef> treeTypes;
public record MsgServerResources (
Map<Identifier, SpellTraits> traits,
Map<Identifier, ?> chapters,
Map<Identifier, TreeTypeLoader.TreeTypeDef> treeTypes
) implements Packet<PlayerEntity> {
public MsgServerResources() {
traits = SpellTraits.all();
chapters = SpellbookChapterLoader.INSTANCE.getChapters();
treeTypes = TreeTypeLoader.INSTANCE.getEntries();
this(
SpellTraits.all(),
SpellbookChapterLoader.INSTANCE.getChapters(),
TreeTypeLoader.INSTANCE.getEntries()
);
}
public MsgServerResources(PacketByteBuf buffer) {
traits = buffer.readMap(PacketByteBuf::readIdentifier, SpellTraits::fromPacket);
chapters = InteractionManager.instance().getClientNetworkHandler().readChapters(buffer);
treeTypes = buffer.readMap(PacketByteBuf::readIdentifier, TreeTypeLoader.TreeTypeDef::new);
this(
buffer.readMap(PacketByteBuf::readIdentifier, SpellTraits::fromPacket),
InteractionManager.instance().readChapters(buffer),
buffer.readMap(PacketByteBuf::readIdentifier, TreeTypeLoader.TreeTypeDef::new)
);
}
@Override
@ -37,7 +41,5 @@ public class MsgServerResources implements Packet<PlayerEntity> {
}
@Override
public void handle(PlayerEntity sender) {
InteractionManager.instance().getClientNetworkHandler().handleServerResources(this);
}
public void handle(PlayerEntity sender) { }
}

View file

@ -2,7 +2,6 @@ package com.minelittlepony.unicopia.network;
import java.util.Optional;
import com.minelittlepony.unicopia.InteractionManager;
import com.minelittlepony.unicopia.Owned;
import com.sollace.fabwork.api.packets.Packet;
@ -30,9 +29,6 @@ public class MsgSpawnProjectile extends EntitySpawnS2CPacket implements Packet<P
write(buffer);
}
@Override
public void handle(PlayerEntity sender) {
InteractionManager.instance().getClientNetworkHandler().handleSpawnProjectile(this);
}
public void handle(PlayerEntity sender) {}
}

View file

@ -12,19 +12,13 @@ import net.minecraft.server.network.ServerPlayerEntity;
* Received by the server when a player changes their opened spellbook's state
* Received by the client when another player changes the shared spellbook's state
*/
public class MsgSpellbookStateChanged<T extends PlayerEntity> implements Packet<T> {
private final int syncId;
private final SpellbookState state;
public MsgSpellbookStateChanged(int syncId, SpellbookState state) {
this.syncId = syncId;
this.state = state;
}
public record MsgSpellbookStateChanged<T extends PlayerEntity> (
int syncId,
SpellbookState state
) implements Packet<T> {
public MsgSpellbookStateChanged(PacketByteBuf buffer) {
syncId = buffer.readInt();
state = new SpellbookState().fromPacket(buffer);
this(buffer.readInt(), new SpellbookState().fromPacket(buffer));
}
@Override
@ -35,7 +29,6 @@ public class MsgSpellbookStateChanged<T extends PlayerEntity> implements Packet<
@Override
public void handle(T sender) {
if (sender.currentScreenHandler.syncId != syncId) {
return;
}

View file

@ -3,32 +3,21 @@ package com.minelittlepony.unicopia.network;
import java.util.HashSet;
import java.util.Set;
import com.minelittlepony.unicopia.InteractionManager;
import com.minelittlepony.unicopia.Race;
import com.sollace.fabwork.api.packets.Packet;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.network.PacketByteBuf;
public class MsgTribeSelect implements Packet<PlayerEntity> {
private final Set<Race> availableRaces;
public MsgTribeSelect(PlayerEntity player) {
availableRaces = Race.allPermitted(player);
}
public record MsgTribeSelect (Set<Race> availableRaces) implements Packet<PlayerEntity> {
public MsgTribeSelect(PacketByteBuf buffer) {
this(new HashSet<>());
int len = buffer.readInt();
availableRaces = new HashSet<>();
while (len-- > 0) {
availableRaces.add(buffer.readRegistryValue(Race.REGISTRY));
}
}
public Set<Race> getRaces() {
return availableRaces;
}
@Override
public void toBuffer(PacketByteBuf buffer) {
buffer.writeInt(availableRaces.size());
@ -36,7 +25,5 @@ public class MsgTribeSelect implements Packet<PlayerEntity> {
}
@Override
public void handle(PlayerEntity sender) {
InteractionManager.instance().getClientNetworkHandler().handleTribeScreen(this);
}
public void handle(PlayerEntity sender) {}
}

View file

@ -3,18 +3,15 @@ package com.minelittlepony.unicopia.network;
import java.util.HashSet;
import java.util.Set;
import com.minelittlepony.unicopia.InteractionManager;
import com.minelittlepony.unicopia.ability.magic.spell.trait.Trait;
import com.sollace.fabwork.api.packets.Packet;
import net.minecraft.network.PacketByteBuf;
import net.minecraft.entity.player.PlayerEntity;
public class MsgUnlockTraits implements Packet<PlayerEntity> {
public final Set<Trait> traits = new HashSet<>();
public record MsgUnlockTraits (Set<Trait> traits) implements Packet<PlayerEntity> {
MsgUnlockTraits(PacketByteBuf buffer) {
this(new HashSet<>());
int length = buffer.readInt();
for (int i = 0; i < length; i++) {
Trait.fromId(buffer.readIdentifier()).ifPresent(traits::add);
@ -22,7 +19,7 @@ public class MsgUnlockTraits implements Packet<PlayerEntity> {
}
public MsgUnlockTraits(Set<Trait> traits) {
this.traits.addAll(traits);
this.traits = new HashSet<>(traits);
}
@Override
@ -32,7 +29,5 @@ public class MsgUnlockTraits implements Packet<PlayerEntity> {
}
@Override
public void handle(PlayerEntity sender) {
InteractionManager.instance().getClientNetworkHandler().handleUnlockTraits(this);
}
public void handle(PlayerEntity sender) { }
}

View file

@ -1,25 +0,0 @@
package com.minelittlepony.unicopia.network.handler;
import java.util.Map;
import com.minelittlepony.unicopia.network.*;
import net.minecraft.network.PacketByteBuf;
import net.minecraft.util.Identifier;
public interface ClientNetworkHandler {
void handleTribeScreen(MsgTribeSelect packet);
void handleSpawnProjectile(MsgSpawnProjectile packet);
void handleBlockDestruction(MsgBlockDestruction packet);
void handleCancelAbility(MsgCancelPlayerAbility packet);
void handleUnlockTraits(MsgUnlockTraits packet);
void handleServerResources(MsgServerResources packet);
Map<Identifier, ?> readChapters(PacketByteBuf buf);
}

View file

@ -20,21 +20,27 @@ import com.minelittlepony.unicopia.network.*;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.world.ClientWorld;
import net.minecraft.entity.Entity;
import net.minecraft.network.PacketByteBuf;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.util.Identifier;
public class ClientNetworkHandlerImpl implements ClientNetworkHandler {
public class ClientNetworkHandlerImpl {
private final MinecraftClient client = MinecraftClient.getInstance();
@Override
public void handleTribeScreen(MsgTribeSelect packet) {
client.setScreen(new TribeSelectionScreen(packet.getRaces()));
public ClientNetworkHandlerImpl() {
Channel.SERVER_SELECT_TRIBE.receiver().addPersistentListener(this::handleTribeScreen);
Channel.SERVER_SPAWN_PROJECTILE.receiver().addPersistentListener(this::handleSpawnProjectile);
Channel.SERVER_BLOCK_DESTRUCTION.receiver().addPersistentListener(this::handleBlockDestruction);
Channel.CANCEL_PLAYER_ABILITY.receiver().addPersistentListener(this::handleCancelAbility);
Channel.UNLOCK_TRAITS.receiver().addPersistentListener(this::handleUnlockTraits);
Channel.SERVER_RESOURCES_SEND.receiver().addPersistentListener(this::handleServerResources);
}
private void handleTribeScreen(PlayerEntity sender, MsgTribeSelect packet) {
client.setScreen(new TribeSelectionScreen(packet.availableRaces()));
}
@SuppressWarnings("unchecked")
@Override
public void handleSpawnProjectile(MsgSpawnProjectile packet) {
private void handleSpawnProjectile(PlayerEntity sender, MsgSpawnProjectile packet) {
ClientWorld world = client.world;
Entity entity = packet.getEntityType().create(world);
@ -57,38 +63,29 @@ public class ClientNetworkHandlerImpl implements ClientNetworkHandler {
world.addEntity(packet.getId(), entity);
}
@Override
public void handleBlockDestruction(MsgBlockDestruction packet) {
private void handleBlockDestruction(PlayerEntity sender, MsgBlockDestruction packet) {
ClientBlockDestructionManager destr = ((ClientBlockDestructionManager.Source)client.worldRenderer).getDestructionManager();
packet.getDestructions().forEach((i, d) -> {
packet.destructions().forEach((i, d) -> {
destr.setBlockDestruction(i, d);
});
}
@Override
public void handleCancelAbility(MsgCancelPlayerAbility packet) {
private void handleCancelAbility(PlayerEntity sender, MsgCancelPlayerAbility packet) {
client.player.playSound(USounds.GUI_ABILITY_FAIL, 1, 1);
Pony.of(client.player).getAbilities().getStats().forEach(s -> s.setCooldown(0));
}
@Override
public void handleUnlockTraits(MsgUnlockTraits packet) {
for (Trait trait : packet.traits) {
private void handleUnlockTraits(PlayerEntity sender, MsgUnlockTraits packet) {
for (Trait trait : packet.traits()) {
DiscoveryToast.show(client.getToastManager(), trait.getSprite());
}
}
@Override
public Map<Identifier, ?> readChapters(PacketByteBuf buffer) {
return buffer.readMap(PacketByteBuf::readIdentifier, ClientChapters::loadChapter);
}
@SuppressWarnings("unchecked")
@Override
public void handleServerResources(MsgServerResources packet) {
SpellTraits.load(packet.traits);
ClientChapters.load((Map<Identifier, Chapter>)packet.chapters);
TreeTypes.load(packet.treeTypes);
private void handleServerResources(PlayerEntity sender, MsgServerResources packet) {
SpellTraits.load(packet.traits());
ClientChapters.load((Map<Identifier, Chapter>)packet.chapters());
TreeTypes.load(packet.treeTypes());
}
}