Skip to content

Commit 15457c8

Browse files
committed
feat: Update to Minecraft 1.20.4
1 parent f8bc6b1 commit 15457c8

File tree

12 files changed

+97
-126
lines changed

12 files changed

+97
-126
lines changed

fabric/src/main/java/net/blay09/mods/balm/fabric/FabricBalmRuntime.java

+7-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import net.blay09.mods.balm.api.BalmHooks;
44
import net.blay09.mods.balm.api.BalmRegistries;
55
import net.blay09.mods.balm.api.BalmRuntime;
6+
import net.blay09.mods.balm.api.EmptyLoadContext;
67
import net.blay09.mods.balm.api.block.BalmBlockEntities;
78
import net.blay09.mods.balm.api.block.BalmBlocks;
89
import net.blay09.mods.balm.api.command.BalmCommands;
@@ -52,7 +53,7 @@
5253
import java.util.concurrent.Executor;
5354
import java.util.function.Consumer;
5455

55-
public class FabricBalmRuntime implements BalmRuntime {
56+
public class FabricBalmRuntime implements BalmRuntime<EmptyLoadContext> {
5657
private final BalmWorldGen worldGen = new FabricBalmWorldGen();
5758
private final BalmBlocks blocks = new FabricBalmBlocks();
5859
private final BalmBlockEntities blockEntities = new FabricBalmBlockEntities();
@@ -188,6 +189,11 @@ public <T> SidedProxy<T> sidedProxy(String commonName, String clientName) {
188189

189190
@Override
190191
public void initialize(String modId, Runnable initializer) {
192+
initialize(modId, EmptyLoadContext.INSTANCE, initializer);
193+
}
194+
195+
@Override
196+
public void initialize(String modId, EmptyLoadContext context, Runnable initializer) {
191197
initializer.run();
192198
}
193199

forge/src/main/java/net/blay09/mods/balm/forge/ForgeBalmRuntime.java

+7-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import net.blay09.mods.balm.api.BalmHooks;
44
import net.blay09.mods.balm.api.BalmRegistries;
55
import net.blay09.mods.balm.api.BalmRuntime;
6+
import net.blay09.mods.balm.api.EmptyLoadContext;
67
import net.blay09.mods.balm.api.block.BalmBlockEntities;
78
import net.blay09.mods.balm.api.block.BalmBlocks;
89
import net.blay09.mods.balm.api.command.BalmCommands;
@@ -51,7 +52,7 @@
5152
import java.util.List;
5253
import java.util.function.Consumer;
5354

54-
public class ForgeBalmRuntime implements BalmRuntime {
55+
public class ForgeBalmRuntime implements BalmRuntime<EmptyLoadContext> {
5556
private final BalmWorldGen worldGen = new ForgeBalmWorldGen();
5657
private final BalmBlocks blocks = new ForgeBalmBlocks();
5758
private final BalmBlockEntities blockEntities = new ForgeBalmBlockEntities();
@@ -173,6 +174,11 @@ public String getModName(String modId) {
173174

174175
@Override
175176
public void initialize(String modId, Runnable initializer) {
177+
initialize(modId, EmptyLoadContext.INSTANCE, initializer);
178+
}
179+
180+
@Override
181+
public void initialize(String modId, EmptyLoadContext context, Runnable initializer) {
176182
((ForgeBalmItems) items).register();
177183
((ForgeBalmEntities) entities).register();
178184
((ForgeBalmWorldGen) worldGen).register();
Original file line numberDiff line numberDiff line change
@@ -1,98 +1,17 @@
11
package net.blay09.mods.balm.api.block.entity;
22

3-
import com.google.common.collect.HashBasedTable;
4-
import com.google.common.collect.Table;
5-
import com.mojang.datafixers.util.Pair;
6-
import net.blay09.mods.balm.api.Balm;
7-
import net.blay09.mods.balm.api.energy.EnergyStorage;
8-
import net.blay09.mods.balm.api.fluid.FluidTank;
9-
import net.blay09.mods.balm.api.provider.BalmProvider;
10-
import net.blay09.mods.balm.api.provider.BalmProviderHolder;
11-
import net.blay09.mods.balm.neoforge.container.BalmInvWrapper;
12-
import net.blay09.mods.balm.neoforge.energy.NeoForgeEnergyStorage;
13-
import net.blay09.mods.balm.neoforge.fluid.NeoForgeFluidTank;
14-
import net.blay09.mods.balm.neoforge.provider.NeoForgeBalmProviders;
153
import net.minecraft.core.BlockPos;
16-
import net.minecraft.core.Direction;
17-
import net.minecraft.world.Container;
184
import net.minecraft.world.level.block.entity.BlockEntity;
195
import net.minecraft.world.level.block.entity.BlockEntityType;
206
import net.minecraft.world.level.block.state.BlockState;
21-
import net.neoforged.neoforge.common.capabilities.Capabilities;
22-
import net.neoforged.neoforge.common.capabilities.Capability;
23-
import net.neoforged.neoforge.common.util.LazyOptional;
24-
import org.jetbrains.annotations.NotNull;
25-
import org.jetbrains.annotations.Nullable;
26-
27-
import java.util.ArrayList;
28-
import java.util.HashMap;
297
import java.util.List;
30-
import java.util.Map;
318

329
public abstract class BalmBlockEntityBase extends BlockEntity {
3310

34-
private final Map<Capability<?>, LazyOptional<?>> capabilities = new HashMap<>();
35-
private final Table<Capability<?>, Direction, LazyOptional<?>> sidedCapabilities = HashBasedTable.create();
36-
private boolean capabilitiesInitialized;
37-
3811
public BalmBlockEntityBase(BlockEntityType<?> blockEntityType, BlockPos blockPos, BlockState blockState) {
3912
super(blockEntityType, blockPos, blockState);
4013
}
4114

42-
private void addCapabilities(BalmProvider<?> provider, Map<Capability<?>, LazyOptional<?>> capabilities) {
43-
NeoForgeBalmProviders forgeProviders = (NeoForgeBalmProviders) Balm.getProviders();
44-
Capability<?> capability = forgeProviders.getCapability(provider.getProviderClass());
45-
capabilities.put(capability, LazyOptional.of(provider::getInstance));
46-
47-
if (provider.getProviderClass() == Container.class) {
48-
capabilities.put(Capabilities.ITEM_HANDLER, LazyOptional.of(() -> new BalmInvWrapper((Container) provider.getInstance())));
49-
} else if (provider.getProviderClass() == FluidTank.class) {
50-
capabilities.put(Capabilities.FLUID_HANDLER, LazyOptional.of(() -> new NeoForgeFluidTank((FluidTank) provider.getInstance())));
51-
} else if (provider.getProviderClass() == EnergyStorage.class) {
52-
capabilities.put(Capabilities.ENERGY, LazyOptional.of(() -> new NeoForgeEnergyStorage((EnergyStorage) provider.getInstance())));
53-
}
54-
}
55-
56-
@SuppressWarnings("unchecked")
57-
public <T> T getProvider(Class<T> clazz) {
58-
NeoForgeBalmProviders forgeProviders = (NeoForgeBalmProviders) Balm.getProviders();
59-
Capability<?> capability = forgeProviders.getCapability(clazz);
60-
return (T) getCapability(capability).resolve().orElse(null);
61-
}
62-
63-
@NotNull
64-
@Override
65-
public <T> LazyOptional<T> getCapability(@NotNull Capability<T> cap, @Nullable Direction side) {
66-
if (!capabilitiesInitialized) {
67-
List<Object> providers = new ArrayList<>();
68-
buildProviders(providers);
69-
70-
for (Object holder : providers) {
71-
BalmProviderHolder providerHolder = (BalmProviderHolder) holder;
72-
for (BalmProvider<?> provider : providerHolder.getProviders()) {
73-
addCapabilities(provider, capabilities);
74-
}
75-
76-
for (Pair<Direction, BalmProvider<?>> pair : providerHolder.getSidedProviders()) {
77-
Direction direction = pair.getFirst();
78-
BalmProvider<?> provider = pair.getSecond();
79-
Map<Capability<?>, LazyOptional<?>> sidedCapabilities = this.sidedCapabilities.column(direction);
80-
addCapabilities(provider, sidedCapabilities);
81-
}
82-
}
83-
capabilitiesInitialized = true;
84-
}
85-
86-
LazyOptional<?> result = null;
87-
if (side != null) {
88-
result = sidedCapabilities.get(cap, side);
89-
}
90-
if (result == null) {
91-
result = capabilities.get(cap);
92-
}
93-
return result != null ? result.cast() : super.getCapability(cap, side);
94-
}
95-
9615
protected abstract void buildProviders(List<Object> providers);
9716

9817
}

neoforge/src/main/java/net/blay09/mods/balm/neoforge/NeoForgeBalm.java

+8-21
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,13 @@
22

33
import net.blay09.mods.balm.api.Balm;
44
import net.blay09.mods.balm.api.config.AbstractBalmConfig;
5-
import net.blay09.mods.balm.api.energy.EnergyStorage;
6-
import net.blay09.mods.balm.api.fluid.FluidTank;
75
import net.blay09.mods.balm.config.ExampleConfig;
86
import net.blay09.mods.balm.neoforge.client.NeoForgeBalmClient;
97
import net.blay09.mods.balm.neoforge.provider.NeoForgeBalmProviders;
108
import net.blay09.mods.balm.neoforge.world.NeoForgeBalmWorldGen;
11-
import net.minecraft.world.Container;
9+
import net.neoforged.bus.api.IEventBus;
1210
import net.neoforged.fml.common.Mod;
13-
import net.neoforged.fml.javafmlmod.FMLJavaModLoadingContext;
14-
import net.neoforged.neoforge.common.capabilities.CapabilityToken;
11+
import net.neoforged.neoforge.capabilities.Capabilities;
1512
import net.neoforged.neoforge.energy.IEnergyStorage;
1613
import net.neoforged.neoforge.fluids.capability.IFluidHandler;
1714
import net.neoforged.neoforge.fluids.capability.IFluidHandlerItem;
@@ -20,28 +17,18 @@
2017
@Mod("balm")
2118
public class NeoForgeBalm {
2219

23-
public NeoForgeBalm() {
20+
public NeoForgeBalm(IEventBus modBus) {
2421
((AbstractBalmConfig) Balm.getConfig()).initialize();
2522
ExampleConfig.initialize();
2623

2724
NeoForgeBalmWorldGen.initializeBalmBiomeModifiers();
28-
FMLJavaModLoadingContext.get().getModEventBus().addListener(NeoForgeBalmClient::onInitializeClient);
25+
modBus.addListener(NeoForgeBalmClient::onInitializeClient);
2926

3027
NeoForgeBalmProviders providers = (NeoForgeBalmProviders) Balm.getProviders();
31-
providers.register(IItemHandler.class, new CapabilityToken<>() {
32-
});
33-
providers.register(IFluidHandler.class, new CapabilityToken<>() {
34-
});
35-
providers.register(IFluidHandlerItem.class, new CapabilityToken<>() {
36-
});
37-
providers.register(IEnergyStorage.class, new CapabilityToken<>() {
38-
});
39-
providers.register(Container.class, new CapabilityToken<>() {
40-
});
41-
providers.register(FluidTank.class, new CapabilityToken<>() {
42-
});
43-
providers.register(EnergyStorage.class, new CapabilityToken<>() {
44-
});
28+
providers.registerBlockProvider(IItemHandler.class, Capabilities.ItemHandler.BLOCK);
29+
providers.registerBlockProvider(IFluidHandler.class, Capabilities.FluidHandler.BLOCK);
30+
providers.registerItemProvider(IFluidHandlerItem.class, Capabilities.FluidHandler.ITEM);
31+
providers.registerBlockProvider(IEnergyStorage.class, Capabilities.EnergyStorage.BLOCK);
4532
}
4633

4734
}

neoforge/src/main/java/net/blay09/mods/balm/neoforge/NeoForgeBalmHooks.java

+7-1
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,15 @@
1616
import net.minecraft.world.item.BoneMealItem;
1717
import net.minecraft.world.item.DyeColor;
1818
import net.minecraft.world.item.ItemStack;
19+
import net.minecraft.world.item.Items;
1920
import net.minecraft.world.item.crafting.RecipeType;
2021
import net.minecraft.world.level.Level;
2122
import net.minecraft.world.level.block.state.BlockState;
2223
import net.minecraft.world.level.levelgen.feature.ConfiguredFeature;
2324
import net.minecraft.world.phys.BlockHitResult;
2425
import net.neoforged.bus.api.Event;
2526
import net.neoforged.neoforge.common.CommonHooks;
27+
import net.neoforged.neoforge.common.EffectCures;
2628
import net.neoforged.neoforge.common.ToolActions;
2729
import net.neoforged.neoforge.common.util.FakePlayer;
2830
import net.neoforged.neoforge.event.EventHooks;
@@ -67,7 +69,11 @@ public CompoundTag getPersistentData(Entity entity) {
6769

6870
@Override
6971
public void curePotionEffects(LivingEntity entity, ItemStack curativeItem) {
70-
entity.curePotionEffects(curativeItem);
72+
if (curativeItem.getItem() == Items.MILK_BUCKET) {
73+
entity.removeEffectsCuredBy(EffectCures.MILK);
74+
} else if (curativeItem.getItem() == Items.HONEY_BOTTLE) {
75+
entity.removeEffectsCuredBy(EffectCures.HONEY);
76+
}
7177
}
7278

7379
@Override

neoforge/src/main/java/net/blay09/mods/balm/neoforge/NeoForgeBalmRuntime.java

+9-6
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@
4040
import net.minecraft.server.packs.resources.PreparableReloadListener;
4141
import net.minecraft.server.packs.resources.ResourceManager;
4242
import net.minecraft.server.packs.resources.ResourceManagerReloadListener;
43-
import net.neoforged.bus.api.IEventBus;
4443
import net.neoforged.fml.ModList;
4544
import net.neoforged.fml.event.lifecycle.FMLLoadCompleteEvent;
4645
import net.neoforged.fml.javafmlmod.FMLJavaModLoadingContext;
@@ -53,7 +52,7 @@
5352
import java.util.List;
5453
import java.util.function.Consumer;
5554

56-
public class NeoForgeBalmRuntime implements BalmRuntime {
55+
public class NeoForgeBalmRuntime implements BalmRuntime<NeoForgeLoadContext> {
5756
private final BalmWorldGen worldGen = new NeoForgeBalmWorldGen();
5857
private final BalmBlocks blocks = new NeoForgeBalmBlocks();
5958
private final BalmBlockEntities blockEntities = new NeoForgeBalmBlockEntities();
@@ -175,16 +174,20 @@ public String getModName(String modId) {
175174

176175
@Override
177176
public void initialize(String modId, Runnable initializer) {
177+
initialize(modId, new NeoForgeLoadContext(FMLJavaModLoadingContext.get().getModEventBus()), initializer);
178+
}
179+
180+
@Override
181+
public void initialize(String modId, NeoForgeLoadContext context, Runnable initializer) {
178182
((NeoForgeBalmItems) items).register();
179183
((NeoForgeBalmEntities) entities).register();
180-
((NeoForgeBalmWorldGen) worldGen).register();
181184
((NeoForgeBalmStats) stats).register();
182185

183186
initializer.run();
184187

185-
IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus();
186-
modEventBus.addListener((FMLLoadCompleteEvent event) -> initializeAddons());
187-
DeferredRegisters.register(modId, modEventBus);
188+
final var modBus = context.modBus();
189+
modBus.addListener((FMLLoadCompleteEvent event) -> initializeAddons());
190+
DeferredRegisters.register(modId, modBus);
188191
}
189192

190193
@Override
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package net.blay09.mods.balm.neoforge;
2+
3+
import net.blay09.mods.balm.api.BalmRuntimeLoadContext;
4+
import net.neoforged.bus.api.IEventBus;
5+
6+
public record NeoForgeLoadContext(IEventBus modBus) implements BalmRuntimeLoadContext {
7+
}

neoforge/src/main/java/net/blay09/mods/balm/neoforge/provider/NeoForgeBalmProviders.java

+34-12
Original file line numberDiff line numberDiff line change
@@ -4,41 +4,63 @@
44
import net.minecraft.core.Direction;
55
import net.minecraft.world.entity.Entity;
66
import net.minecraft.world.level.block.entity.BlockEntity;
7-
import net.neoforged.neoforge.common.capabilities.Capability;
8-
import net.neoforged.neoforge.common.capabilities.CapabilityManager;
9-
import net.neoforged.neoforge.common.capabilities.CapabilityToken;
7+
import net.neoforged.neoforge.capabilities.BaseCapability;
8+
import net.neoforged.neoforge.capabilities.BlockCapability;
9+
import net.neoforged.neoforge.capabilities.EntityCapability;
10+
import net.neoforged.neoforge.capabilities.ItemCapability;
1011
import org.jetbrains.annotations.Nullable;
1112

1213
import java.util.HashMap;
1314
import java.util.Map;
1415

1516
public class NeoForgeBalmProviders implements BalmProviders {
1617

17-
private final Map<Class<?>, Capability<?>> capabilities = new HashMap<>();
18+
private final Map<Class<?>, BaseCapability<?, ?>> blockCapabilities = new HashMap<>();
19+
private final Map<Class<?>, ItemCapability<?, ?>> itemCapabilities = new HashMap<>();
20+
private final Map<Class<?>, EntityCapability<?, ?>> entityCapabilities = new HashMap<>();
1821

1922
@Override
2023
public <T> T getProvider(BlockEntity blockEntity, Class<T> clazz) {
2124
return getProvider(blockEntity, null, clazz);
2225
}
2326

2427
@Override
28+
@SuppressWarnings("unchecked")
2529
public <T> T getProvider(BlockEntity blockEntity, @Nullable Direction direction, Class<T> clazz) {
26-
Capability<T> capability = getCapability(clazz);
27-
return blockEntity.getCapability(capability, direction).resolve().orElse(null);
30+
final var capability = (BlockCapability<T, Direction>) getBlockCapability(clazz);
31+
return blockEntity.getLevel().getCapability(capability, blockEntity.getBlockPos(), blockEntity.getBlockState(), blockEntity, direction);
2832
}
2933

3034
@Override
3135
public <T> T getProvider(Entity entity, Class<T> clazz) {
32-
Capability<T> capability = getCapability(clazz);
33-
return entity.getCapability(capability).resolve().orElse(null);
36+
final var capability = getEntityCapability(clazz);
37+
return entity.getCapability(capability, null);
38+
}
39+
40+
public <T> void registerBlockProvider(Class<T> clazz, BlockCapability<T, ?> capability) {
41+
blockCapabilities.put(clazz, capability);
3442
}
3543

36-
public <T> void register(Class<T> clazz, CapabilityToken<T> token) {
37-
capabilities.put(clazz, CapabilityManager.get(token));
44+
public <T> void registerItemProvider(Class<T> clazz, ItemCapability<T, ?> capability) {
45+
itemCapabilities.put(clazz, capability);
46+
}
47+
48+
public <T> void registerEntityProvider(Class<T> clazz, EntityCapability<T, ?> capability) {
49+
entityCapabilities.put(clazz, capability);
50+
}
51+
52+
@SuppressWarnings("unchecked")
53+
public <T> BlockCapability<T, ?> getBlockCapability(Class<T> clazz) {
54+
return (BlockCapability<T, ?>) blockCapabilities.get(clazz);
55+
}
56+
57+
@SuppressWarnings("unchecked")
58+
public <T> ItemCapability<T, ?> getItemCapability(Class<T> clazz) {
59+
return (ItemCapability<T, ?>) itemCapabilities.get(clazz);
3860
}
3961

4062
@SuppressWarnings("unchecked")
41-
public <T> Capability<T> getCapability(Class<T> clazz) {
42-
return (Capability<T>) capabilities.get(clazz);
63+
public <T> EntityCapability<T, ?> getEntityCapability(Class<T> clazz) {
64+
return (EntityCapability<T, ?>) entityCapabilities.get(clazz);
4365
}
4466
}

neoforge/src/main/resources/META-INF/mods.toml

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,13 @@ config = "${mod_id}.mixins.json"
1717
config = "${mod_id}.neoforge.mixins.json"
1818
[[dependencies.${mod_id}]]
1919
modId="neoforge"
20-
mandatory=true
20+
type="required"
2121
versionRange="${neoforge_version_range}"
2222
ordering="NONE"
2323
side="BOTH"
2424
[[dependencies.${mod_id}]]
2525
modId="minecraft"
26-
mandatory=true
26+
type="required"
2727
versionRange="${minecraft_version_range}"
2828
ordering="NONE"
2929
side="BOTH"

0 commit comments

Comments
 (0)