Skip to content

Commit d180ba4

Browse files
committed
Bump neo, new built-in attachment sync
1 parent e0f3e70 commit d180ba4

File tree

12 files changed

+77
-123
lines changed

12 files changed

+77
-123
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ Allomancy 6.1.0
66
This mod adds the basics of [Allomancy](http://coppermind.net/wiki/Allomancy) from Brandon Sanderson's book series
77
*Mistborn*.
88

9-
This mod is currently updated for `Minecraft 1.21.7` and `NeoForge 21.7.1-beta`
9+
This mod is currently updated for `Minecraft 1.21.7` and `NeoForge 21.23.1-beta`
1010

1111
Please verify and report any issues!
1212

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
plugins {
22
id 'java-library'
33
id 'maven-publish'
4-
id 'net.neoforged.moddev' version '2.0.95'
4+
id 'net.neoforged.moddev' version '2.0.99'
55
id 'idea'
66
}
77

gradle.properties

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ minecraft_version=1.21.7
1414
# as they do not follow standard versioning conventions.
1515
minecraft_version_range=[1.21.7]
1616
# The Neo version must agree with the Minecraft version to get a valid artifact
17-
neo_version=21.7.1-beta
17+
neo_version=21.7.23-beta
1818
# The Neo version range can use any version of Neo as bounds
19-
neo_version_range=[21.7.1-beta,)
19+
neo_version_range=[21.7.23-beta,)
2020
# read more on this at https://github.com/neoforged/NeoGradle/blob/NG_7.0/README.md#apply-parchment-mappings
2121
# you can also find the latest versions at: https://parchmentmc.org/docs/getting-started
2222
parchment_minecraft_version=1.21.6
@@ -33,7 +33,7 @@ mod_name=Allomancy
3333
# The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default.
3434
mod_license=GPL v3
3535
# The mod version. See https://semver.org/
36-
mod_version=6.1.0
36+
mod_version=6.1.0b3
3737
# The group ID for the mod. It is only important when publishing as an artifact to a Maven repository.
3838
# This should match the base package used for the mod sources.
3939
# See https://maven.apache.org/guides/mini/guide-naming-conventions.html

src/main/java/com/legobmw99/allomancy/modules/consumables/item/consume_effects/GrantAllomancyConsumeEffect.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import com.legobmw99.allomancy.api.enums.Metal;
44
import com.legobmw99.allomancy.modules.consumables.ConsumeSetup;
55
import com.legobmw99.allomancy.modules.powers.data.AllomancerAttachment;
6-
import com.legobmw99.allomancy.modules.powers.network.Network;
76
import com.mojang.serialization.Codec;
87
import com.mojang.serialization.MapCodec;
98
import com.mojang.serialization.codecs.RecordCodecBuilder;
@@ -69,7 +68,7 @@ public boolean apply(Level level, ItemStack stack, LivingEntity entity) {
6968
}
7069
}
7170
if (addedPower && entity instanceof ServerPlayer player) {
72-
Network.syncAllomancerData(player);
71+
player.syncData(AllomancerAttachment.ALLOMANCY_DATA);
7372
}
7473
return addedPower;
7574
}

src/main/java/com/legobmw99/allomancy/modules/extras/command/AllomancyPowerCommand.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import com.legobmw99.allomancy.api.data.IAllomancerData;
44
import com.legobmw99.allomancy.api.enums.Metal;
55
import com.legobmw99.allomancy.modules.powers.data.AllomancerAttachment;
6-
import com.legobmw99.allomancy.modules.powers.network.Network;
76
import com.mojang.brigadier.CommandDispatcher;
87
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
98
import com.mojang.brigadier.context.CommandContext;
@@ -147,9 +146,10 @@ private static void addPower(CommandContext<CommandSourceStack> ctx,
147146

148147
private static void removePower(CommandContext<CommandSourceStack> ctx,
149148
ServerPlayer player) throws CommandSyntaxException {
150-
handlePowerChange(ctx, player, IAllomancerData::setUninvested, (data) -> data::hasPower,
151-
(mt, data) -> data.revokePower(mt), ERROR_CANT_REMOVE::create,
152-
"commands.allomancy.removepower");
149+
handlePowerChange(ctx, player, IAllomancerData::setUninvested, (data) -> data::hasPower, (mt, data) -> {
150+
data.revokePower(mt);
151+
data.setBurning(mt, false);
152+
}, ERROR_CANT_REMOVE::create, "commands.allomancy.removepower");
153153
}
154154

155155
/**
@@ -194,7 +194,7 @@ private static void handlePowerChange(CommandContext<CommandSourceStack> ctx,
194194
}
195195
}
196196
}
197-
Network.syncAllomancerData(player);
197+
player.syncData(AllomancerAttachment.ALLOMANCY_DATA);
198198

199199
ctx.getSource().sendSuccess(() -> Component.translatable(success, player.getDisplayName(), type), true);
200200

src/main/java/com/legobmw99/allomancy/modules/powers/CommonEventHandler.java

Lines changed: 27 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -93,36 +93,31 @@ public static void onPlayerLoad(final PlayerEvent.LoadFromFile event) {
9393

9494
@SubscribeEvent
9595
public static void onJoinWorld(final PlayerEvent.PlayerLoggedInEvent event) {
96-
if (event.getEntity() instanceof ServerPlayer player) {
97-
if (!player.hasData(AllomancerAttachment.ALLOMANCY_DATA)) {
98-
var data = player.getData(AllomancerAttachment.ALLOMANCY_DATA);
99-
// Handle random misting case
100-
if (PowersConfig.random_mistings.get() && data.isUninvested()) {
101-
int randomMisting;
102-
// if (FMLEnvironment.dist.isClient()){
103-
// // TODO prevent certain 'useless' choices?
104-
// }
105-
if (PowersConfig.respect_player_UUID.get()) {
106-
randomMisting = Math.abs(player.getUUID().hashCode()) % Metal.values().length;
107-
} else {
108-
randomMisting = player.getRandom().nextInt(Metal.values().length);
109-
}
110-
data.addPower(Metal.getMetal(randomMisting));
111-
ItemStack flakes = new ItemStack(WorldSetup.FLAKES.get(randomMisting).get());
112-
// Give the player one flake of their metal
113-
if (!player.getInventory().add(flakes)) {
114-
ItemEntity entity =
115-
new ItemEntity(player.level(), player.position().x(), player.position().y(),
116-
player.position().z(), flakes);
117-
player.level().addFreshEntity(entity);
118-
}
96+
if (event.getEntity() instanceof ServerPlayer player &&
97+
!player.hasData(AllomancerAttachment.ALLOMANCY_DATA)) {
98+
var data = new AllomancerData();
99+
// Handle random misting case
100+
if (PowersConfig.random_mistings.get() && data.isUninvested()) {
101+
int randomMisting;
102+
// if (FMLEnvironment.dist.isClient()){
103+
// // TODO prevent certain 'useless' choices?
104+
// }
105+
if (PowersConfig.respect_player_UUID.get()) {
106+
randomMisting = Math.abs(player.getUUID().hashCode()) % Metal.values().length;
107+
} else {
108+
randomMisting = player.getRandom().nextInt(Metal.values().length);
109+
}
110+
data.addPower(Metal.getMetal(randomMisting));
111+
player.setData(AllomancerAttachment.ALLOMANCY_DATA, data);
112+
ItemStack flakes = new ItemStack(WorldSetup.FLAKES.get(randomMisting).get());
113+
// Give the player one flake of their metal
114+
if (!player.getInventory().add(flakes)) {
115+
ItemEntity entity = new ItemEntity(player.level(), player.position().x(), player.position().y(),
116+
player.position().z(), flakes);
117+
player.level().addFreshEntity(entity);
119118
}
120119
}
121-
122-
//Sync cap to client
123-
Network.syncAllomancerData(player);
124120
}
125-
126121
}
127122

128123

@@ -133,24 +128,10 @@ public static void onRespawn(final PlayerEvent.PlayerRespawnEvent event) {
133128
var data = player.getData(AllomancerAttachment.ALLOMANCY_DATA);
134129
data.drainMetals(Metal.values());
135130
}
136-
Network.syncAllomancerData(player);
131+
player.syncData(AllomancerAttachment.ALLOMANCY_DATA);
137132
}
138133
}
139134

140-
@SubscribeEvent
141-
public static void onChangeDimension(final PlayerEvent.PlayerChangedDimensionEvent event) {
142-
if (!event.getEntity().level().isClientSide() && event.getEntity() instanceof ServerPlayer player) {
143-
Network.syncAllomancerData(player);
144-
}
145-
}
146-
147-
@SubscribeEvent
148-
public static void onStartTracking(final PlayerEvent.StartTracking event) {
149-
if (!event.getTarget().level().isClientSide && event.getTarget() instanceof ServerPlayer player &&
150-
player.hasData(AllomancerAttachment.ALLOMANCY_DATA)) {
151-
Network.syncAllomancerData(player);
152-
}
153-
}
154135

155136
@SubscribeEvent
156137
public static void onRespawnPosition(final PlayerRespawnPositionEvent event) {
@@ -162,7 +143,7 @@ public static void onRespawnPosition(final PlayerRespawnPositionEvent event) {
162143
var dimension = event.getTeleportTransition().newLevel().dimension();
163144
if (data.getSpawnLoc() == null || !data.getSpawnLoc().isCloseEnough(dimension, pos, 10)) {
164145
data.setSpawnLoc(pos, dimension);
165-
Network.syncAllomancerData(player);
146+
player.syncData(AllomancerAttachment.ALLOMANCY_DATA);
166147
}
167148
}
168149
}
@@ -172,7 +153,7 @@ public static void onSetSpawn(final PlayerSetSpawnEvent event) {
172153
if (event.getEntity() instanceof ServerPlayer player) {
173154
var data = player.getData(AllomancerAttachment.ALLOMANCY_DATA);
174155
data.setSpawnLoc(event.getNewSpawn(), event.getSpawnLevel());
175-
Network.syncAllomancerData(player);
156+
player.syncData(AllomancerAttachment.ALLOMANCY_DATA);
176157
}
177158
}
178159

@@ -214,7 +195,7 @@ public static void onEntityHurt(final LivingIncomingDamageEvent event) {
214195
event.setAmount(newDamage);
215196
// Note that they took damage, will come in to play if they stop burning
216197
data.setDamageStored(data.getDamageStored() + 2);
217-
Network.syncAllomancerData(player);
198+
player.syncData(AllomancerAttachment.ALLOMANCY_DATA);
218199
}
219200
}
220201
}
@@ -392,7 +373,7 @@ private static void playerPowerTick(ServerPlayer curPlayer, ServerLevel level) {
392373
}
393374
}
394375
if (syncRequired) {
395-
Network.syncAllomancerData(curPlayer);
376+
curPlayer.syncData(AllomancerAttachment.ALLOMANCY_DATA);
396377
}
397378
}
398379
}
Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,18 @@
11
package com.legobmw99.allomancy.modules.powers.client.network;
22

33
import com.legobmw99.allomancy.Allomancy;
4-
import com.legobmw99.allomancy.api.enums.Metal;
5-
import com.legobmw99.allomancy.modules.powers.client.util.Sounds;
64
import com.legobmw99.allomancy.modules.powers.data.AllomancerAttachment;
7-
import com.legobmw99.allomancy.modules.powers.network.AllomancerDataPayload;
85
import com.legobmw99.allomancy.modules.powers.network.EnhanceTimePayload;
96
import net.minecraft.client.Minecraft;
107
import net.minecraft.network.chat.Component;
118
import net.minecraft.world.entity.player.Player;
129
import net.neoforged.neoforge.client.network.event.RegisterClientPayloadHandlersEvent;
1310
import net.neoforged.neoforge.network.handling.IPayloadContext;
1411

15-
import java.util.Arrays;
16-
1712
public final class ClientPayloadHandler {
1813

1914
private ClientPayloadHandler() {}
2015

21-
private static void updateAllomancer(AllomancerDataPayload payload, IPayloadContext ctx) {
22-
ctx.enqueueWork(() -> {
23-
Player player = Minecraft.getInstance().level.getPlayerByUUID(payload.player());
24-
if (player != null) {
25-
long burningBefore = Arrays
26-
.stream(Metal.values())
27-
.filter(player.getData(AllomancerAttachment.ALLOMANCY_DATA)::isBurning)
28-
.count();
29-
30-
long burningAfter = Arrays.stream(Metal.values()).filter(payload.data()::isBurning).count();
31-
if (player == Minecraft.getInstance().player && burningAfter < burningBefore) {
32-
Sounds.soundForBurnChange(false);
33-
}
34-
player.setData(AllomancerAttachment.ALLOMANCY_DATA, payload.data());
35-
}
36-
}).exceptionally(e -> {
37-
Allomancy.LOGGER.error("Failed to handle allomancerData update", e);
38-
ctx.disconnect(Component.translatable("allomancy.networking.failed", e.getMessage()));
39-
return null;
40-
});
41-
}
42-
4316
private static void updateEnhanced(EnhanceTimePayload payload, IPayloadContext ctx) {
4417
ctx.enqueueWork(() -> {
4518
Player player = Minecraft.getInstance().level.getPlayerByUUID(payload.player());
@@ -55,6 +28,5 @@ private static void updateEnhanced(EnhanceTimePayload payload, IPayloadContext c
5528

5629
public static void registerClientPayloadHandlers(final RegisterClientPayloadHandlersEvent event) {
5730
event.register(EnhanceTimePayload.TYPE, ClientPayloadHandler::updateEnhanced);
58-
event.register(AllomancerDataPayload.TYPE, ClientPayloadHandler::updateAllomancer);
5931
}
6032
}

src/main/java/com/legobmw99/allomancy/modules/powers/data/AllomancerAttachment.java

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,19 @@
11
package com.legobmw99.allomancy.modules.powers.data;
22

33
import com.legobmw99.allomancy.Allomancy;
4+
import com.legobmw99.allomancy.api.enums.Metal;
5+
import com.legobmw99.allomancy.modules.powers.client.util.Sounds;
6+
import net.minecraft.client.player.LocalPlayer;
7+
import net.minecraft.network.RegistryFriendlyByteBuf;
48
import net.neoforged.bus.api.IEventBus;
9+
import net.neoforged.neoforge.attachment.AttachmentSyncHandler;
510
import net.neoforged.neoforge.attachment.AttachmentType;
11+
import net.neoforged.neoforge.attachment.IAttachmentHolder;
612
import net.neoforged.neoforge.registries.DeferredRegister;
713
import net.neoforged.neoforge.registries.NeoForgeRegistries;
14+
import org.jetbrains.annotations.Nullable;
815

16+
import java.util.Arrays;
917
import java.util.function.Supplier;
1018

1119
public final class AllomancerAttachment {
@@ -17,6 +25,31 @@ public final class AllomancerAttachment {
1725
ATTACHMENT_TYPES.register("allomancy_data", () -> AttachmentType
1826
.builder(AllomancerData::new)
1927
.serialize(AllomancerData.CODEC)
28+
.sync(new AttachmentSyncHandler<>() {
29+
@Override
30+
public void write(RegistryFriendlyByteBuf buf,
31+
AllomancerData attachment,
32+
boolean initialSync) {
33+
AllomancerData.STREAM_CODEC.encode(buf, attachment);
34+
}
35+
36+
@Override
37+
public @Nullable AllomancerData read(IAttachmentHolder holder,
38+
RegistryFriendlyByteBuf buf,
39+
@Nullable AllomancerData previousData) {
40+
AllomancerData data = AllomancerData.STREAM_CODEC.decode(buf);
41+
if (previousData != null && holder instanceof LocalPlayer p) {
42+
var burningBefore =
43+
Arrays.stream(Metal.values()).filter(previousData::isBurning).count();
44+
var burningAfter = Arrays.stream(Metal.values()).filter(data::isBurning).count();
45+
if (burningBefore > burningAfter) {
46+
Sounds.soundForBurnChange(false);
47+
}
48+
}
49+
50+
return data;
51+
}
52+
})
2053
.copyOnDeath()
2154
.build());
2255

@@ -26,4 +59,5 @@ public static void register(IEventBus bus) {
2659
ATTACHMENT_TYPES.register(bus);
2760
}
2861

62+
2963
}

src/main/java/com/legobmw99/allomancy/modules/powers/network/AllomancerDataPayload.java

Lines changed: 0 additions & 30 deletions
This file was deleted.

src/main/java/com/legobmw99/allomancy/modules/powers/network/Network.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ public static void register(IEventBus bus) {
1717
private static void registerPayloads(final RegisterPayloadHandlersEvent event) {
1818
PayloadRegistrar registrar = event.registrar(Allomancy.MODID).versioned("3.1");
1919

20-
registrar.playToClient(AllomancerDataPayload.TYPE, AllomancerDataPayload.STREAM_CODEC);
2120

2221
registrar.playToServer(EmotionPayload.TYPE, EmotionPayload.STREAM_CODEC, ServerPayloadHandler::changeEmotion);
2322
registrar.playToServer(BlockPushPullPayload.TYPE, BlockPushPullPayload.STREAM_CODEC,
@@ -33,9 +32,9 @@ private static void registerPayloads(final RegisterPayloadHandlersEvent event) {
3332

3433
}
3534

36-
public static void syncAllomancerData(ServerPlayer player) {
37-
sync(new AllomancerDataPayload(player), player);
38-
}
35+
// public static void syncAllomancerData(ServerPlayer player) {
36+
// sync(new AllomancerDataPayload(player), player);
37+
// }
3938

4039
public static void sync(CustomPacketPayload msg, ServerPlayer player) {
4140
PacketDistributor.sendToPlayersTrackingEntityAndSelf(player, msg);

0 commit comments

Comments
 (0)