Skip to content

Commit 620c866

Browse files
committed
Update to MC 1.21.10
1 parent 48a89bf commit 620c866

27 files changed

Lines changed: 274 additions & 273 deletions

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,6 @@ keystore.jks
2727
secrets.properties
2828
build_number.properties
2929
changelog.txt
30+
31+
.cache
32+
config

build.gradle

Lines changed: 45 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
plugins {
2-
id 'net.neoforged.gradle.userdev' version '7.0.185'
3-
id 'net.darkhax.curseforgegradle' version '1.1.26'
2+
id 'net.neoforged.moddev' version '2.0.119'
3+
id 'net.darkhax.curseforgegradle' version '1.1.28'
44
id 'com.github.kt3k.coveralls' version '2.12.0'
55
id 'com.diffplug.spotless' version '6.25.0'
66
id 'com.github.johnrengelman.shadow' version '8.1.1'
@@ -14,7 +14,6 @@ apply plugin: 'jacoco'
1414
// All jar files from this folder will be added automatically as runtime mod dependencies (inspired by AE2's build.gradle)
1515
def extraModsDir = "extra-mods"
1616

17-
import net.neoforged.gradle.common.tasks.PotentiallySignJar
1817
import net.darkhax.curseforgegradle.Constants
1918
import net.darkhax.curseforgegradle.TaskPublishCurseForge
2019

@@ -121,8 +120,6 @@ repositories {
121120
}
122121

123122
dependencies {
124-
implementation "net.neoforged:neoforge:${project.neoforge_version}"
125-
126123
// Add something like 'cyclopscore_version_local=0.1.0-DEV' to your secrets.properties if you want to use a custom local CyclopsCore version.
127124
if(secrets.cyclopscore_version_local) {
128125
implementation "org.cyclops.cyclopscore:cyclopscore-${project.minecraft_version}-neoforge:${secrets.cyclopscore_version_local}:deobf"
@@ -151,15 +148,16 @@ dependencies {
151148
}
152149

153150
// Add something like 'integratedterminalscompat_version_local=0.1.0-DEV' to your secrets.properties if you want to use a custom local Integrated Tunnels Compat version.
154-
if(secrets.integratedterminalscompat_version_local) {
155-
shadow("org.cyclops.integratedterminalscompat:integratedterminalscompat-${project.minecraft_version}-neoforge:${secrets.integratedterminalscompat_version_local}") {
156-
transitive = false
157-
}
158-
} else {
159-
shadow("org.cyclops.integratedterminalscompat:integratedterminalscompat-${project.minecraft_version}-neoforge:${project.integratedterminalscompat_version}") {
160-
transitive = false
161-
}
162-
}
151+
// TODO: restore
152+
// if(secrets.integratedterminalscompat_version_local) {
153+
// shadow("org.cyclops.integratedterminalscompat:integratedterminalscompat-${project.minecraft_version}-neoforge:${secrets.integratedterminalscompat_version_local}") {
154+
// transitive = false
155+
// }
156+
// } else {
157+
// shadow("org.cyclops.integratedterminalscompat:integratedterminalscompat-${project.minecraft_version}-neoforge:${project.integratedterminalscompat_version}") {
158+
// transitive = false
159+
// }
160+
// }
163161

164162
if(secrets.commoncapabilities_version_local) {
165163
implementation ("org.cyclops.commoncapabilities:commoncapabilities-${project.minecraft_version}-neoforge:${secrets.commoncapabilities_version_local}:deobf") {
@@ -176,8 +174,6 @@ dependencies {
176174
transitive = false
177175
}
178176

179-
testImplementation "junit:junit:4.12"
180-
181177
// Locally sourced extra mods for runtime (i.e. testing)
182178
for (extraModJar in fileTree(dir: extraModsDir, include: '*.jar')) {
183179
def basename = extraModJar.name.substring(0, extraModJar.name.length() - ".jar".length())
@@ -189,46 +185,44 @@ dependencies {
189185
}
190186
}
191187

192-
minecraft {
193-
accessTransformers {
194-
file('src/main/resources/META-INF/accesstransformer.cfg')
195-
}
196-
}
188+
neoForge {
189+
version = "${neoforge_version}"
197190

198-
subsystems {
199191
parchment {
200-
minecraftVersion = "${project.parchment_minecraft_version}"
201-
mappingsVersion = "${project.parchment_version}"
192+
mappingsVersion = "${parchment_version}"
193+
minecraftVersion = "${parchment_minecraft_version}"
202194
}
203-
}
204-
205-
runs {
206-
configureEach {
207-
systemProperty 'forge.logging.markers', 'REGISTRIES'
208-
systemProperty 'forge.logging.console.level', 'debug'
209-
systemProperty 'forge.logging.console.level', 'debug'
210-
modSource project.sourceSets.main
211195

212-
dependencies {
213-
runtime project.configurations.modLib
214-
}
215-
}
216-
217-
client {
218-
systemProperty 'neoforge.enabledGameTestNamespaces', "cyclopscore,${mod_id}"
196+
// Automatically enable neoforge AccessTransformers if the file exists
197+
def at = file('src/main/resources/META-INF/accesstransformer.cfg')
198+
if (at.exists()) {
199+
accessTransformers = [ at.absolutePath ]
219200
}
220201

221-
server {
222-
systemProperty 'neoforge.enabledGameTestNamespaces', "cyclopscore,${mod_id}"
223-
argument '--nogui'
224-
}
202+
validateAccessTransformers = true
225203

226-
gameTestServer {
227-
systemProperty 'neoforge.enabledGameTestNamespaces', "cyclopscore,${mod_id}"
204+
runs {
205+
client {
206+
client()
207+
}
208+
server {
209+
server()
210+
programArgument '--nogui'
211+
}
212+
gameTestServer {
213+
type = "gameTestServer"
214+
}
215+
configureEach {
216+
systemProperty 'forge.logging.markers', 'REGISTRIES'
217+
logLevel = org.slf4j.event.Level.DEBUG
218+
systemProperty 'neoforge.enabledGameTestNamespaces', "cyclopscore,${mod_id}"
219+
}
228220
}
229221

230-
clientData {
231-
arguments.addAll '--mod', project.mod_id, '--all', '--output', file('src/generated/resources/').getAbsolutePath(), '--existing', file('src/main/resources/').getAbsolutePath()
222+
mods {
223+
"${mod_id}" {
224+
sourceSet(sourceSets.main)
225+
}
232226
}
233227
}
234228

@@ -247,21 +241,6 @@ jar {
247241
}
248242
}
249243

250-
task signJar(type: PotentiallySignJar, dependsOn: jar) {
251-
dependsOn(tasks.jar)
252-
253-
onlyIf {
254-
System.getenv().SIGN_KEYSTORE
255-
}
256-
257-
keyStore = System.getenv().SIGN_KEYSTORE
258-
alias = System.getenv().SIGN_ALIAS
259-
storePass = System.getenv().SIGN_STOREPASS
260-
keyPass = System.getenv().SIGN_KEYPASS
261-
input = jar.archivePath
262-
output = jar.archivePath
263-
}
264-
265244
task deobfJar(type: Jar) {
266245
from sourceSets.main.output
267246
archiveClassifier.set('deobf')
@@ -428,14 +407,10 @@ jacocoTestReport {
428407
}
429408

430409
// Also measure coverage for game tests
431-
tasks.whenTaskAdded { task ->
432-
if (task.name.equals('runGameTestServer')) {
433-
jacocoTestReport.dependsOn test, task
434-
jacoco {
435-
toolVersion = "0.8.12"
436-
applyTo task
437-
}
438-
}
410+
jacocoTestReport.dependsOn test, runGameTestServer
411+
jacoco {
412+
toolVersion = "0.8.12"
413+
applyTo runGameTestServer
439414
}
440415

441416
spotless {

gradle.properties

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

66
# Common
7-
minecraft_version=1.21.8
7+
minecraft_version=1.21.10
88
mod_name=IntegratedTerminals
99
mod_author=rubensworks (aka kroeser)
1010
mod_id=integratedterminals
@@ -15,13 +15,13 @@ display_url=https://www.curseforge.com/minecraft/mc-mods/integrated-terminals
1515
description=Terminals for managing and overviewing Integrated Dynamics networks.
1616
fingerprint=bd0353b3e8a2810d60dd584e256e364bc3bedd44
1717

18-
parchment_version=2025.06.15
19-
parchment_minecraft_version=1.21.5
18+
parchment_version=2025.10.12
19+
parchment_minecraft_version=1.21.10
2020
curseforge_project_id=295910
2121
modrinth_project_id=HmLJoQ1K
2222

2323
# NeoForge
24-
neoforge_version=21.8.20
24+
neoforge_version=21.10.53-beta
2525
neoforge_loader_version_range=[4,)
2626
neoforge_update_json_url=https://raw.githubusercontent.com/CyclopsMC/Versions/master/neoforge_update/integrated-terminals.json
2727

@@ -31,8 +31,8 @@ org.gradle.daemon=false
3131
org.gradle.caching=true
3232

3333
# Dependencies
34-
cyclopscore_version=1.25.5-800
35-
integrateddynamics_version=1.24.1-1299
34+
cyclopscore_version=1.25.5-863
35+
integrateddynamics_version=1.24.1-1417
3636
integratedterminalscompat_version=1.0.0-137
37-
integratedcrafting_version=1.1.13-346
38-
commoncapabilities_version=2.9.7-251
37+
integratedcrafting_version=1.1.13-408
38+
commoncapabilities_version=2.9.7-299

src/main/java/org/cyclops/integratedterminals/api/terminalstorage/ITerminalButtonClient.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.cyclops.integratedterminals.api.terminalstorage;
22

33
import net.minecraft.client.gui.components.Button;
4+
import net.minecraft.client.input.MouseButtonEvent;
45

56
import javax.annotation.Nullable;
67

@@ -20,12 +21,14 @@ public interface ITerminalButtonClient<C extends ITerminalStorageTabClient,
2021

2122
/**
2223
* Callback for when the gui button has been clicked.
23-
* @param clientTab The client tab in which the button was clicked.
24-
* @param commonTab The common tab in which the button was clicked.
25-
* @param guiButton The gui button.
26-
* @param channel The active channel.
27-
* @param mouseButton The mouse button that was used to click with.
24+
*
25+
* @param clientTab The client tab in which the button was clicked.
26+
* @param commonTab The common tab in which the button was clicked.
27+
* @param guiButton The gui button.
28+
* @param channel The active channel.
29+
* @param mouse The mouse button that was used to click with.
30+
* @param isDoubleClick If the mouse was double-clicked.
2831
*/
29-
public void onClick(C clientTab, @Nullable O commonTab, B guiButton, int channel, int mouseButton);
32+
public void onClick(C clientTab, @Nullable O commonTab, B guiButton, int channel, MouseButtonEvent mouse, boolean isDoubleClick);
3033

3134
}

src/main/java/org/cyclops/integratedterminals/capability/ingredient/IngredientComponentTerminalStorageHandlerEnergy.java

Lines changed: 26 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,12 @@
66
import net.minecraft.world.inventory.Slot;
77
import net.minecraft.world.item.ItemStack;
88
import net.neoforged.neoforge.capabilities.Capabilities;
9-
import net.neoforged.neoforge.energy.IEnergyStorage;
9+
import net.neoforged.neoforge.transfer.access.ItemAccess;
10+
import net.neoforged.neoforge.transfer.energy.EnergyHandler;
11+
import net.neoforged.neoforge.transfer.transaction.Transaction;
1012
import org.cyclops.commoncapabilities.api.ingredient.IngredientComponent;
1113
import org.cyclops.commoncapabilities.api.ingredient.storage.IIngredientComponentStorage;
14+
import org.cyclops.cyclopscore.capability.item.ItemStackResourceHandlerContainerSlot;
1215
import org.cyclops.cyclopscore.helper.IModHelpers;
1316
import org.cyclops.cyclopscore.ingredient.storage.InconsistentIngredientInsertionException;
1417
import org.cyclops.cyclopscore.ingredient.storage.IngredientStorageHelpers;
@@ -59,22 +62,22 @@ public String formatQuantity(Long instance) {
5962

6063
@Override
6164
public boolean isInstance(ItemStack itemStack) {
62-
return itemStack.getCapability(Capabilities.EnergyStorage.ITEM) != null;
65+
return itemStack.getCapability(Capabilities.Energy.ITEM, ItemAccess.forStack(itemStack)) != null;
6366
}
6467

6568
@Override
6669
public Long getInstance(ItemStack itemStack) {
67-
return Optional.ofNullable(itemStack.getCapability(Capabilities.EnergyStorage.ITEM))
68-
.map(IEnergyStorage::getEnergyStored)
69-
.orElse(0)
70+
return Optional.ofNullable(itemStack.getCapability(Capabilities.Energy.ITEM, ItemAccess.forStack(itemStack)))
71+
.map(EnergyHandler::getAmountAsLong)
72+
.orElse(0L)
7073
.longValue();
7174
}
7275

7376
@Override
7477
public long getMaxQuantity(ItemStack itemStack) {
75-
return Optional.ofNullable(itemStack.getCapability(Capabilities.EnergyStorage.ITEM))
76-
.map(IEnergyStorage::getMaxEnergyStored)
77-
.orElse(0);
78+
return Optional.ofNullable(itemStack.getCapability(Capabilities.Energy.ITEM, ItemAccess.forStack(itemStack)))
79+
.map(EnergyHandler::getCapacityAsLong)
80+
.orElse(0L);
7881
}
7982

8083
@Override
@@ -94,19 +97,17 @@ public int throwIntoWorld(IIngredientComponentStorage<Long, Boolean> storage, Lo
9497
}
9598

9699
protected IIngredientComponentStorage<Long, Boolean> getEnergyStorage(IngredientComponent<Long, Boolean> component,
97-
IEnergyStorage energyStorage) {
100+
EnergyHandler energyStorage) {
98101
return component
99-
.getStorageWrapperHandler(Capabilities.EnergyStorage.ITEM)
102+
.getStorageWrapperHandler(Capabilities.Energy.ITEM)
100103
.wrapComponentStorage(energyStorage);
101104
}
102105

103106
@Override
104107
public Long insertIntoContainer(IIngredientComponentStorage<Long, Boolean> storage,
105108
AbstractContainerMenu container, int containerSlot, Long maxInstance,
106109
@Nullable Player player, boolean transferFullSelection) {
107-
ItemStack stack = container.getSlot(containerSlot).getItem();
108-
109-
return Optional.ofNullable(stack.getCapability(Capabilities.EnergyStorage.ITEM))
110+
return Optional.ofNullable(ItemStackResourceHandlerContainerSlot.asItemAccess(container, containerSlot).getCapability(Capabilities.Energy.ITEM))
110111
.map(energyStorage -> {
111112
IIngredientComponentStorage<Long, Boolean> itemStorage = getEnergyStorage(storage.getComponent(), energyStorage);
112113
Long ret = 0L;
@@ -115,7 +116,7 @@ public Long insertIntoContainer(IIngredientComponentStorage<Long, Boolean> stora
115116
} catch (InconsistentIngredientInsertionException e) {
116117
// Ignore
117118
}
118-
container.broadcastChanges();
119+
container.broadcastChanges(); // TODO: can this be removed due to ItemAccess usage?
119120
return ret;
120121
})
121122
.orElse(0L);
@@ -124,8 +125,7 @@ public Long insertIntoContainer(IIngredientComponentStorage<Long, Boolean> stora
124125
@Override
125126
public void extractActiveStackFromPlayerInventory(IIngredientComponentStorage<Long, Boolean> storage,
126127
AbstractContainerMenu container, Inventory playerInventory, long moveQuantityPlayerSlot) {
127-
ItemStack playerStack = container.getCarried();
128-
Optional.ofNullable(playerStack.getCapability(Capabilities.EnergyStorage.ITEM))
128+
Optional.ofNullable(ItemAccess.forPlayerCursor(playerInventory.player, container).getCapability(Capabilities.Energy.ITEM))
129129
.ifPresent(energyStorage -> {
130130
IIngredientComponentStorage<Long, Boolean> itemStorage = getEnergyStorage(storage.getComponent(), energyStorage);
131131
try {
@@ -141,8 +141,7 @@ public void extractMaxFromContainerSlot(IIngredientComponentStorage<Long, Boolea
141141
AbstractContainerMenu container, int containerSlot, Inventory playerInventory, int limit) {
142142
Slot slot = container.getSlot(containerSlot);
143143
if (slot.mayPickup(playerInventory.player)) {
144-
ItemStack toMoveStack = slot.getItem();
145-
Optional.ofNullable(toMoveStack.getCapability(Capabilities.EnergyStorage.ITEM))
144+
Optional.ofNullable(ItemStackResourceHandlerContainerSlot.asItemAccess(container, containerSlot).getCapability(Capabilities.Energy.ITEM))
146145
.ifPresent(energyStorage -> {
147146
IIngredientComponentStorage<Long, Boolean> itemStorage = getEnergyStorage(storage.getComponent(), energyStorage);
148147
try {
@@ -156,21 +155,23 @@ public void extractMaxFromContainerSlot(IIngredientComponentStorage<Long, Boolea
156155

157156
@Override
158157
public long getActivePlayerStackQuantity(Inventory playerInventory, AbstractContainerMenu container) {
159-
ItemStack toMoveStack = container.getCarried();
160-
return Optional.ofNullable(toMoveStack.getCapability(Capabilities.EnergyStorage.ITEM))
161-
.map(IEnergyStorage::getEnergyStored)
162-
.orElse(0);
158+
return Optional.ofNullable(ItemAccess.forPlayerCursor(playerInventory.player, container).getCapability(Capabilities.Energy.ITEM))
159+
.map(EnergyHandler::getAmountAsLong)
160+
.orElse(0L);
163161
}
164162

165163
@Override
166164
public void drainActivePlayerStackQuantity(Inventory playerInventory, AbstractContainerMenu container, long quantityIn) {
167-
ItemStack toMoveStack = container.getCarried();
168-
Optional.ofNullable(toMoveStack.getCapability(Capabilities.EnergyStorage.ITEM))
165+
Optional.ofNullable(ItemAccess.forPlayerCursor(playerInventory.player, container).getCapability(Capabilities.Energy.ITEM))
169166
.ifPresent(energyStorage -> {
170167
// Drain
171168
long quantity = quantityIn;
172169
while (quantity > 0) {
173-
int drained = energyStorage.extractEnergy((int) quantity, false);
170+
int drained;
171+
try (var tx = Transaction.openRoot()) {
172+
drained = energyStorage.extract((int) quantity, tx);
173+
tx.commit();
174+
}
174175
if (drained <= 0) {
175176
break;
176177
}

0 commit comments

Comments
 (0)