Skip to content

Commit

Permalink
fixed client ignorance bug
Browse files Browse the repository at this point in the history
  • Loading branch information
Tigereye504 committed May 19, 2021
1 parent 7bc1a9f commit 932aded
Show file tree
Hide file tree
Showing 6 changed files with 72 additions and 5 deletions.
2 changes: 1 addition & 1 deletion src/main/java/net/tigereye/chestcavity/ChestCavity.java
Original file line number Diff line number Diff line change
Expand Up @@ -50,10 +50,10 @@ public void onInitialize() {
CCStatusEffects.register();
CCTagOrgans.init();
CCCommands.register();
CCNetworkingPackets.register();
ResourceManagerHelper.get(ResourceType.SERVER_DATA).registerReloadListener(new OrganManager());
ResourceManagerHelper.get(ResourceType.SERVER_DATA).registerReloadListener(new GeneratedChestCavityTypeManager());
ResourceManagerHelper.get(ResourceType.SERVER_DATA).registerReloadListener(new GeneratedChestCavityAssignmentManager());
CCNetworkingPackets.register();
CrossModContent.register();


Expand Down
5 changes: 5 additions & 0 deletions src/main/java/net/tigereye/chestcavity/ChestCavityClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@
import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
import net.fabricmc.fabric.api.client.screenhandler.v1.ScreenRegistry;
import net.fabricmc.fabric.api.resource.ResourceManagerHelper;
import net.minecraft.resource.ResourceType;
import net.tigereye.chestcavity.chestcavities.organs.OrganManager;
import net.tigereye.chestcavity.chestcavities.types.json.GeneratedChestCavityAssignmentManager;
import net.tigereye.chestcavity.chestcavities.types.json.GeneratedChestCavityTypeManager;
import net.tigereye.chestcavity.interfaces.ChestCavityEntity;
import net.tigereye.chestcavity.listeners.KeybindingClientListeners;
import net.tigereye.chestcavity.registration.CCKeybindings;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,13 @@
package net.tigereye.chestcavity;

import net.fabricmc.api.DedicatedServerModInitializer;
import net.fabricmc.fabric.api.networking.v1.ServerLoginConnectionEvents;
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
import net.fabricmc.fabric.api.resource.ResourceManagerHelper;
import net.minecraft.resource.ResourceType;
import net.tigereye.chestcavity.chestcavities.organs.OrganManager;
import net.tigereye.chestcavity.chestcavities.types.json.GeneratedChestCavityAssignmentManager;
import net.tigereye.chestcavity.chestcavities.types.json.GeneratedChestCavityTypeManager;
import net.tigereye.chestcavity.interfaces.ChestCavityEntity;
import net.tigereye.chestcavity.registration.CCNetworkingPackets;
import net.tigereye.chestcavity.util.NetworkUtil;
Expand All @@ -14,7 +20,7 @@ public class ChestCavityServer implements DedicatedServerModInitializer{
public void onInitializeServer() {
ServerPlayNetworking.registerGlobalReceiver(CCNetworkingPackets.RECEIVED_UPDATE_PACKET_ID, (server, player, handler, buf, sender) -> {
Optional<ChestCavityEntity> optional = ChestCavityEntity.of(player);
optional.ifPresent(chestCavityEntity -> NetworkUtil.ReadChestCavityReceiveUpdatePacket(chestCavityEntity.getChestCavityInstance()));
optional.ifPresent(chestCavityEntity -> NetworkUtil.ReadChestCavityReceivedUpdatePacket(chestCavityEntity.getChestCavityInstance()));
});
ServerPlayNetworking.registerGlobalReceiver(CCNetworkingPackets.HOTKEY_PACKET_ID, (server, player, handler, buf, sender) -> {
Optional<ChestCavityEntity> optional = ChestCavityEntity.of(player);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,5 @@

public class OrganData {
public boolean pseudoOrgan;
public Map<Identifier,Float> organScores;
public Map<Identifier,Float> organScores = new HashMap<>();
}
Original file line number Diff line number Diff line change
@@ -1,36 +1,50 @@
package net.tigereye.chestcavity.registration;

import net.fabricmc.fabric.api.client.networking.v1.ClientLoginNetworking;
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
import net.fabricmc.fabric.api.networking.v1.PacketByteBufs;
import net.fabricmc.fabric.api.networking.v1.ServerLoginConnectionEvents;
import net.fabricmc.fabric.api.networking.v1.ServerLoginNetworking;
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
import net.minecraft.network.PacketByteBuf;
import net.minecraft.util.Identifier;
import net.tigereye.chestcavity.ChestCavity;
import net.tigereye.chestcavity.interfaces.ChestCavityEntity;
import net.tigereye.chestcavity.util.NetworkUtil;

import java.util.Optional;
import java.util.concurrent.CompletableFuture;

public class CCNetworkingPackets {
public static final Identifier ORGAN_DATA_PACKET_ID = new Identifier(ChestCavity.MODID,"organ_data");
public static final Identifier UPDATE_PACKET_ID = new Identifier(ChestCavity.MODID,"update");
public static final Identifier RECEIVED_UPDATE_PACKET_ID = new Identifier(ChestCavity.MODID,"received_update");

public static final Identifier HOTKEY_PACKET_ID = new Identifier(ChestCavity.MODID, "hotkey");

public static void register(){
ServerLoginConnectionEvents.QUERY_START.register(NetworkUtil::sendOrganDataPacket);
ServerPlayNetworking.registerGlobalReceiver(CCNetworkingPackets.RECEIVED_UPDATE_PACKET_ID, (server, player, handler, buf, sender) -> {
Optional<ChestCavityEntity> optional = ChestCavityEntity.of(player);
optional.ifPresent(chestCavityEntity -> NetworkUtil.ReadChestCavityReceiveUpdatePacket(chestCavityEntity.getChestCavityInstance()));
optional.ifPresent(chestCavityEntity -> NetworkUtil.ReadChestCavityReceivedUpdatePacket(chestCavityEntity.getChestCavityInstance()));
});

ServerPlayNetworking.registerGlobalReceiver(CCNetworkingPackets.HOTKEY_PACKET_ID, (server, player, handler, buf, sender) -> {
Optional<ChestCavityEntity> optional = ChestCavityEntity.of(player);
optional.ifPresent(chestCavityEntity -> NetworkUtil.ReadChestCavityHotkeyPacket(chestCavityEntity.getChestCavityInstance(),buf));
});
ServerLoginNetworking.registerGlobalReceiver(CCNetworkingPackets.ORGAN_DATA_PACKET_ID,(server, handler, understood, buf, synchronizer, sender) -> {
});
}

public static void registerClient(){
ClientPlayNetworking.registerGlobalReceiver(CCNetworkingPackets.UPDATE_PACKET_ID, (client, handler, buf, responseSender) -> {
Optional<ChestCavityEntity> optional = ChestCavityEntity.of(client.cameraEntity);
optional.ifPresent(chestCavityEntity -> NetworkUtil.ReadChestCavityUpdatePacket(chestCavityEntity.getChestCavityInstance(), buf));
});
ClientLoginNetworking.registerGlobalReceiver(CCNetworkingPackets.ORGAN_DATA_PACKET_ID, (client, handler, buf, responseSender) -> {
NetworkUtil.readOrganDataPacket(buf);
return CompletableFuture.completedFuture(PacketByteBufs.empty());
});
}
}
44 changes: 43 additions & 1 deletion src/main/java/net/tigereye/chestcavity/util/NetworkUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,18 @@

import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
import net.fabricmc.fabric.api.networking.v1.PacketByteBufs;
import net.fabricmc.fabric.api.networking.v1.PacketSender;
import net.fabricmc.fabric.api.networking.v1.ServerLoginNetworking;
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
import net.minecraft.network.PacketByteBuf;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.network.ServerLoginNetworkHandler;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.util.Identifier;
import net.tigereye.chestcavity.ChestCavity;
import net.tigereye.chestcavity.chestcavities.instance.ChestCavityInstance;
import net.tigereye.chestcavity.chestcavities.organs.OrganData;
import net.tigereye.chestcavity.chestcavities.organs.OrganManager;
import net.tigereye.chestcavity.listeners.OrganActivationListeners;
import net.tigereye.chestcavity.registration.CCNetworkingPackets;

Expand Down Expand Up @@ -58,7 +64,7 @@ public static boolean SendS2CChestCavityUpdatePacket(ChestCavityInstance cc, Pac
return false;
}

public static void ReadChestCavityReceiveUpdatePacket(ChestCavityInstance cc) {
public static void ReadChestCavityReceivedUpdatePacket(ChestCavityInstance cc) {
cc.updatePacket = null;
}

Expand All @@ -82,4 +88,40 @@ public static void SendC2SChestCavityHotkeyPacket(Identifier organScore){
ClientPlayNetworking.send(CCNetworkingPackets.HOTKEY_PACKET_ID, NetworkUtil.WriteChestCavityHotkeyPacket(organScore));
}

public static void sendOrganDataPacket(ServerLoginNetworkHandler serverLoginNetworkHandler, MinecraftServer minecraftServer, PacketSender packetSender, ServerLoginNetworking.LoginSynchronizer loginSynchronizer) {
PacketByteBuf buf = PacketByteBufs.create();
buf.writeInt(OrganManager.GeneratedOrganData.size());
OrganManager.GeneratedOrganData.forEach((id,data) -> {
buf.writeIdentifier(id);
buf.writeBoolean(data.pseudoOrgan);
buf.writeInt(data.organScores.size());
data.organScores.forEach((ability,score) -> {
buf.writeIdentifier(ability);
buf.writeFloat(score);
});
});
packetSender.sendPacket(CCNetworkingPackets.ORGAN_DATA_PACKET_ID,buf);
}

public static boolean readOrganDataPacket(PacketByteBuf buf){
OrganManager.GeneratedOrganData.clear();
try {
int organCount = buf.readInt();
for (int i = 0; i < organCount; i++) {
Identifier organID = buf.readIdentifier();
OrganData organData = new OrganData();
organData.pseudoOrgan = buf.readBoolean();
int organAbilityCount = buf.readInt();
for (int j = 0; j < organAbilityCount; j++) {
organData.organScores.put(buf.readIdentifier(), buf.readFloat());
}
OrganManager.GeneratedOrganData.put(organID, organData);
}
ChestCavity.LOGGER.info("loaded "+organCount+" organs from server");
}
catch(Exception e){
return false;
}
return true;
}
}

0 comments on commit 932aded

Please sign in to comment.