Skip to content

Commit 22ce49a

Browse files
committed
fix research saved data
1 parent 7bdfef2 commit 22ce49a

27 files changed

+201
-40
lines changed

src/main/java/com/portingdeadmods/researchd/ResearchTeamUtil.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
import com.portingdeadmods.researchd.data.helper.ResearchTeam;
44
import com.portingdeadmods.researchd.data.helper.ResearchTeamMap;
5-
import com.portingdeadmods.researchd.networking.TransferOwnershipPayload;
6-
import com.portingdeadmods.researchd.registries.ResearchdSavedData;
5+
import com.portingdeadmods.researchd.networking.team.TransferOwnershipPayload;
6+
import com.portingdeadmods.researchd.data.ResearchdSavedData;
77
import com.portingdeadmods.researchd.utils.PlayerUtils;
88
import net.minecraft.ChatFormatting;
99
import net.minecraft.network.chat.Component;

src/main/java/com/portingdeadmods/researchd/Researchd.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
package com.portingdeadmods.researchd;
22

3-
import com.mojang.serialization.Codec;
4-
import com.mojang.serialization.codecs.RecordCodecBuilder;
53
import com.portingdeadmods.researchd.api.capabilties.ResearchdCapabilities;
64
import com.portingdeadmods.researchd.api.research.Research;
75
import com.portingdeadmods.researchd.data.ResearchdAttachments;
86
import com.portingdeadmods.researchd.impl.capabilities.EntityResearchWrapper;
97
import com.portingdeadmods.researchd.impl.research.ResearchPack;
108
import com.portingdeadmods.researchd.registries.ResearchdDataComponents;
119
import com.portingdeadmods.researchd.registries.ResearchdItems;
12-
import com.portingdeadmods.researchd.registries.ResearchdSavedData;
10+
import com.portingdeadmods.researchd.data.ResearchdSavedData;
1311
import com.portingdeadmods.researchd.registries.ResearchdTab;
1412
import com.portingdeadmods.researchd.registries.serializers.ResearchMethodSerializers;
1513
import com.portingdeadmods.researchd.registries.serializers.ResearchPredicateSerializers;
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package com.portingdeadmods.researchd.api.data;
22

3-
import net.minecraft.resources.ResourceKey;
43
import net.minecraft.resources.ResourceLocation;
54

65
import java.util.HashMap;
76
import java.util.Map;
7+
import java.util.concurrent.ConcurrentHashMap;
88

99
public final class PDLClientSavedData {
10-
public static final Map<ResourceLocation, Object> DATA = new HashMap<>();
10+
public static final Map<ResourceLocation, Object> CLIENT_SAVED_DATA_CACHE = new ConcurrentHashMap<>();
1111
}

src/main/java/com/portingdeadmods/researchd/api/data/PDLSavedData.java

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,34 @@
11
package com.portingdeadmods.researchd.api.data;
22

33
import com.mojang.serialization.Codec;
4+
import com.portingdeadmods.researchd.Researchd;
45
import com.portingdeadmods.researchd.ResearchdRegistries;
5-
import io.netty.buffer.ByteBuf;
66
import net.minecraft.network.RegistryFriendlyByteBuf;
77
import net.minecraft.network.codec.StreamCodec;
8-
import net.minecraft.resources.ResourceKey;
98
import net.minecraft.resources.ResourceLocation;
109
import net.minecraft.server.level.ServerLevel;
10+
import net.minecraft.server.level.ServerPlayer;
11+
import net.minecraft.world.entity.player.Player;
1112
import net.minecraft.world.level.Level;
1213

13-
import java.util.Optional;
14+
import java.util.function.BiConsumer;
15+
import java.util.function.Consumer;
16+
import java.util.function.Function;
1417
import java.util.function.Supplier;
1518

1619
// TODO: This should be moved to pdl
20+
// TODO: Migration codecs
1721
public final class PDLSavedData<T> {
1822
private final Supplier<T> defaultValueSupplier;
1923
private final Codec<T> codec;
2024
private final StreamCodec<? super RegistryFriendlyByteBuf, T> streamCodec;
25+
private final Consumer<Player> onSyncFunction;
2126

2227
private PDLSavedData(Builder<T> builder) {
2328
this.codec = builder.codec;
2429
this.streamCodec = builder.streamCodec;
2530
this.defaultValueSupplier = builder.defaultValueSupplier;
31+
this.onSyncFunction = builder.onSyncFunction;
2632
}
2733

2834
public Codec<T> codec() {
@@ -37,6 +43,10 @@ public Supplier<T> defaultValueSupplier() {
3743
return defaultValueSupplier;
3844
}
3945

46+
public Consumer<Player> onSyncFunction() {
47+
return onSyncFunction;
48+
}
49+
4050
public boolean isSynced() {
4151
return streamCodec != null;
4252
}
@@ -50,7 +60,7 @@ public void setData(Level level, T data) {
5060
} else {
5161
ResourceLocation key = ResearchdRegistries.SAVED_DATA.getKey(this);
5262
if (key != null){
53-
PDLClientSavedData.DATA.put(key, data);
63+
PDLClientSavedData.CLIENT_SAVED_DATA_CACHE.put(key, data);
5464
}
5565
}
5666
}
@@ -65,7 +75,7 @@ public T getData(Level level) {
6575
} else {
6676
ResourceLocation location = ResearchdRegistries.SAVED_DATA.getKey(this);
6777
if (location != null) {
68-
return (T) PDLClientSavedData.DATA.get(location);
78+
return (T) PDLClientSavedData.CLIENT_SAVED_DATA_CACHE.get(location);
6979
}
7080
return null;
7181
}
@@ -78,6 +88,7 @@ public static <T> Builder<T> builder(Codec<T> codec, Supplier<T> defaultValueSup
7888
public static final class Builder<T> {
7989
private final Supplier<T> defaultValueSupplier;
8090
private final Codec<T> codec;
91+
private Consumer<Player> onSyncFunction;
8192
private StreamCodec<? super RegistryFriendlyByteBuf, T> streamCodec;
8293

8394
private Builder(Codec<T> codec, Supplier<T> defaultValueSupplier) {
@@ -90,7 +101,26 @@ public Builder<T> synced(StreamCodec<? super RegistryFriendlyByteBuf, T> streamC
90101
return this;
91102
}
92103

104+
/**
105+
* The supplied method gets ran after saved data was synced.
106+
* This method gets executed on both sides
107+
*/
108+
public Builder<T> onSync(Consumer<Player> onSyncFunction) {
109+
this.onSyncFunction = onSyncFunction;
110+
return this;
111+
}
112+
93113
public PDLSavedData<T> build() {
114+
if (this.onSyncFunction != null && this.streamCodec == null) {
115+
throw new RuntimeException("Cannot provide a onSync function for a saved data without a stream coded");
116+
}
117+
118+
if (this.streamCodec != null && this.onSyncFunction == null) {
119+
this.onSyncFunction = p -> {
120+
Researchd.LOGGER.debug("SYNCING NOTHIN");
121+
};
122+
}
123+
94124
return new PDLSavedData<>(this);
95125
}
96126

src/main/java/com/portingdeadmods/researchd/api/research/ResearchInstance.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,13 +48,13 @@ public ResearchInstance copy() {
4848

4949
@Override
5050
public boolean equals(Object o) {
51-
if (!(o instanceof ResearchInstance that)) return false;
52-
return Objects.equals(research, that.research);
51+
if (!(o instanceof ResearchInstance instance)) return false;
52+
return Objects.equals(research, instance.research) && researchStatus == instance.researchStatus;
5353
}
5454

5555
@Override
5656
public int hashCode() {
57-
return Objects.hashCode(research);
57+
return Objects.hash(research, researchStatus);
5858
}
5959

6060
@Override

src/main/java/com/portingdeadmods/researchd/client/screens/SelectedResearchWidget.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ public SelectedResearchWidget(int x, int y, int width, int height) {
3030
this.methods = new Object2ObjectArrayMap<>();
3131
}
3232

33+
@SuppressWarnings("rawtypes")
3334
@Override
3435
protected void renderWidget(GuiGraphics guiGraphics, int mouseX, int mouseY, float v) {
3536
GuiUtils.drawImg(guiGraphics, BACKGROUND_TEXTURE, getX(), getY(), width, height);

src/main/java/com/portingdeadmods/researchd/client/screens/list/TechListWidget.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
import com.portingdeadmods.researchd.client.screens.ResearchScreen;
77
import com.portingdeadmods.researchd.client.screens.ResearchScreenWidget;
88
import com.portingdeadmods.researchd.client.screens.queue.ResearchQueueWidget;
9+
import com.portingdeadmods.researchd.networking.research.ResearchQueueAddPayload;
10+
import com.portingdeadmods.researchd.networking.research.ResearchQueueRemovePayload;
911
import com.portingdeadmods.researchd.utils.researches.ResearchGraphCache;
1012
import com.portingdeadmods.researchd.utils.researches.data.TechList;
1113
import net.minecraft.client.Minecraft;
@@ -17,6 +19,7 @@
1719
import net.minecraft.client.gui.narration.NarrationElementOutput;
1820
import net.minecraft.network.chat.Component;
1921
import net.minecraft.resources.ResourceLocation;
22+
import net.neoforged.neoforge.network.PacketDistributor;
2023

2124
import java.util.function.Consumer;
2225

@@ -76,7 +79,9 @@ public void onSearchButtonClicked(Button button) {
7679

7780
public void onStartResearchButtonClicked(Button button) {
7881
ResearchQueueWidget queue = this.screen.getResearchQueue();
79-
queue.getQueue().add(this.screen.getSelectedResearchWidget().getInstance());
82+
ResearchInstance instance = this.screen.getSelectedResearchWidget().getInstance();
83+
queue.getQueue().add(instance);
84+
PacketDistributor.sendToServer(new ResearchQueueAddPayload(instance));
8085
}
8186

8287
@Override

src/main/java/com/portingdeadmods/researchd/client/screens/queue/ResearchQueueWidget.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,15 @@
66
import com.portingdeadmods.researchd.api.research.ResearchInstance;
77
import com.portingdeadmods.researchd.client.screens.ResearchScreen;
88
import com.portingdeadmods.researchd.client.screens.ResearchScreenWidget;
9+
import com.portingdeadmods.researchd.networking.research.ResearchQueueAddPayload;
10+
import com.portingdeadmods.researchd.networking.research.ResearchQueueRemovePayload;
911
import com.portingdeadmods.researchd.utils.researches.data.ResearchQueue;
1012
import net.minecraft.client.Minecraft;
1113
import net.minecraft.client.gui.Font;
1214
import net.minecraft.client.gui.GuiGraphics;
1315
import net.minecraft.resources.ResourceLocation;
1416
import net.minecraft.util.FastColor;
17+
import net.neoforged.neoforge.network.PacketDistributor;
1518

1619
import java.util.List;
1720

@@ -65,7 +68,9 @@ public boolean mouseClicked(double mouseX, double mouseY, int button) {
6568

6669
public void removeResearch(int index) {
6770
if (this.queue.getEntries().size() > index) {
71+
ResearchInstance instance = this.queue.getEntries().get(index);
6872
this.queue.remove(index);
73+
PacketDistributor.sendToServer(new ResearchQueueRemovePayload(instance));
6974
}
7075
}
7176

src/main/java/com/portingdeadmods/researchd/registries/ResearchdSavedData.java renamed to src/main/java/com/portingdeadmods/researchd/data/ResearchdSavedData.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.portingdeadmods.researchd.registries;
1+
package com.portingdeadmods.researchd.data;
22

33
import com.portingdeadmods.researchd.Researchd;
44
import com.portingdeadmods.researchd.ResearchdRegistries;
@@ -12,13 +12,15 @@
1212
public final class ResearchdSavedData {
1313
public static final DeferredRegister<PDLSavedData<?>> SAVED_DATA = DeferredRegister.create(ResearchdRegistries.SAVED_DATA, Researchd.MODID);
1414

15+
// TODO: Might want to synchronize this
1516
public static final Supplier<PDLSavedData<ResearchTeamMap>> TEAM_RESEARCH = SAVED_DATA.register("team_research",
1617
() -> PDLSavedData.builder(ResearchTeamMap.CODEC, () -> ResearchTeamMap.EMPTY)
1718
.build());
1819

19-
public static final Supplier<PDLSavedData<EntityResearchImpl>> ENTITY_RESEARCH = SAVED_DATA.register("entity_research",
20+
public static final Supplier<PDLSavedData<EntityResearchImpl>> PLAYER_RESEARCH = SAVED_DATA.register("entity_research",
2021
() -> PDLSavedData.builder(EntityResearchImpl.CODEC, () -> EntityResearchImpl.EMPTY)
2122
.synced(EntityResearchImpl.STREAM_CODEC)
23+
.onSync(EntityResearchImpl::onSync)
2224
.build());
2325

2426
}

src/main/java/com/portingdeadmods/researchd/data/helper/ResearchTeamHelper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.portingdeadmods.researchd.data.helper;
22

3-
import com.portingdeadmods.researchd.registries.ResearchdSavedData;
3+
import com.portingdeadmods.researchd.data.ResearchdSavedData;
44
import net.minecraft.server.level.ServerLevel;
55
import org.jetbrains.annotations.NotNull;
66

0 commit comments

Comments
 (0)