Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 2216c33f12 | |||
| e76ca86602 |
+17
-2
@@ -20,7 +20,6 @@ buildscript {
|
|||||||
repositories {
|
repositories {
|
||||||
maven { url = 'https://files.minecraftforge.net/maven' }
|
maven { url = 'https://files.minecraftforge.net/maven' }
|
||||||
maven { url = 'https://repo.spongepowered.org/maven' }
|
maven { url = 'https://repo.spongepowered.org/maven' }
|
||||||
jcenter()
|
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
@@ -40,9 +39,15 @@ apply plugin: 'net.minecraftforge.gradle'
|
|||||||
apply plugin: 'org.spongepowered.mixin'
|
apply plugin: 'org.spongepowered.mixin'
|
||||||
apply plugin: "eclipse"
|
apply plugin: "eclipse"
|
||||||
|
|
||||||
|
// All jar files from this folder will be added automatically as runtime mod dependencies
|
||||||
|
def extraModsDir = "extra-mods-${minecraft_version}"
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
|
flatDir {
|
||||||
|
name "extra-mods"
|
||||||
|
dir file(extraModsDir)
|
||||||
|
}
|
||||||
mavenLocal()
|
mavenLocal()
|
||||||
jcenter()
|
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
maven { // modmaven, maven proxy
|
maven { // modmaven, maven proxy
|
||||||
name 'modmaven'
|
name 'modmaven'
|
||||||
@@ -61,6 +66,16 @@ dependencies {
|
|||||||
runtimeOnly fg.deobf("mezz.jei:jei-${jei_minecraft_version}:${jei_version}")
|
runtimeOnly fg.deobf("mezz.jei:jei-${jei_minecraft_version}:${jei_version}")
|
||||||
runtimeOnly fg.deobf("mcjty.theoneprobe:TheOneProbe-${minecraft_release}:${minecraft_release}-${top_version}")
|
runtimeOnly fg.deobf("mcjty.theoneprobe:TheOneProbe-${minecraft_release}:${minecraft_release}-${top_version}")
|
||||||
|
|
||||||
|
// Locally sourced extra mods for runtime (i.e. testing)
|
||||||
|
for (extraModJar in fileTree(dir: extraModsDir, include: '*.jar')) {
|
||||||
|
def basename = extraModJar.name.substring(0, extraModJar.name.length() - ".jar".length())
|
||||||
|
def versionSep = basename.lastIndexOf('-')
|
||||||
|
assert versionSep != -1
|
||||||
|
def artifactId = basename.substring(0, versionSep)
|
||||||
|
def version = basename.substring(versionSep + 1)
|
||||||
|
runtimeOnly fg.deobf("extra-mods:$artifactId:$version")
|
||||||
|
}
|
||||||
|
|
||||||
// unit test dependencies
|
// unit test dependencies
|
||||||
testCompile "junit:junit:4.13"
|
testCompile "junit:junit:4.13"
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -11,7 +11,7 @@ artifact_basename=appliedenergistics2
|
|||||||
minecraft_release=1.16
|
minecraft_release=1.16
|
||||||
minecraft_version=1.16.3
|
minecraft_version=1.16.3
|
||||||
mcp_mappings=20200916-1.16.2
|
mcp_mappings=20200916-1.16.2
|
||||||
forge_version=34.0.8
|
forge_version=34.1.15
|
||||||
|
|
||||||
#########################################################
|
#########################################################
|
||||||
# Provided APIs #
|
# Provided APIs #
|
||||||
|
|||||||
@@ -122,6 +122,15 @@ class ItemHandlerAdapter implements IMEInventory<IAEItemStack>, IBaseMonitor<IAE
|
|||||||
do {
|
do {
|
||||||
extracted = this.itemHandler.extractItem(i, remainingCurrentSlot, simulate);
|
extracted = this.itemHandler.extractItem(i, remainingCurrentSlot, simulate);
|
||||||
if (!extracted.isEmpty()) {
|
if (!extracted.isEmpty()) {
|
||||||
|
// In order to guard against broken IItemHandler implementations, we'll
|
||||||
|
// try to guess if the returned stack (especially in simulate mode) is
|
||||||
|
// the same that was returned by getStackInSlot. This is obviously not a
|
||||||
|
// precise science, but it would catch the previous Forge bug:
|
||||||
|
// https://github.com/MinecraftForge/MinecraftForge/pull/6580
|
||||||
|
if (extracted == stackInInventorySlot) {
|
||||||
|
extracted = extracted.copy();
|
||||||
|
}
|
||||||
|
|
||||||
if (extracted.getCount() > remainingCurrentSlot) {
|
if (extracted.getCount() > remainingCurrentSlot) {
|
||||||
// Something broke. It should never return more than we requested...
|
// Something broke. It should never return more than we requested...
|
||||||
// We're going to silently eat the remainder
|
// We're going to silently eat the remainder
|
||||||
@@ -131,19 +140,28 @@ class ItemHandlerAdapter implements IMEInventory<IAEItemStack>, IBaseMonitor<IAE
|
|||||||
extracted.setCount(remainingCurrentSlot);
|
extracted.setCount(remainingCurrentSlot);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Heuristic for simulation: looping in case of simulations is pointless, since
|
||||||
|
// the
|
||||||
|
// state of the underlying inventory does not change after a simulated
|
||||||
|
// extraction
|
||||||
|
// To still support inventories that report stacks that are larger than
|
||||||
|
// maxStackSize,
|
||||||
|
// we use this heuristic
|
||||||
|
if (simulate && extracted.getCount() == extracted.getMaxStackSize()
|
||||||
|
&& remainingCurrentSlot > extracted.getMaxStackSize()) {
|
||||||
|
extracted.setCount(remainingCurrentSlot);
|
||||||
|
}
|
||||||
|
|
||||||
// We're just gonna use the first stack we get our hands on as the template for
|
// We're just gonna use the first stack we get our hands on as the template for
|
||||||
// the rest.
|
// the rest.
|
||||||
// In case some stupid itemhandler (aka forge) returns an internal state we have
|
|
||||||
// to do a second
|
|
||||||
// expensive copy again.
|
|
||||||
if (gathered.isEmpty()) {
|
if (gathered.isEmpty()) {
|
||||||
gathered = extracted.copy();
|
gathered = extracted;
|
||||||
} else {
|
} else {
|
||||||
gathered.grow(extracted.getCount());
|
gathered.grow(extracted.getCount());
|
||||||
}
|
}
|
||||||
remainingCurrentSlot -= extracted.getCount();
|
remainingCurrentSlot -= extracted.getCount();
|
||||||
}
|
}
|
||||||
} while (!extracted.isEmpty() && remainingCurrentSlot > 0);
|
} while (!simulate && !extracted.isEmpty() && remainingCurrentSlot > 0);
|
||||||
|
|
||||||
remainingSize -= stackSizeCurrentSlot - remainingCurrentSlot;
|
remainingSize -= stackSizeCurrentSlot - remainingCurrentSlot;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user