Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

'ammo' detection assistance requested


PegBeard
 Share

Recommended Posts

I have made a projectile weapon which is able to shoot a variety of projectiles based on the ammunition in the players inventory. Currently, it fires all applicable types of ammo, but I would like it to only detect ammo that is on the players hotbar.

I have been playing around with getStackInSlot and designating the hotbar slots, but that isn't really doing what I want it to - unless I have missed something.

I am not overly familiar with all the functions of MC/Forge, as I've only been at this for a week or so and I was wondering if there was a way to detect a specific item in the players hotbar, that isn't the held item - specifically I want this to happen on right click with the weapon, to determine if applicable ammo is present and the weapon can be fired.

Link to comment
Share on other sites

The only way to do so is to iterate through each hotbar slot and check the inventory stack.

 

Unless your item can shoot itself, you can safely iterate without worrying about the currently held item, since the currently held item must, by definition, be the one that was right-clicked, i.e. your item, and wouldn't be a valid ammo type.

Link to comment
Share on other sites

This is the way I am attempting to check only the hotbar for the ammo, but it seems to checking for anything in the hotbar and then for the ammo in the rest of my inventory and firing from there.

 

	public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer)
    {
        ArrowNockEvent event = new ArrowNockEvent(par3EntityPlayer, par1ItemStack);
        MinecraftForge.EVENT_BUS.post(event);
        if (event.isCanceled())
        {
            return event.result;
        }

        for (int i = 0; i < 9; i++)
        {
        	if (par3EntityPlayer.inventory.getStackInSlot(i) != null)
        	{
        		if (par3EntityPlayer.capabilities.isCreativeMode || par3EntityPlayer.inventory.hasItem(Items.wheat_seeds)  || par3EntityPlayer.inventory.hasItem(Items.pumpkin_seeds) || par3EntityPlayer.inventory.hasItem(Items.melon_seeds)  || par3EntityPlayer.inventory.hasItem(DungeoneeringItems.ironNugget) || par3EntityPlayer.inventory.hasItem(DungeoneeringItems.pyriteDust))
        		{
        			par3EntityPlayer.setItemInUse(par1ItemStack, this.getMaxItemUseDuration(par1ItemStack));
        		}
        	}
        }
  	  	return par1ItemStack;
    }

 

I am guessing this bit is my main issue - if (par3EntityPlayer.inventory.getStackInSlot(i) != null) - as I'm not specifying a specific item to search for and stop on, but it wouldn't except a specific Item and I'm not sure how getStackInSlot works, if I am honest.

I only have a basic understanding of Java, so I probably look like a bit of a numpty, but making an MC mod is an attempt to get better at it.

Link to comment
Share on other sites

I have no idea what are you trying to accomplish with those:

 

if (par3EntityPlayer.capabilities.isCreativeMode || par3EntityPlayer.inventory.hasItem(Items.wheat_seeds)  || par3EntityPlayer.inventory.hasItem(Items.pumpkin_seeds) || par3EntityPlayer.inventory.hasItem(Items.melon_seeds)  || par3EntityPlayer.inventory.hasItem(DungeoneeringItems.ironNugget) || par3EntityPlayer.inventory.hasItem(DungeoneeringItems.pyriteDust))

 

You do not need to do so many checks, and most certainly you don't want to use #hasItem so much.

 

After this loop your "theAmmo" will be the first ItemStack found in hotbar that is instance of your ammo item (apple).

 

If you want item-comprasion:

ItemStack theAmmo = null;
for (int i = 0; i < 9; i++)
{
if (player.inventory.mainInventory[i] != null)
{
	Item item = player.inventory.mainInventory[i].getItem();
	if (item == Item.apple)
	{
		theAmmo = player.inventory.mainInventory[i];
		break; //breaks loop
	}
}
}

 

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

Link to comment
Share on other sites

the trouble is the way your asking if the player has item

bad english advertisment

 

when you do

par3EntityPlayer.inventory.hasItem(Items.wheat_seeds)

you are asking if the player has wheatseeds no mather  where the sloth is

 

you must get the item from the slot doing something like

 

ItemStack cosastack = par3EntityPlayer.inventory.getStackInSlot(i);

Item cosa = cosastack.getItem();

 

and then compare it to what you want

 

if (cosa.equals(Items.wheat_seeds))

{

//do cosas or stuff

}

 

 

 

 

Link to comment
Share on other sites

Always great gifs from Ernio :P

 

@OP As others have said, you need to compare the ItemStack in the slot to what you are looking for, but also, if the player is in Creative Mode, you shouldn't even bother looping from 0-9 unless you need to set ammo for creative players, too, rather than just letting them shoot whatever the default is.

 

What I would do is create a list of Items / ItemStacks that are acceptable ammo, and compare those:

// Elsewhere in your code:
private final List<Item> acceptableAmmo = Lists.newArrayList();
static {
  acceptableAmmo.add(Items.wheat_seeds); // or whatever items you want as ammo
}


// In Item#onItemRightClick method:
ItemStack ammo = null;
// adding in '&& ammo == null' to the for loop will cause it to exit as soon as acceptable ammo is found
for (int i = 0; i < 9 && ammo == null; ++i) {
  ItemStack stack = player.inventory.getStackInSlot(i);
  if (stack != null && acceptableAmmo.contains(stack.getItem())) {
     ammo = stack; // now the loop will stop, and you have your ammo type
  }
}
if (ammo != null) {
  // here you can decrement the stack size of the ammo stack and spawn in correct projectile, etc.
}

Link to comment
Share on other sites

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
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.

 Share



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • thank you very much, the problem was in the path to the model.  
    • The version you are using is no longer supported on this forum. Please update to a modern version of Minecraft to receive support. Currently supported versions are 1.18.1/1.18.2 (Latest) and 1.16.5 (LTS).
    • The version of WorldEdit that you have is for 1.18.1 and not compatible with 1.18.2. Use the 1.18.2 version.
    • Having probems with a server i have at home it crashes when loading up   ---- Minecraft Crash Report ---- // Daisy, daisy... Time: 25/05/2022, 14:03 Description: Exception in server tick loop java.lang.NoSuchMethodError: 'net.minecraft.core.RegistryAccess net.minecraft.server.MinecraftServer.m_129911_()'     at com.sk89q.worldedit.forge.ForgeWorldEdit.setupRegistries(ForgeWorldEdit.java:197) ~[worldedit-mod-7.2.8.jar%2355!/:?] {re:classloading}     at com.sk89q.worldedit.forge.ForgeWorldEdit.serverStarted(ForgeWorldEdit.java:256) ~[worldedit-mod-7.2.8.jar%2355!/:?] {re:classloading}     at net.minecraftforge.eventbus.ASMEventHandler_9_ForgeWorldEdit_serverStarted_ServerStartedEvent.invoke(.dynamic) ~[?:?] {}     at net.minecraftforge.eventbus.ASMEventHandler.invoke(ASMEventHandler.java:85) ~[eventbus-5.0.3.jar%232!/:?] {}     at net.minecraftforge.eventbus.EventBus.post(EventBus.java:302) ~[eventbus-5.0.3.jar%232!/:?] {}     at net.minecraftforge.eventbus.EventBus.post(EventBus.java:283) ~[eventbus-5.0.3.jar%232!/:?] {}     at net.minecraftforge.server.ServerLifecycleHooks.handleServerStarted(ServerLifecycleHooks.java:99) ~[forge-1.18.2-40.1.25-universal.jar%2361!/:?] {re:classloading}     at net.minecraft.server.MinecraftServer.m_130011_(MinecraftServer.java:662) ~[server-1.18.2-20220404.173914-srg.jar%2357!/:?] {re:classloading,pl:accesstransformer:B}     at net.minecraft.server.MinecraftServer.m_177918_(MinecraftServer.java:261) ~[server-1.18.2-20220404.173914-srg.jar%2357!/:?] {re:classloading,pl:accesstransformer:B}     at java.lang.Thread.run(Thread.java:833) [?:?] {} A detailed walkthrough of the error, its code path and all known details is as follows: --------------------------------------------------------------------------------------- -- System Details -- Details:     Minecraft Version: 1.18.2     Minecraft Version ID: 1.18.2     Operating System: Windows 11 (amd64) version 10.0     Java Version: 17.0.2, Oracle Corporation     Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode, sharing), Oracle Corporation     Memory: 1172062448 bytes (1117 MiB) / 2105540608 bytes (2008 MiB) up to 2105540608 bytes (2008 MiB)     CPUs: 4     Processor Vendor: GenuineIntel     Processor Name: Intel(R) Core(TM) i3-8100T CPU @ 3.10GHz     Identifier: Intel64 Family 6 Model 158 Stepping 11     Microarchitecture: Coffee Lake     Frequency (GHz): 3.10     Number of physical packages: 1     Number of physical CPUs: 4     Number of logical CPUs: 4     Graphics card #0 name: Intel(R) UHD Graphics 630     Graphics card #0 vendor: Intel Corporation (0x8086)     Graphics card #0 VRAM (MB): 1024.00     Graphics card #0 deviceId: 0x3e91     Graphics card #0 versionInfo: DriverVersion=26.20.100.7757     Memory slot #0 capacity (MB): 8192.00     Memory slot #0 clockSpeed (GHz): 2.67     Memory slot #0 type: DDR4     Virtual memory max (MB): 9310.78     Virtual memory used (MB): 5713.56     Swap memory total (MB): 1280.00     Swap memory used (MB): 10.88     JVM Flags: 0 total;     Server Running: true     Player Count: 0 / 20; []     Data Packs: vanilla, mod:charginggadgets (incompatible), mod:supermartijn642configlib (incompatible), mod:worldedit (incompatible), mod:buildinggadgets (incompatible), mod:buildhelper (incompatible), mod:mcjtylib (incompatible), mod:supermartijn642corelib (incompatible), mod:chunkloaders (incompatible), mod:mininggadgets (incompatible), mod:forge (incompatible), mod:rftoolsbase (incompatible), mod:rftoolsbuilder (incompatible), mod:refinedstorage, mod:journeymap (incompatible), mod:cyclic, mod:jamd (incompatible), mod:jei (incompatible), mod:patchouli (incompatible), mod:laserio     World Generation: Experimental     Is Modded: Definitely; Server brand changed to 'forge'     Type: Dedicated Server (map_server.txt)     ModLauncher: 9.1.3+9.1.3+main.9b69c82a     ModLauncher launch target: forgeserver     ModLauncher naming: srg     ModLauncher services:          mixin PLUGINSERVICE          eventbus PLUGINSERVICE          slf4jfixer PLUGINSERVICE          object_holder_definalize PLUGINSERVICE          runtime_enum_extender PLUGINSERVICE          capability_token_subclass PLUGINSERVICE          accesstransformer PLUGINSERVICE          runtimedistcleaner PLUGINSERVICE          mixin TRANSFORMATIONSERVICE          fml TRANSFORMATIONSERVICE     FML Language Providers:         minecraft@1.0         javafml@null     Mod List:         server-1.18.2-20220404.173914-srg.jar             |Minecraft                     |minecraft                     |1.18.2              |DONE      |Manifest: NOSIGNATURE         charginggadgets-1.5.0.jar                         |Charging Gadgets              |charginggadgets               |1.5.0               |DONE      |Manifest: NOSIGNATURE         supermartijn642configlib-1.0.9-mc1.18.jar         |SuperMartijn642's Config Lib  |supermartijn642configlib      |1.0.9               |DONE      |Manifest: NOSIGNATURE         worldedit-mod-7.2.8.jar                           |WorldEdit                     |worldedit                     |7.2.8+6008-1246d61  |DONE      |Manifest: NOSIGNATURE         buildinggadgets-3.13.0-build.5+mc1.18.2.jar       |Building Gadgets              |buildinggadgets               |3.13.0-build.5+mc1.1|DONE      |Manifest: NOSIGNATURE         torojimaBuildHelper-3.5.0.0.jar                   |Torojima's Buildhelper        |buildhelper                   |3.5.0.0             |DONE      |Manifest: NOSIGNATURE         mcjtylib-1.18-6.0.13.jar                          |McJtyLib                      |mcjtylib                      |1.18-6.0.13         |DONE      |Manifest: NOSIGNATURE         jei-1.18.1-9.2.1.69.jar                           |Just Enough Items             |jei                           |9.2.1.69            |DONE      |Manifest: NOSIGNATURE         supermartijn642corelib-1.0.16-mc1.18.jar          |SuperMartijn642's Core Lib    |supermartijn642corelib        |1.0.16              |DONE      |Manifest: NOSIGNATURE         chunkloaders-1.1.8-mc1.18.jar                     |Chunk Loaders                 |chunkloaders                  |1.1.8               |DONE      |Manifest: NOSIGNATURE         mininggadgets-1.11.0.jar                          |Mining Gadgets                |mininggadgets                 |1.11.0              |DONE      |Manifest: NOSIGNATURE         forge-1.18.2-40.1.25-universal.jar                |Forge                         |forge                         |40.1.25             |DONE      |Manifest: 84:ce:76:e8:45:35:e4:0e:63:86:df:47:59:80:0f:67:6c:c1:5f:6e:5f:4d:b3:54:47:1a:9f:7f:ed:5e:f2:90         rftoolsbase-1.18-3.0.7.jar                        |RFToolsBase                   |rftoolsbase                   |1.18-3.0.7          |DONE      |Manifest: NOSIGNATURE         rftoolsbuilder-1.18-4.0.10.jar                    |RFToolsBuilder                |rftoolsbuilder                |1.18-4.0.10         |DONE      |Manifest: NOSIGNATURE         Patchouli-1.18.2-67.jar                           |Patchouli                     |patchouli                     |1.18.2-67           |DONE      |Manifest: NOSIGNATURE         refinedstorage-1.10.2.jar                         |Refined Storage               |refinedstorage                |1.10.2              |DONE      |Manifest: NOSIGNATURE         laserio-1.0.1.jar                                 |LaserIO                       |laserio                       |1.0.1               |DONE      |Manifest: NOSIGNATURE         journeymap-1.18-5.8.0alpha4.jar                   |Journeymap                    |journeymap                    |5.8.0alpha4         |DONE      |Manifest: NOSIGNATURE         Cyclic-1.18.2-1.7.0.jar                           |Cyclic                        |cyclic                        |1.18.2-1.7.0        |DONE      |Manifest: 1f:47:ac:b1:61:82:96:b8:47:19:16:d2:61:81:11:60:3a:06:4b:61:31:56:7d:44:31:1e:0c:6f:22:5b:4c:ed         JAMD-1.7.0-build.24+mc1.18.2.jar                  |Just Another Mining Dimension |jamd                          |1.7.0-build.24+mc1.1|DONE      |Manifest: NOSIGNATURE     Crash Report UUID: a4b30830-b80e-4601-9aec-8e6451729eed     FML: 40.1     Forge: net.minecraftforge:40.1.25
    • This means the version of Configured is not for 1.18, you need a version of the Mod for 1.18.2
  • Topics

×
×
  • Create New...

Important Information

By using this site, you agree to our Privacy Policy.