Skip to content

Commit

Permalink
Fix an init order problem with client-side armor registration
Browse files Browse the repository at this point in the history
Can't count on client tick events not coming in before FMLClientSetupEvent
has been fired
  • Loading branch information
desht committed Apr 25, 2024
1 parent 1b27a1d commit f7c63e1
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 6 deletions.
7 changes: 2 additions & 5 deletions src/main/java/me/desht/pneumaticcraft/client/ClientSetup.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,7 @@
import me.desht.pneumaticcraft.client.gui.semiblock.LogisticsProviderScreen;
import me.desht.pneumaticcraft.client.gui.semiblock.LogisticsRequesterScreen;
import me.desht.pneumaticcraft.client.gui.semiblock.LogisticsStorageScreen;
import me.desht.pneumaticcraft.client.gui.tubemodule.AirGrateModuleScreen;
import me.desht.pneumaticcraft.client.gui.tubemodule.LogisticsModuleScreen;
import me.desht.pneumaticcraft.client.gui.tubemodule.PressureGaugeModuleScreen;
import me.desht.pneumaticcraft.client.gui.tubemodule.RedstoneModuleScreen;
import me.desht.pneumaticcraft.client.gui.tubemodule.ThermostatModuleScreen;
import me.desht.pneumaticcraft.client.gui.tubemodule.*;
import me.desht.pneumaticcraft.client.gui.upgrademanager.*;
import me.desht.pneumaticcraft.client.model.ModelMinigun;
import me.desht.pneumaticcraft.client.model.PNCModelLayers;
Expand Down Expand Up @@ -133,6 +129,7 @@ public static void initLate() {
BlockTrackHandler.getInstance().freeze();
ClientArmorRegistry.getInstance().registerSubKeyBinds();
ClientArmorRegistry.getInstance().registerKeybindsWithMinecraft();
ClientArmorRegistry.getInstance().freeze();

registerProgWidgetExtraRenderers();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,8 @@ public enum ClientArmorRegistry implements IClientArmorRegistry {
private final Map<ResourceLocation, KeyMapping> id2KeyBindMap = new ConcurrentHashMap<>();
// map keymapping name to upgrade handler that it triggers (e.g. hacking, kick, item launcher...)
private final Map<String, IArmorUpgradeClientHandler<?>> triggerKeyBindMap = new ConcurrentHashMap<>();
// frozen when everything set up
private boolean frozen;

public static ClientArmorRegistry getInstance() {
return INSTANCE;
Expand Down Expand Up @@ -244,4 +246,11 @@ public void refreshConfig() {
}
}

public void freeze() {
frozen = true;
}

public boolean isFrozen() {
return frozen;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ public static void onClientDisconnect(ClientPlayerNetworkEvent.LoggingOut event)
@SubscribeEvent
public static void tickEnd(TickEvent.ClientTickEvent event) {
if (event.phase == TickEvent.Phase.END) {
if (ClientUtils.getOptionalClientPlayer().isEmpty() && ArmorUpgradeRegistry.getInstance().isFrozen()) {
if (ClientUtils.getOptionalClientPlayer().isEmpty() && ArmorUpgradeRegistry.getInstance().isFrozen() && ClientArmorRegistry.getInstance().isFrozen()) {
for (EquipmentSlot slot : ArmorUpgradeRegistry.ARMOR_SLOTS) {
ClientArmorRegistry.getInstance().getHandlersForSlot(slot).forEach(IArmorUpgradeClientHandler::reset);
}
Expand Down

0 comments on commit f7c63e1

Please sign in to comment.