Jump to content

Recommended Posts

Posted

Hello, I have a custom gui that I have made and I need it to be able to store more than 127 items in a stack, I need it to be able to to store a number somewhere in the billions. Given that ItemStacks save the stack size as bytes, this serves as a problem for me. I was thinking that I could make my own ItemStack class and use longs, but It seems like a lot of unnecessary work, so I was wondering if anyone know of a better way to accomplish this.

 

Side Question

This is a question I want to ask other modders, when they come across an issue with something in their mod.

Say that you want to add something to your mod, but it just does not seem to work and you can't figure out why and I you have tried to fix this for at least 1 month, would you start over, or would you continue to look for the problems in your coding.

 

All help is appreciated, Thank You!

Don't be afraid to ask question when modding, there are no stupid question! Unless you don't know java then all your questions are stupid!

Posted

I have problem in interpretation:

*"I have a custom gui."

*"store more than 127 items in a stack"

 

I really don't see any connection here.

 

1. You either want to have a Item that can have maximum stack size of X.

If that is your goal then I have no idea what is the problem since ItemStack's field stackSize is an int which can store a quite big number.

 

2. You want to have a GUI in which items react differently than in normal GUI. Let's say you can suddenly stack sword (which in normal GUI is impossible).

 

Please explain what exacly you have to store.

1.7.10 is no longer supported by forge, you are on your own.

Posted

Sorry, I should have explained more clearly. I have a custom gui, it is basically supposed to be a bank. I need to be able to store values higher than an int can handle and it need to be able to hold items that are not stackable in one slot.

Don't be afraid to ask question when modding, there are no stupid question! Unless you don't know java then all your questions are stupid!

Posted

My researches:

Every Container consists of Slots taken from Slot.class.

In slot class you have getSlotStackLimit().

Normally it will return stack slot limit taken from ItemStack, it can be however different than that - but only lower.

Since when you put something into slot will check both slot's MaxSize and ItemStack's maxStackSize and slotMaxSize must be lower than the ItemStack's, you will have to make it from ItemStack's side of code.

 

And this is the problem - you can's "just" override it for all vanilla items.

 

However there is a way to "cheat" game:

 

There IS a possibility of saving more items in one stack than game allows - to see that simply use:

new ItemStack(Item.diamond, 100000);

What you would need to do is a handler that would find if there is equal() ItemStack that you are trying to put into bank, inside the bank, copy it, then incerement it with value of items you want to put into and create new ItemStack with new size (code above).

 

BUT (always a butt) when game saves/loads itemstack's size to/from NBT and it's size is bigger than its maxStackSize it will be always (I think) auto-set to 1. That means that if you would save something with size of 2000 inside your container, after relaunch of game/server it would be 1 or simply become a ghost item (not sure YET).

 

And here is the problem - you can't use ItemStack's NBT to hold your values :)

 

I suggest making an slotArray<slotindex, sizeofstack> that will be saved in NBT for BankContainer and when someone calls openContainer it will loop through all slots, get their ItemStack, copy it, then apply sizeofstack from slotArray, and make a new ItemStack with new size in given slot.

 

I MIGHT be wrong when it comes to the part where I am claiming that you have to "cheat" the game, but that's only idea I have in mind at the moment. Also - you will have to make a hella-lot of nulls, ifs, loops, but: happy thing is that the container itself is not called on tick, so it won't lag :)

 

EDIT

P.S - I really wouldn't dare to f** with Stack sizes, it will probably glitch like hell, but that's what you asked for so I wrote it.

Consider making a withdraw system - a single slot in container where you can put an item and click "deposit" or you can choose an item from some scroll list and click withdraw (and amount). Data would be also stored in bankContainer NBT.

 

1.7.10 is no longer supported by forge, you are on your own.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • This is the last line before the crash: [ebwizardry]: Synchronising spell emitters for PixelTraveler But I have no idea what this means
    • What in particular? I barely used that mod this time around, and it's never been a problem in the past.
    • Im trying to build my mod using shade since i use the luaj library however i keep getting this error Reason: Task ':reobfJar' uses this output of task ':shadowJar' without declaring an explicit or implicit dependency. This can lead to incorrect results being produced, depending on what order the tasks are executed. So i try adding reobfJar.dependsOn shadowJar  Could not get unknown property 'reobfJar' for object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler. my gradle file plugins { id 'eclipse' id 'idea' id 'maven-publish' id 'net.minecraftforge.gradle' version '[6.0,6.2)' id 'com.github.johnrengelman.shadow' version '7.1.2' id 'org.spongepowered.mixin' version '0.7.+' } apply plugin: 'net.minecraftforge.gradle' apply plugin: 'org.spongepowered.mixin' apply plugin: 'com.github.johnrengelman.shadow' version = mod_version group = mod_group_id base { archivesName = mod_id } // Mojang ships Java 17 to end users in 1.18+, so your mod should target Java 17. java.toolchain.languageVersion = JavaLanguageVersion.of(17) //jarJar.enable() println "Java: ${System.getProperty 'java.version'}, JVM: ${System.getProperty 'java.vm.version'} (${System.getProperty 'java.vendor'}), Arch: ${System.getProperty 'os.arch'}" minecraft { mappings channel: mapping_channel, version: mapping_version copyIdeResources = true runs { configureEach { workingDirectory project.file('run') property 'forge.logging.markers', 'REGISTRIES' property 'forge.logging.console.level', 'debug' arg "-mixin.config=derp.mixin.json" mods { "${mod_id}" { source sourceSets.main } } } client { // Comma-separated list of namespaces to load gametests from. Empty = all namespaces. property 'forge.enabledGameTestNamespaces', mod_id } server { property 'forge.enabledGameTestNamespaces', mod_id args '--nogui' } gameTestServer { property 'forge.enabledGameTestNamespaces', mod_id } data { workingDirectory project.file('run-data') args '--mod', mod_id, '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources/') } } } sourceSets.main.resources { srcDir 'src/generated/resources' } repositories { flatDir { dirs './libs' } maven { url = "https://jitpack.io" } } configurations { shade implementation.extendsFrom shade } dependencies { minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}" implementation 'org.luaj:luaj-jse-3.0.2' implementation fg.deobf("com.github.Virtuoel:Pehkui:${pehkui_version}") annotationProcessor 'org.spongepowered:mixin:0.8.5:processor' minecraftLibrary 'luaj:luaj-jse:3.0.2' shade 'luaj:luaj-jse:3.0.2' } // Example for how to get properties into the manifest for reading at runtime. tasks.named('jar', Jar).configure { manifest { attributes([ 'Specification-Title' : mod_id, 'Specification-Vendor' : mod_authors, 'Specification-Version' : '1', // We are version 1 of ourselves 'Implementation-Title' : project.name, 'Implementation-Version' : project.jar.archiveVersion, 'Implementation-Vendor' : mod_authors, 'Implementation-Timestamp': new Date().format("yyyy-MM-dd'T'HH:mm:ssZ"), "TweakClass" : "org.spongepowered.asm.launch.MixinTweaker", "TweakOrder" : 0, "MixinConfigs" : "derp.mixin.json" ]) } rename 'mixin.refmap.json', 'derp.mixin-refmap.json' } shadowJar { archiveClassifier = '' configurations = [project.configurations.shade] finalizedBy 'reobfShadowJar' } assemble.dependsOn shadowJar reobf { re shadowJar {} } publishing { publications { mavenJava(MavenPublication) { artifact jar } } repositories { maven { url "file://${project.projectDir}/mcmodsrepo" } } }  
    • All versions of Minecraft Forge suddenly black screen even without mods (tried reinstalling original Minecraft, Java, updating drivers doesn't work)
  • Topics

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.