Skip to content

Commit e49d0e8

Browse files
committed
feat: Update to Minecraft 1.20.2
1 parent 964ea70 commit e49d0e8

File tree

8 files changed

+70
-98
lines changed

8 files changed

+70
-98
lines changed

fabric/src/main/java/net/blay09/mods/balm/mixin/AbstractContainerScreenMixin.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package net.blay09.mods.balm.mixin;
22

3-
import com.mojang.blaze3d.vertex.PoseStack;
43
import net.blay09.mods.balm.api.Balm;
54
import net.blay09.mods.balm.api.event.client.screen.ContainerScreenDrawEvent;
65
import net.minecraft.client.gui.GuiGraphics;
@@ -14,7 +13,7 @@
1413
@Mixin(AbstractContainerScreen.class)
1514
public class AbstractContainerScreenMixin {
1615

17-
@Inject(method = "render(Lnet/minecraft/client/gui/GuiGraphics;IIF)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screens/inventory/AbstractContainerScreen;renderBg(Lnet/minecraft/client/gui/GuiGraphics;FII)V", shift = At.Shift.AFTER))
16+
@Inject(method = "renderBackground(Lnet/minecraft/client/gui/GuiGraphics;IIF)V", at = @At(value = "RETURN"))
1817
public void renderBackground(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks, CallbackInfo callbackInfo) {
1918
Screen screen = (Screen) (Object) this;
2019
Balm.getEvents().fireEvent(new ContainerScreenDrawEvent.Background(screen, guiGraphics, mouseX, mouseY));

fabric/src/main/java/net/blay09/mods/balm/mixin/ChunkMapMixin.java

+8-17
Original file line numberDiff line numberDiff line change
@@ -2,35 +2,26 @@
22

33
import net.blay09.mods.balm.api.Balm;
44
import net.blay09.mods.balm.api.event.ChunkTrackingEvent;
5-
import net.minecraft.network.protocol.game.ClientboundLevelChunkWithLightPacket;
65
import net.minecraft.server.level.ChunkMap;
76
import net.minecraft.server.level.ServerLevel;
87
import net.minecraft.server.level.ServerPlayer;
98
import net.minecraft.world.level.ChunkPos;
10-
import org.apache.commons.lang3.mutable.MutableObject;
11-
import org.spongepowered.asm.mixin.Final;
9+
import net.minecraft.world.level.chunk.LevelChunk;
1210
import org.spongepowered.asm.mixin.Mixin;
13-
import org.spongepowered.asm.mixin.Shadow;
1411
import org.spongepowered.asm.mixin.injection.At;
1512
import org.spongepowered.asm.mixin.injection.Inject;
1613
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
1714

1815
@Mixin(ChunkMap.class)
1916
public class ChunkMapMixin {
2017

21-
@Final
22-
@Shadow
23-
ServerLevel level;
24-
25-
@Inject(method = "updateChunkTracking(Lnet/minecraft/server/level/ServerPlayer;Lnet/minecraft/world/level/ChunkPos;Lorg/apache/commons/lang3/mutable/MutableObject;ZZ)V", at = @At("HEAD"))
26-
void updateChunkTracking(ServerPlayer player, ChunkPos chunkPos, MutableObject<ClientboundLevelChunkWithLightPacket> packet, boolean wasLoaded, boolean shouldLoad, CallbackInfo callbackInfo) {
27-
if (wasLoaded != shouldLoad && player.level() == level) {
28-
if (shouldLoad) {
29-
Balm.getEvents().fireEvent(new ChunkTrackingEvent.Start(level, player, chunkPos));
30-
} else {
31-
Balm.getEvents().fireEvent(new ChunkTrackingEvent.Stop(level, player, chunkPos));
32-
}
33-
}
18+
@Inject(method = "markChunkPendingToSend(Lnet/minecraft/server/level/ServerPlayer;Lnet/minecraft/world/level/chunk/LevelChunk;)V", at = @At(value = "HEAD"))
19+
private static void markChunkPendingToSend(ServerPlayer player, LevelChunk chunk, CallbackInfo callbackInfo) {
20+
Balm.getEvents().fireEvent(new ChunkTrackingEvent.Stop((ServerLevel) chunk.getLevel(), player, chunk.getPos()));
3421
}
3522

23+
@Inject(method = "dropChunk(Lnet/minecraft/server/level/ServerPlayer;Lnet/minecraft/world/level/ChunkPos;)V", at = @At(value = "HEAD"))
24+
private static void dropChunk(ServerPlayer player, ChunkPos chunkPos, CallbackInfo callbackInfo) {
25+
Balm.getEvents().fireEvent(new ChunkTrackingEvent.Stop(player.serverLevel(), player, chunkPos));
26+
}
3627
}

fabric/src/main/java/net/blay09/mods/balm/mixin/LivingEntityMixin.java

+10-14
Original file line numberDiff line numberDiff line change
@@ -5,24 +5,21 @@
55
import net.blay09.mods.balm.api.event.LivingFallEvent;
66
import net.blay09.mods.balm.api.event.LivingHealEvent;
77
import net.minecraft.world.damagesource.DamageSource;
8-
import net.minecraft.world.entity.EquipmentSlot;
98
import net.minecraft.world.entity.LivingEntity;
10-
import net.minecraft.world.entity.player.Player;
119
import org.spongepowered.asm.mixin.Mixin;
12-
import org.spongepowered.asm.mixin.Shadow;
10+
import org.spongepowered.asm.mixin.Unique;
1311
import org.spongepowered.asm.mixin.injection.At;
1412
import org.spongepowered.asm.mixin.injection.Inject;
15-
import org.spongepowered.asm.mixin.injection.ModifyArg;
1613
import org.spongepowered.asm.mixin.injection.ModifyVariable;
17-
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
1814
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
1915

2016
@Mixin(LivingEntity.class)
2117
public abstract class LivingEntityMixin {
2218

23-
private static final ThreadLocal<LivingFallEvent> currentFallEvent = new ThreadLocal<>();
19+
@Unique
20+
private static final ThreadLocal<LivingFallEvent> balmCurrentFallEvent = new ThreadLocal<>();
2421

25-
@ModifyVariable(method = "actuallyHurt(Lnet/minecraft/world/damagesource/DamageSource;F)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;setAbsorptionAmount(F)V"), index = 2)
22+
@ModifyVariable(method = "actuallyHurt(Lnet/minecraft/world/damagesource/DamageSource;F)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;setAbsorptionAmount(F)V"), index = 2, argsOnly = true)
2623
private float actuallyHurt(float damageAmount, DamageSource damageSource) {
2724
LivingDamageEvent event = new LivingDamageEvent((LivingEntity) (Object) this, damageSource, damageAmount);
2825
Balm.getEvents().fireEvent(event);
@@ -40,17 +37,16 @@ private void causeFallDamage(float distance, float damageMultiplier, DamageSourc
4037
if (event.isCanceled()) {
4138
callbackInfo.setReturnValue(false);
4239
}
43-
currentFallEvent.set(event);
40+
balmCurrentFallEvent.set(event);
4441
}
4542

46-
@ModifyVariable(method = "causeFallDamage(FFLnet/minecraft/world/damagesource/DamageSource;)Z", at = @At("STORE"), ordinal = 0)
47-
private int modifyFallDamage(int damage) {
48-
LivingFallEvent event = currentFallEvent.get();
49-
float effectiveDamage = damage;
43+
@Inject(method = "calculateFallDamage(FF)I", at = @At("RETURN"), cancellable = true)
44+
private void calculateFallDamage(float f, float g, CallbackInfoReturnable<Integer> cir) {
45+
LivingFallEvent event = balmCurrentFallEvent.get();
5046
if (event != null && event.getFallDamageOverride() != null) {
51-
effectiveDamage = event.getFallDamageOverride();
47+
cir.setReturnValue(event.getFallDamageOverride().intValue());
48+
balmCurrentFallEvent.set(null);
5249
}
53-
return (int) effectiveDamage;
5450
}
5551

5652
@ModifyVariable(method = "heal(F)V", at = @At("HEAD"), argsOnly = true)

fabric/src/main/resources/fabric.mod.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
"depends": {
3737
"fabricloader": ">=0.14.21",
3838
"fabric-api": "*",
39-
"minecraft": ">=1.20",
39+
"minecraft": ">=1.20.2",
4040
"java": ">=17"
4141
},
4242
"suggests": {

forge/src/main/java/net/blay09/mods/balm/forge/network/ForgeBalmNetworking.java

+25-40
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package net.blay09.mods.balm.forge.network;
22

33
import net.blay09.mods.balm.api.Balm;
4-
import net.blay09.mods.balm.api.client.BalmClient;
54
import net.blay09.mods.balm.api.menu.BalmMenuProvider;
65
import net.blay09.mods.balm.api.network.BalmNetworking;
76
import net.blay09.mods.balm.api.network.ClientboundMessageRegistration;
@@ -16,11 +15,10 @@
1615
import net.minecraft.world.MenuProvider;
1716
import net.minecraft.world.entity.Entity;
1817
import net.minecraft.world.entity.player.Player;
18+
import net.minecraftforge.event.network.CustomPayloadEvent;
1919
import net.minecraftforge.network.NetworkDirection;
20-
import net.minecraftforge.network.NetworkEvent;
21-
import net.minecraftforge.network.NetworkHooks;
2220
import net.minecraftforge.network.PacketDistributor;
23-
import net.minecraftforge.network.simple.SimpleChannel;
21+
import net.minecraftforge.network.SimpleChannel;
2422
import org.slf4j.Logger;
2523
import org.slf4j.LoggerFactory;
2624

@@ -37,7 +35,7 @@ public class ForgeBalmNetworking implements BalmNetworking {
3735
private static final Map<ResourceLocation, MessageRegistration<?>> messagesByIdentifier = new ConcurrentHashMap<>();
3836
private static final Map<String, Integer> discriminatorCounter = new ConcurrentHashMap<>();
3937

40-
private static NetworkEvent.Context replyContext;
38+
private static CustomPayloadEvent.Context replyContext;
4139

4240
@Override
4341
public void allowClientOnly(String modId) {
@@ -51,11 +49,11 @@ public void allowServerOnly(String modId) {
5149

5250
@Override
5351
public void openGui(Player player, MenuProvider menuProvider) {
54-
if (player instanceof ServerPlayer) {
52+
if (player instanceof ServerPlayer serverPlayer) {
5553
if (menuProvider instanceof BalmMenuProvider balmMenuProvider) {
56-
NetworkHooks.openScreen((ServerPlayer) player, menuProvider, buf -> balmMenuProvider.writeScreenOpeningData((ServerPlayer) player, buf));
54+
serverPlayer.openMenu(menuProvider, buf -> balmMenuProvider.writeScreenOpeningData((ServerPlayer) player, buf));
5755
} else {
58-
NetworkHooks.openScreen((ServerPlayer) player, menuProvider);
56+
serverPlayer.openMenu(menuProvider);
5957
}
6058
}
6159
}
@@ -80,7 +78,7 @@ public <T> void sendTo(Player player, T message) {
8078
ResourceLocation identifier = messageRegistration.getIdentifier();
8179

8280
SimpleChannel channel = NetworkChannels.get(identifier.getNamespace());
83-
channel.send(PacketDistributor.PLAYER.with(() -> ((ServerPlayer) player)), message);
81+
channel.send(message, PacketDistributor.PLAYER.with((ServerPlayer) player));
8482
}
8583

8684
@Override
@@ -90,7 +88,7 @@ public <T> void sendToTracking(ServerLevel world, BlockPos pos, T message) {
9088
ResourceLocation identifier = messageRegistration.getIdentifier();
9189

9290
SimpleChannel channel = NetworkChannels.get(identifier.getNamespace());
93-
channel.send(PacketDistributor.TRACKING_CHUNK.with(() -> world.getChunkAt(pos)), message);
91+
channel.send(message, PacketDistributor.TRACKING_CHUNK.with(world.getChunkAt(pos)));
9492
}
9593

9694
@Override
@@ -100,7 +98,7 @@ public <T> void sendToTracking(Entity entity, T message) {
10098
ResourceLocation identifier = messageRegistration.getIdentifier();
10199

102100
SimpleChannel channel = NetworkChannels.get(identifier.getNamespace());
103-
channel.send(PacketDistributor.TRACKING_ENTITY.with(() -> entity), message);
101+
channel.send(message, PacketDistributor.TRACKING_ENTITY.with(entity));
104102
}
105103

106104
@Override
@@ -110,7 +108,7 @@ public <T> void sendToAll(MinecraftServer server, T message) {
110108
ResourceLocation identifier = messageRegistration.getIdentifier();
111109

112110
SimpleChannel channel = NetworkChannels.get(identifier.getNamespace());
113-
channel.send(PacketDistributor.ALL.noArg(), message);
111+
channel.send(message, PacketDistributor.ALL.noArg());
114112
}
115113

116114
@Override
@@ -125,7 +123,7 @@ public <T> void sendToServer(T message) {
125123
ResourceLocation identifier = messageRegistration.getIdentifier();
126124

127125
SimpleChannel channel = NetworkChannels.get(identifier.getNamespace());
128-
channel.sendToServer(message);
126+
channel.send(message, PacketDistributor.SERVER.noArg());
129127
}
130128

131129
@SuppressWarnings("unchecked")
@@ -145,18 +143,11 @@ public <T> void registerClientboundPacket(ResourceLocation identifier, Class<T>
145143
messagesByIdentifier.put(identifier, messageRegistration);
146144

147145
SimpleChannel channel = NetworkChannels.get(identifier.getNamespace());
148-
channel.registerMessage(nextDiscriminator(identifier.getNamespace()), clazz, encodeFunc, decodeFunc, (message, contextSupplier) -> {
149-
NetworkEvent.Context context = contextSupplier.get();
150-
if (context.getDirection() != NetworkDirection.PLAY_TO_CLIENT) {
151-
logger.warn("Received {} on incorrect side {}", identifier, context.getDirection());
152-
return;
153-
}
154-
155-
context.enqueueWork(() -> {
156-
handler.accept(BalmClient.getClientPlayer(), message);
157-
});
158-
context.setPacketHandled(true);
159-
});
146+
channel.messageBuilder(clazz, nextDiscriminator(identifier.getNamespace()), NetworkDirection.PLAY_TO_CLIENT)
147+
.decoder(decodeFunc)
148+
.encoder(encodeFunc)
149+
.consumerMainThread((packet, context) -> handler.accept(Balm.getProxy().getClientPlayer(), packet))
150+
.add();
160151
}
161152

162153
@Override
@@ -167,21 +158,15 @@ public <T> void registerServerboundPacket(ResourceLocation identifier, Class<T>
167158
messagesByIdentifier.put(identifier, messageRegistration);
168159

169160
SimpleChannel channel = NetworkChannels.get(identifier.getNamespace());
170-
channel.registerMessage(nextDiscriminator(identifier.getNamespace()), clazz, encodeFunc, decodeFunc, (message, contextSupplier) -> {
171-
NetworkEvent.Context context = contextSupplier.get();
172-
if (context.getDirection() != NetworkDirection.PLAY_TO_SERVER) {
173-
logger.warn("Received {} on incorrect side {}", identifier, context.getDirection());
174-
return;
175-
}
176-
177-
context.enqueueWork(() -> {
178-
replyContext = context;
179-
ServerPlayer player = context.getSender();
180-
handler.accept(player, message);
181-
replyContext = null;
182-
});
183-
context.setPacketHandled(true);
184-
});
161+
channel.messageBuilder(clazz, nextDiscriminator(identifier.getNamespace()), NetworkDirection.PLAY_TO_SERVER)
162+
.decoder(decodeFunc)
163+
.encoder(encodeFunc)
164+
.consumerMainThread((packet, context) -> {
165+
replyContext = context;
166+
handler.accept(context.getSender(), packet);
167+
replyContext = null;
168+
})
169+
.add();
185170
}
186171

187172
private static int nextDiscriminator(String modId) {
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,38 @@
11
package net.blay09.mods.balm.forge.network;
22

3+
import com.google.common.collect.Sets;
34
import net.minecraft.resources.ResourceLocation;
4-
import net.minecraftforge.network.NetworkRegistry;
5-
import net.minecraftforge.network.simple.SimpleChannel;
5+
import net.minecraftforge.network.ChannelBuilder;
6+
import net.minecraftforge.network.SimpleChannel;
67

78
import java.util.Map;
9+
import java.util.Set;
810
import java.util.concurrent.ConcurrentHashMap;
9-
import java.util.function.Predicate;
1011

1112
public class NetworkChannels {
12-
private static final String version = "1.0"; // all mods will just have same version for now until I clean this up
1313
private static final Map<String, SimpleChannel> channels = new ConcurrentHashMap<>();
14-
private static final Map<String, Predicate<String>> acceptedClientVersions = new ConcurrentHashMap<>();
15-
private static final Map<String, Predicate<String>> acceptedServerVersions = new ConcurrentHashMap<>();
14+
private static final Set<String> clientOnlyMods = Sets.newConcurrentHashSet();
15+
private static final Set<String> serverOnlyMods = Sets.newConcurrentHashSet();
1616

1717
public static SimpleChannel get(String modId) {
1818
return channels.computeIfAbsent(modId, key -> {
1919
ResourceLocation channelName = new ResourceLocation(key, "network");
20-
return NetworkRegistry.newSimpleChannel(channelName,
21-
() -> version,
22-
it -> acceptedClientVersions.getOrDefault(modId, NetworkChannels::defaultVersionCheck).test(it),
23-
it -> acceptedServerVersions.getOrDefault(modId, NetworkChannels::defaultVersionCheck).test(it));
20+
ChannelBuilder builder = ChannelBuilder.named(channelName);
21+
if (serverOnlyMods.contains(modId)) {
22+
builder = builder.optionalClient();
23+
}
24+
if (clientOnlyMods.contains(modId)) {
25+
builder = builder.optionalServer();
26+
}
27+
return builder.simpleChannel();
2428
});
2529
}
2630

2731
public static void allowClientOnly(String modId) {
28-
acceptedClientVersions.put(modId, it -> true);
32+
clientOnlyMods.add(modId);
2933
}
3034

3135
public static void allowServerOnly(String modId) {
32-
acceptedServerVersions.put(modId, it -> true);
33-
}
34-
35-
private static boolean defaultVersionCheck(String it) {
36-
return it.equals(version);
36+
serverOnlyMods.add(modId);
3737
}
3838
}

gradle.properties

+7-7
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,19 @@ modrinth_fabric_project_id=MBAkmtvl
1212
modrinth_forge_project_id=MBAkmtvl
1313

1414
# Minecraft
15-
minecraft_version = 1.20.1
16-
minecraft_versions = 1.20,1.20.1
17-
minecraft_version_range=[1.20,1.21)
15+
minecraft_version = 1.20.2
16+
minecraft_versions = 1.20.2
17+
minecraft_version_range=[1.20.2,1.21)
1818
java_version = 17
1919

2020
# Forge
21-
forge_version = 47.1.46
22-
forge_version_range=[46.0.0,)
23-
forge_loader_version_range=[46,)
21+
forge_version = 48.0.1
22+
forge_version_range=[48.0.0,)
23+
forge_loader_version_range=[48,)
2424
forge_mixins=true
2525

2626
# Fabric
27-
fabric_version = 0.88.1+1.20.1
27+
fabric_version = 0.89.0+1.20.2
2828
fabric_loader_version = 0.14.22
2929

3030
# Dependencies
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
package net.blay09.mods.balm.mixin;
22

33
import net.minecraft.client.gui.components.ImageButton;
4+
import net.minecraft.client.gui.components.WidgetSprites;
45
import net.minecraft.resources.ResourceLocation;
56
import org.spongepowered.asm.mixin.Mixin;
67
import org.spongepowered.asm.mixin.gen.Accessor;
78

89
@Mixin(ImageButton.class)
910
public interface ImageButtonAccessor {
1011
@Accessor
11-
ResourceLocation getResourceLocation();
12+
WidgetSprites getSprites();
1213
}

0 commit comments

Comments
 (0)