Skip to content

Commit 6579fd4

Browse files
committed
Update to MC 1.21.10
1 parent 247e23a commit 6579fd4

9 files changed

Lines changed: 93 additions & 134 deletions

File tree

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,3 +30,6 @@ extra-mods
3030
# Ignore files specific to dev environments
3131
secrets.properties
3232
changelog.txt
33+
34+
loader-neoforge/.cache
35+
loader-neoforge/config

build.gradle

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
plugins {
2-
id 'net.darkhax.curseforgegradle' version '1.1.26' apply false
2+
id 'net.darkhax.curseforgegradle' version '1.1.28' apply false
33
id 'com.diffplug.spotless' version '6.25.0' apply false
44
id 'com.modrinth.minotaur' version '2.+' apply false
55

6-
id 'fabric-loom' version '1.10-SNAPSHOT' apply false
7-
id 'net.neoforged.moddev' version '2.0.95' apply false
8-
id 'net.neoforged.gradle.userdev' version '7.0.185' apply false
9-
id 'net.minecraftforge.gradle' version '[6.0.36,6.2)' apply false
6+
id 'fabric-loom' version '1.13-SNAPSHOT' apply false
7+
id 'net.neoforged.moddev' version '2.0.119' apply false
8+
id 'net.minecraftforge.gradle' version '[6.0.46,6.2)' apply false
109
}
1110

buildSrc/src/main/groovy/multiloader-common.gradle

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -274,16 +274,6 @@ tasks.withType(JavaCompile).configureEach {
274274
options.encoding = 'UTF-8' // Use the UTF-8 charset for Java compilation
275275
}
276276

277-
// The following is required to fix running unit tests during build phase
278-
tasks.configureEach { task ->
279-
if (task.name.startsWith("test")) {
280-
task.enabled = true
281-
}
282-
if (task.name.startsWith("testJunit")) {
283-
task.enabled = false
284-
}
285-
}
286-
287277
javadoc {
288278
// prevent java 8's strict doclint for javadocs from failing builds
289279
options.addStringOption('Xdoclint:accessibility,html,reference,syntax', '-quiet')

buildSrc/src/main/groovy/multiloader-loader-neoforge.gradle

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

33
plugins {
44
id 'multiloader-loader'
5-
id 'net.neoforged.gradle.userdev'
5+
id 'net.neoforged.moddev'
66
}
77

88
// All jar files from this folder will be added automatically as runtime mod dependencies (inspired by AE2's build.gradle)
@@ -16,10 +16,13 @@ repositories {
1616
}
1717

1818
dependencies {
19-
implementation "net.neoforged:neoforge:${neoforge_version}"
20-
21-
testImplementation "junit:junit:4.12"
22-
testImplementation "org.mockito:mockito-core:1.+"
19+
testImplementation 'org.junit.jupiter:junit-jupiter:5.7.1'
20+
testImplementation 'org.junit.jupiter:junit-jupiter-params:5.7.1'
21+
testImplementation 'org.junit.platform:junit-platform-suite-api:1.14.1'
22+
testImplementation 'org.hamcrest:hamcrest:2.1'
23+
testImplementation "org.mockito:mockito-core:2.+"
24+
testRuntimeOnly 'org.junit.platform:junit-platform-suite-engine'
25+
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
2326

2427
// Locally sourced extra mods for runtime (i.e. testing)
2528
for (extraModJar in fileTree(dir: extraModsDir, include: '*.jar')) {
@@ -34,45 +37,45 @@ dependencies {
3437

3538
sourceSets.main.resources { srcDir 'src/generated/resources' }
3639

37-
minecraft {
38-
// Automatically enable neoforge AccessTransformers if the file exists
39-
def at = project(':loader-common').file('src/main/resources/META-INF/accesstransformer.cfg')
40-
if (at.exists()) {
41-
accessTransformers {
42-
file(at.absolutePath)
43-
}
44-
}
45-
}
40+
neoForge {
41+
version = "${neoforge_version}"
4642

47-
subsystems {
4843
parchment {
49-
minecraftVersion = "${parchment_minecraft_version}"
5044
mappingsVersion = "${parchment_version}"
51-
}
52-
}
53-
54-
runs {
55-
configureEach {
56-
systemProperty 'neoforge.logging.markers', 'REGISTRIES'
57-
systemProperty 'neoforge.logging.console.level', 'debug'
58-
modSource project.sourceSets.main
45+
minecraftVersion = "${parchment_minecraft_version}"
5946
}
6047

61-
client {
62-
systemProperty 'neoforge.enabledGameTestNamespaces', "cyclopscore,${mod_id}"
48+
// Automatically enable neoforge AccessTransformers if the file exists
49+
def at = project(':loader-common').file('src/main/resources/META-INF/accesstransformer.cfg')
50+
if (at.exists()) {
51+
accessTransformers = [ at.absolutePath ]
6352
}
6453

65-
server {
66-
systemProperty 'neoforge.enabledGameTestNamespaces', "cyclopscore,${mod_id}"
67-
argument '--nogui'
68-
}
54+
// TODO: enable this once the Forge ATs change format
55+
// validateAccessTransformers = true
6956

70-
gameTestServer {
71-
systemProperty 'neoforge.enabledGameTestNamespaces', "cyclopscore,${mod_id}"
57+
runs {
58+
client {
59+
client()
60+
}
61+
server {
62+
server()
63+
programArgument '--nogui'
64+
}
65+
gameTestServer {
66+
type = "gameTestServer"
67+
}
68+
configureEach {
69+
systemProperty 'forge.logging.markers', 'REGISTRIES'
70+
logLevel = org.slf4j.event.Level.DEBUG
71+
systemProperty 'neoforge.enabledGameTestNamespaces', "cyclopscore,${mod_id}"
72+
}
7273
}
7374

74-
clientData {
75-
arguments.addAll '--mod', mod_id, '--all', '--output', file('src/generated/resources/').getAbsolutePath(), '--existing', file('src/main/resources/').getAbsolutePath()
75+
mods {
76+
"${mod_id}" {
77+
sourceSet(sourceSets.main)
78+
}
7679
}
7780
}
7881

gradle.properties

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ group=org.cyclops.capabilityproxy
44
java_version=21
55

66
# Common
7-
minecraft_version=1.21.8
7+
minecraft_version=1.21.10
88
mod_name=CapabilityProxy
99
mod_author=rubensworks (aka kroeser)
1010
mod_id=capabilityproxy
@@ -14,29 +14,29 @@ issue_tracker_url=https://github.com/CyclopsMC/CapabilityProxy/issues
1414
display_url=https://www.curseforge.com/minecraft/mc-mods/capabilityproxy
1515
description=Access block capabilities from multiple sides.
1616
fingerprint=bd0353b3e8a2810d60dd584e256e364bc3bedd44
17-
neo_form_version=1.21.7-20250630.141722
18-
parchment_version=2025.06.15
19-
parchment_minecraft_version=1.21.5
17+
neo_form_version=1.21.10-20251010.172816
18+
parchment_version=2025.10.12
19+
parchment_minecraft_version=1.21.10
2020
curseforge_project_id=266479
2121
modrinth_project_id=3mPgwv8n
2222

2323
# Fabric
24-
fabric_version=0.130.0+1.21.8
25-
fabric_loader_version=0.16.14
24+
fabric_version=0.138.3+1.21.10
25+
fabric_loader_version=0.18.1
2626
# Dependencies
27-
fabric_forgeconfigapiport_version=21.8.0
27+
fabric_forgeconfigapiport_version=21.10.1
2828
# https://maven.fabricmc.net/teamreborn/energy/
2929
fabric_teamrebornenergy_version=4.2.0
3030
# https://maven.fabricmc.net/TechReborn/
31-
fabric_techreborn_version=TechReborn-1.21.8:5.14.2
31+
fabric_techreborn_version=TechReborn-1.21.10:5.15.0
3232

3333
# NeoForge
34-
neoforge_version=21.8.20
34+
neoforge_version=21.10.53-beta
3535
neoforge_loader_version_range=[4,)
3636
neoforge_update_json_url=https://raw.githubusercontent.com/CyclopsMC/Versions/master/neoforge_update/capabilityproxy.json
3737

3838
# Forge
39-
forge_version=58.0.1
39+
forge_version=60.1.0
4040
forge_loader_version_range=[2,)
4141
forge_update_json_url=https://raw.githubusercontent.com/CyclopsMC/Versions/master/forge_update/capabilityproxy.json
4242

@@ -46,4 +46,4 @@ org.gradle.daemon=false
4646
org.gradle.caching=true
4747

4848
# Common dependencies
49-
cyclopscore_version=1.25.5-793
49+
cyclopscore_version=1.25.5-855

loader-common/src/main/java/org/cyclops/capabilityproxy/block/BlockCapabilityProxy.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ protected InteractionResult useWithoutItem(BlockState blockState, Level level, B
9393
@Override
9494
public void neighborChanged(BlockState state, Level world, BlockPos pos, Block neighbourBlock, @Nullable Orientation orientation, boolean isMoving) {
9595
super.neighborChanged(state, world, pos, neighbourBlock, orientation, isMoving);
96-
if (!world.isClientSide) {
96+
if (!world.isClientSide()) {
9797
Direction facing = state.getValue(BlockCapabilityProxy.FACING);
9898
boolean inactive = state.getValue(BlockCapabilityProxy.INACTIVE);
9999
if (inactive != (world.getBlockEntity(pos.relative(facing)) == null)) {

loader-common/src/main/java/org/cyclops/capabilityproxy/client/render/RenderTileRangedCapabilityProxy.java

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,34 @@
11
package org.cyclops.capabilityproxy.client.render;
22

33
import com.mojang.blaze3d.vertex.PoseStack;
4-
import com.mojang.blaze3d.vertex.VertexConsumer;
54
import net.minecraft.client.Minecraft;
6-
import net.minecraft.client.renderer.MultiBufferSource;
75
import net.minecraft.client.renderer.RenderPipelines;
86
import net.minecraft.client.renderer.RenderStateShard;
97
import net.minecraft.client.renderer.RenderType;
8+
import net.minecraft.client.renderer.SubmitNodeCollector;
109
import net.minecraft.client.renderer.blockentity.BlockEntityRenderer;
1110
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
11+
import net.minecraft.client.renderer.blockentity.state.BlockEntityRenderState;
12+
import net.minecraft.client.renderer.feature.ModelFeatureRenderer;
13+
import net.minecraft.client.renderer.state.CameraRenderState;
1214
import net.minecraft.core.BlockPos;
15+
import net.minecraft.core.Direction;
1316
import net.minecraft.world.InteractionHand;
1417
import net.minecraft.world.entity.player.Player;
1518
import net.minecraft.world.phys.Vec3;
1619
import org.cyclops.capabilityproxy.Reference;
1720
import org.cyclops.capabilityproxy.RegistryEntries;
1821
import org.cyclops.capabilityproxy.block.BlockRangedCapabilityProxyConfig;
1922
import org.cyclops.capabilityproxy.blockentity.BlockEntityCapabilityProxyCommon;
23+
import org.jetbrains.annotations.Nullable;
2024

2125
import java.util.OptionalDouble;
2226

2327
/**
2428
* Renders an overlay showing the target of ranged proxies when a ranged proxy is held in hand.
2529
* @author rubensworks
2630
*/
27-
public class RenderTileRangedCapabilityProxy implements BlockEntityRenderer<BlockEntityCapabilityProxyCommon> {
31+
public class RenderTileRangedCapabilityProxy implements BlockEntityRenderer<BlockEntityCapabilityProxyCommon, RenderTileRangedCapabilityProxy.RenderState> {
2832

2933
public static final RenderType RENDER_TYPE_LINE = RenderType.create(Reference.MOD_ID + "line",
3034
128,
@@ -40,7 +44,18 @@ public RenderTileRangedCapabilityProxy(BlockEntityRendererProvider.Context conte
4044
}
4145

4246
@Override
43-
public void render(BlockEntityCapabilityProxyCommon tile, float partialTicks, PoseStack matrixStack, MultiBufferSource buffer, int combinedLight, int combinedOverlay, Vec3 cameraPos) {
47+
public RenderState createRenderState() {
48+
return new RenderState();
49+
}
50+
51+
@Override
52+
public void extractRenderState(BlockEntityCapabilityProxyCommon blockEntity, RenderState renderState, float partialTick, Vec3 cameraPosition, @Nullable ModelFeatureRenderer.CrumblingOverlay breakProgress) {
53+
BlockEntityRenderer.super.extractRenderState(blockEntity, renderState, partialTick, cameraPosition, breakProgress);
54+
renderState.facing = blockEntity.getFacing();
55+
}
56+
57+
@Override
58+
public void submit(RenderState renderState, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, CameraRenderState cameraRenderState) {
4459
Player player = Minecraft.getInstance().player;
4560
if (player.getItemInHand(InteractionHand.MAIN_HAND).getItem() == RegistryEntries.ITEM_RANGED_CAPABILITY_PROXY.value()
4661
|| player.getItemInHand(InteractionHand.OFF_HAND).getItem() == RegistryEntries.ITEM_RANGED_CAPABILITY_PROXY.value()) {
@@ -53,22 +68,27 @@ public void render(BlockEntityCapabilityProxyCommon tile, float partialTicks, Po
5368
float y = 0.5F;
5469
float z = 0.5F;
5570

56-
BlockPos target = new BlockPos(0, 0, 0).relative(tile.getFacing(), BlockRangedCapabilityProxyConfig.range);
71+
BlockPos target = new BlockPos(0, 0, 0).relative(renderState.facing, BlockRangedCapabilityProxyConfig.range);
5772
float minX = x;
5873
float minY = y;
5974
float minZ = z;
6075
float maxX = x + target.getX();
6176
float maxY = y + target.getY();
6277
float maxZ = z + target.getZ();
6378

64-
VertexConsumer vb = buffer.getBuffer(RENDER_TYPE_LINE);
65-
vb.addVertex(matrixStack.last().pose(), minX, minY, minZ).setColor(r, g, b, a).setNormal(0.0F, 0.0F, 0.0F);
66-
vb.addVertex(matrixStack.last().pose(), maxX, maxY, maxZ).setColor(r, g, b, a).setNormal(0.0F, 0.0F, 0.0F);;
79+
submitNodeCollector.submitCustomGeometry(poseStack, RENDER_TYPE_LINE, (pose, vertexConsumer) -> {
80+
vertexConsumer.addVertex(pose, minX, minY, minZ).setColor(r, g, b, a).setNormal(0.0F, 0.0F, 0.0F);
81+
vertexConsumer.addVertex(pose, maxX, maxY, maxZ).setColor(r, g, b, a).setNormal(0.0F, 0.0F, 0.0F);;
82+
});
6783
}
6884
}
6985

7086
@Override
7187
public boolean shouldRenderOffScreen() {
7288
return true;
7389
}
90+
91+
public static class RenderState extends BlockEntityRenderState {
92+
public Direction facing = Direction.NORTH;
93+
}
7494
}

loader-neoforge/src/main/java/org/cyclops/capabilityproxy/blockentity/BlockEntityItemCapabilityProxyNeoForge.java

Lines changed: 8 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,11 @@
77
import net.neoforged.neoforge.capabilities.BlockCapability;
88
import net.neoforged.neoforge.capabilities.Capabilities;
99
import net.neoforged.neoforge.capabilities.ItemCapability;
10-
import net.neoforged.neoforge.fluids.FluidStack;
11-
import net.neoforged.neoforge.fluids.capability.IFluidHandlerItem;
12-
import net.neoforged.neoforge.items.wrapper.InvWrapper;
13-
import org.cyclops.cyclopscore.fluid.FluidHandlerWrapper;
10+
import net.neoforged.neoforge.transfer.ResourceHandler;
11+
import net.neoforged.neoforge.transfer.access.ItemAccess;
12+
import net.neoforged.neoforge.transfer.item.ItemResource;
13+
import net.neoforged.neoforge.transfer.item.VanillaContainerWrapper;
1414

15-
import javax.annotation.Nonnull;
1615
import javax.annotation.Nullable;
1716
import java.util.Map;
1817

@@ -35,77 +34,21 @@ protected void onInventoryChanged() {
3534
}
3635

3736
public <T, C1, C2> T getCapability(BlockCapability<T, C1> blockCapability, C1 context) {
38-
if (context instanceof Direction && context == getFacing() && blockCapability == Capabilities.ItemHandler.BLOCK) {
39-
return (T) new InvWrapper(getInventory());
37+
ResourceHandler<ItemResource> inventoryHandler = VanillaContainerWrapper.of(getInventory());
38+
if (context instanceof Direction && context == getFacing() && blockCapability == Capabilities.Item.BLOCK) {
39+
return (T) inventoryHandler;
4040
}
4141

4242
ItemStack itemStack = getContents();
4343
ItemCapability<T, C2> itemCapability = blockCapabilityToItemCapability(blockCapability);
4444
if (itemCapability == null) {
4545
return null;
4646
}
47-
T cap = itemStack.getCapability(itemCapability, itemCapability.contextClass() == Direction.class ? (C2) getFacing().getOpposite() : null);
48-
49-
// Modify fluid capability instance so that the container is always updated into this tile after modifications
50-
if (cap instanceof IFluidHandlerItem fluidHandlerItem) {
51-
cap = (T) new FluidHandlerWrapperItem(fluidHandlerItem, this);
52-
}
53-
return cap;
47+
return itemStack.getCapability(itemCapability, itemCapability.contextClass() == ItemAccess.class ? (C2) ItemAccess.forHandlerIndexStrict(inventoryHandler, 0) : null);
5448
}
5549

5650
@Nullable
5751
public static <T, C1, C2> ItemCapability<T, C2> blockCapabilityToItemCapability(BlockCapability<T, C1> capability) {
5852
return (ItemCapability<T, C2>) BLOCK_TO_ITEM_CAPABILITIES.get(capability);
5953
}
60-
61-
public static class FluidHandlerWrapperItem extends FluidHandlerWrapper implements IFluidHandlerItem {
62-
63-
private final IFluidHandlerItem fluidHandler;
64-
private final BlockEntityItemCapabilityProxyNeoForge tile;
65-
66-
public FluidHandlerWrapperItem(IFluidHandlerItem fluidHandler, BlockEntityItemCapabilityProxyNeoForge tile) {
67-
super(fluidHandler);
68-
this.fluidHandler = fluidHandler;
69-
this.tile = tile;
70-
}
71-
72-
protected void updateContainerSlot() {
73-
tile.getInventory().setItem(0, getContainer());
74-
}
75-
76-
@Override
77-
public int fill(FluidStack resource, FluidAction action) {
78-
int ret = super.fill(resource, action);
79-
if (action.execute()) {
80-
updateContainerSlot();
81-
}
82-
return ret;
83-
}
84-
85-
@Nonnull
86-
@Override
87-
public FluidStack drain(int maxDrain, FluidAction action) {
88-
FluidStack ret = super.drain(maxDrain, action);
89-
if (action.execute()) {
90-
updateContainerSlot();
91-
}
92-
return ret;
93-
}
94-
95-
@Nonnull
96-
@Override
97-
public FluidStack drain(FluidStack resource, FluidAction action) {
98-
FluidStack ret = super.drain(resource, action);
99-
if (action.execute()) {
100-
updateContainerSlot();
101-
}
102-
return ret;
103-
}
104-
105-
@Nonnull
106-
@Override
107-
public ItemStack getContainer() {
108-
return this.fluidHandler.getContainer();
109-
}
110-
}
11154
}

0 commit comments

Comments
 (0)