Jump to content

How to make custom mob shoot fireballs?


MikeDark

Recommended Posts

I'm creating a mage that shoots balls of fire, however I can not do it and  need your help, please help me ...

 

My Entity Class:

 


package mike.bathicraft.mob;

import mike.bathicraft.items.GerenciadorDeItems;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.SharedMonsterAttributes;
import net.minecraft.entity.ai.EntityAIArrowAttack;
import net.minecraft.entity.ai.EntityAIAttackOnCollide;
import net.minecraft.entity.ai.EntityAIHurtByTarget;
import net.minecraft.entity.ai.EntityAINearestAttackableTarget;
import net.minecraft.entity.ai.EntityAISwimming;
import net.minecraft.entity.ai.EntityAIWander;
import net.minecraft.entity.ai.EntityAIWatchClosest;
import net.minecraft.entity.monster.EntityMob;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.projectile.EntityLargeFireball;
import net.minecraft.entity.projectile.EntitySmallFireball;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.DamageSource;
import net.minecraft.util.MathHelper;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;

public class EntityMage extends EntityMob{

    public EntityMage(World world) {
	super(world);
	 isImmuneToFire = true;
	this.setSize(0.9F, 1.9F);
	this.tasks.addTask(0, new EntityAISwimming(this));
	this.tasks.addTask(2, new EntityAIAttackOnCollide(this, EntityPlayer.class, 1.0D, false));
        this.tasks.addTask(7, new EntityAIWander(this, 1.0D));
        this.tasks.addTask(8, new EntityAIWatchClosest(this, EntityPlayer.class, 12.0F));
        this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, true));
        this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityPlayer.class, 0, true));
}

  @Override
    protected void applyEntityAttributes()
    {
        
        super.applyEntityAttributes();
        this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(3.0D);
        this.getEntityAttribute(SharedMonsterAttributes.followRange).setBaseValue(20.0D);
        this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.4D);
        this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(120.0D);
        
    }
  
	protected boolean isAIEnabled()
    {
        return true;
    }

	@Override
	protected boolean isValidLightLevel()
	{
		 return true;
	}

	 @Override
	 public boolean getCanSpawnHere()
	 {
		 return true;		 
	 }

	 public ItemStack getHeldItem()
	 {
	 return heldItem;
	 }

	 private static final ItemStack heldItem = new ItemStack(GerenciadorDeItems.CetroDeFogo, 1);
	 		 		  
	 protected Item getDropItem(){
			return Items.blaze_powder;
		}

		protected void dropRareDrop(int par1){
			switch (this.rand.nextInt(3)){

			case 0:
				this.dropItem(GerenciadorDeItems.CetroDeFogo, 1);
			}
		}

	    protected void playStepSound(int par1, int par2, int par3, int par4)
	        {
	           this.worldObj.playSoundAtEntity(this, null, 0.15F,  1.0F);
	        }
	}

Link to comment
Share on other sites

Show what you have tried.

 

I tried to adapt this code:

 


pprotected void attackEntity(Entity entity, float f)
    {
        if (f < 10F)
        {
            double d = entity.posX - posX;
            double d1 = entity.posZ - posZ;
            if (attackTime == 0)
            {
                EntitySnowball entitysnowball = new EntitySnowball(worldObj, this);
                double d2 = (entity.posY + (double)entity.getEyeHeight()) - 1.1000000238418579D - entitysnowball.posY;
                float f1 = MathHelper.sqrt_double(d * d + d1 * d1) * 0.2F;
                worldObj.playSoundAtEntity(this, "random.bow", 1.0F, 1.0F / (rand.nextFloat() * 0.4F + 0.8F));
                worldObj.spawnEntityInWorld(entitysnowball);
                entitysnowball.setThrowableHeading(d, d2 + (double)f1, d1, 1.6F, 12F);
                attackTime = 10;
            }
            rotationYaw = (float)((Math.atan2(d1, d) * 180D) / 3.1415927410125732D) - 90F;
            hasAttacked = true;
        }
    }

Link to comment
Share on other sites

You need an AI task to make your Entity actually do something. The snow golem for example uses EntityAIArrowAttack.

 

I used the following code, and it worked almost perfectly, the only problem is, the fireballs instead of being out of the mob are coming out of my player

 

@Override
		public void attackEntityWithRangedAttack(EntityLivingBase entity, float arg1) {

			Vec3 look = entity.getLookVec();
			EntityLargeFireball fireball2 = new EntityLargeFireball(worldObj);
			fireball2.setPosition(entity.posX + look.xCoord * 5, entity.posY + look.yCoord * 5, entity.posZ + look.zCoord * 5);
			fireball2.accelerationX = look.xCoord * 0.4;
			fireball2.accelerationY = look.yCoord * 0.4;
			fireball2.accelerationZ = look.zCoord * 0.4;
			this.worldObj.spawnEntityInWorld(fireball2);
		}

Link to comment
Share on other sites

You are using the entity being passed in as the "source" of the projectiles. But the entity you get as the parameter is the entity being attacked, not the entity that is doing the attack.

 

and how I could change to the entity that will make the attack, i tried to change some parts,however at the end, just did not work

Link to comment
Share on other sites

It is a method in your Entity. Thus

this

refers to your Entity.

 

I fix and now my body is firing fireballs, but after he started shooting for a part he did not "upgrade" and is always there to shoot, but if I get away and return back, he start shoot for one only direction, it returns with bug

 

@Override
		public void attackEntityWithRangedAttack(EntityLivingBase entity, float arg1) {

			Vec3 look = this.getLookVec();
			EntityLargeFireball var3 = new EntityLargeFireball(this.worldObj, this, 1, 1, 1);
			var3.setPosition(this.posX + look.xCoord * 1, this.posY + look.yCoord * 1, this.posZ + look.zCoord * 1);
			var3.accelerationX = look.xCoord * 0.3;
			var3.accelerationY = look.yCoord * 0.3;
			var3.accelerationZ = look.zCoord * 0.3;
	        this.worldObj.spawnEntityInWorld(var3);
		}

 

 

Link to comment
Share on other sites

Post your entire Entity class again please.

 

Entity Class:

 

package mike.bathicraft.mob;

import mike.bathicraft.items.GerenciadorDeItems;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLiving;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.IRangedAttackMob;
import net.minecraft.entity.SharedMonsterAttributes;
import net.minecraft.entity.ai.EntityAIArrowAttack;
import net.minecraft.entity.ai.EntityAIAttackOnCollide;
import net.minecraft.entity.ai.EntityAIHurtByTarget;
import net.minecraft.entity.ai.EntityAINearestAttackableTarget;
import net.minecraft.entity.ai.EntityAISwimming;
import net.minecraft.entity.ai.EntityAIWander;
import net.minecraft.entity.ai.EntityAIWatchClosest;
import net.minecraft.entity.monster.EntityMob;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.projectile.EntityLargeFireball;
import net.minecraft.entity.projectile.EntitySmallFireball;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.DamageSource;
import net.minecraft.util.MathHelper;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;

public class EntityMage extends EntityMob implements IRangedAttackMob{

private int explosionStrength = 1;
  private Entity targetedEntity = null;

    public EntityMage(World world) {
	super(world);
	 isImmuneToFire = true;
	this.setSize(0.9F, 1.9F);
	this.tasks.addTask(0, new EntityAISwimming(this));
	this.tasks.addTask(1, new EntityAIArrowAttack(this, 0.25F, 20, 10.0F));
        this.tasks.addTask(7, new EntityAIWander(this, 1.0D));
        this.tasks.addTask(8, new EntityAIWatchClosest(this, EntityPlayer.class, 12.0F));
        this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, true));
        this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityPlayer.class, 0, true));
}
    
  @Override
    protected void applyEntityAttributes()
    {
        
        super.applyEntityAttributes();
        this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(3.0D);
        this.getEntityAttribute(SharedMonsterAttributes.followRange).setBaseValue(20.0D);
        this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.4D);
        this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(120.0D);
        
    }
  
	protected boolean isAIEnabled()
    {
        return true;
    }

	@Override
	protected boolean isValidLightLevel()
	{
		 return true;
	}

	 @Override
	 public boolean getCanSpawnHere()
	 {
		 return true;		 
	 }

	 public ItemStack getHeldItem()
	 {
	 return heldItem;
	 }

	 private static final ItemStack heldItem = new ItemStack(GerenciadorDeItems.CetroDeFogo, 1);
	 		 		  
	 protected Item getDropItem(){
			return Items.blaze_powder;
		}

		protected void dropRareDrop(int par1){
			switch (this.rand.nextInt(3)){

			case 0:
				this.dropItem(GerenciadorDeItems.CetroDeFogo, 1);
			}
		}

	    protected void playStepSound(int par1, int par2, int par3, int par4)
	        {
	           this.worldObj.playSoundAtEntity(this, null, 0.15F,  1.0F);
	        }
	    
		@Override
		public void attackEntityWithRangedAttack(EntityLivingBase entity, float arg1) {

			Vec3 look = this.getLookVec();
			EntityLargeFireball var3 = new EntityLargeFireball(this.worldObj, this, 1, 1, 1);
			var3.setPosition(this.posX + look.xCoord * 1, this.posY + look.yCoord * 1, this.posZ + look.zCoord * 1);
			var3.accelerationX = look.xCoord * 0.3;
			var3.accelerationY = look.yCoord * 0.3;
			var3.accelerationZ = look.zCoord * 0.3;
	        this.worldObj.spawnEntityInWorld(var3);

		}
}

Link to comment
Share on other sites

This is the code from EntityBlaze I put into my own mob. It works perfectly, as I will explain below. (Hopefully accurately.)

 

    @Override
    public void attackEntityWithRangedAttack(EntityLivingBase entity, float distance) {

        double d0 = entity.posX - this.posX;
        double d1 = entity.boundingBox.minY + (double)(entity.height / 2.0F) - (this.posY + (double)(this.height / 2.0F));
        double d2 = entity.posZ - this.posZ;

 

This calculates the x,y,z DISTANCE between the projectile and the target. getLook() only gives the DIRECTION.

 

        float f1 = MathHelper.sqrt_float(distance) * 0.5F;

 

This is calculating the accuracy (randomness) of the projectile. (The square root of the total distance divided by half. So, larger distances are more accurately fired.)

 

        this.worldObj.playAuxSFXAtEntity((EntityPlayer)null, 1009, (int)this.posX, (int)this.posY, (int)this.posZ, 0);
        for (int i = 0; i < 1; ++i)
        {

 

This part has a for loop because the Blaze can fire three fireballs at a time, but it's not needed in this case.

 

            EntitySmallFireball entitysmallfireball = new EntitySmallFireball(this.worldObj, this, d0 + this.rand.nextGaussian() * (double)f1, d1, d2 + this.rand.nextGaussian() * (double)f1);

 

This is the important part. This sets the x,y,z vector of the projectile, it uses the distance numbers calculated above, times a random number. (Because the Blaze fires randomly), you can take out "this.rand.nextGaussian() * (double)f1" and the projectile will always hit you dead on.

 

            entitysmallfireball.posY = this.posY + (double)(this.height / 2.0F) + 0.5D;

 

This is where the projectile starts, the 0.5 is added to half the height to place it near the mobs mouth area.

 

            this.worldObj.spawnEntityInWorld(entitysmallfireball);
        }
    }

 

Done. My class extends EntitySkeleton and nothing but this method is in it. I spawned it in, and now I have a skelington that shoots (Inaccurate) fireballs instead of arrows.

 

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



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • help when i tried to open minecraft it crash with this problem: The game crashed whilst initializing game Error: org.spongepowered.asm.mixin.transformer.throwables.MixinTransformerError: An unexpected critical error was encountered and this is the crash report https://paste.ee/d/V8h59  
    • Some zip managers like to take control of the .jar file extension away from Java. Make sure you have Java installed and try running Jarfix once, then try the installer again.
    • [03Jun2024 15:23:40.010] [main/INFO] [cpw.mods.modlauncher.Launcher/MODLAUNCHER]: ModLauncher running: args [--username, LondonDumbden, --version, 1.20.1-forge-47.2.32, --gameDir, C:\Users\London Bunden\AppData\Roaming\.minecraft, --assetsDir, C:\Users\London Bunden\AppData\Roaming\.minecraft\assets, --assetIndex, 5, --uuid, da3510f9b4b4427bb78304c88f4c534a, --accessToken, ????????, --clientId, ZTIxMjA2NTctYmIxZS00ZWQzLWFkZDEtMmMxMGQzMjQyNjBj, --xuid, 2535420262661734, --userType, msa, --versionType, release, --quickPlayPath, C:\Users\London Bunden\AppData\Roaming\.minecraft\quickPlay\java\1717446216838.json, --launchTarget, forgeclient, --fml.forgeVersion, 47.2.32, --fml.mcVersion, 1.20.1, --fml.forgeGroup, net.minecraftforge, --fml.mcpVersion, 20230612.114412] [03Jun2024 15:23:40.017] [main/INFO] [cpw.mods.modlauncher.Launcher/MODLAUNCHER]: ModLauncher 10.0.9+10.0.9+main.dcd20f30 starting: java version 17.0.8 by Microsoft; OS Windows 11 arch amd64 version 10.0 [03Jun2024 15:23:42.057] [main/INFO] [net.minecraftforge.fml.loading.ImmediateWindowHandler/]: Loading ImmediateWindowProvider fmlearlywindow [03Jun2024 15:23:42.159] [main/INFO] [EARLYDISPLAY/]: Trying GL version 4.6 [03Jun2024 15:23:42.401] [main/INFO] [EARLYDISPLAY/]: Requested GL version 4.6 got version 4.6 [03Jun2024 15:23:42.494] [main/INFO] [mixin-transmog/]: Mixin Transmogrifier is definitely up to no good... [03Jun2024 15:23:42.524] [main/INFO] [mixin-transmog/]: crimes against java were committed [03Jun2024 15:23:42.630] [pool-2-thread-1/INFO] [EARLYDISPLAY/]: GL info: NVIDIA GeForce RTX 3070/PCIe/SSE2 GL version 4.6.0 NVIDIA 555.85, NVIDIA Corporation [03Jun2024 15:23:43.075] [main/INFO] [gg.essential.loader.stage1.EssentialLoaderBase/]: Starting Essential Loader (stage2) version 1.6.2 (285f951adc7537f49ae3ef9fc0d2fd3e) [stable] [03Jun2024 15:23:43.104] [main/INFO] [mixin-transmog/]: Original mixin transformation service successfully crobbed by mixin-transmogrifier! [03Jun2024 15:23:43.162] [main/INFO] [mixin/]: SpongePowered MIXIN Subsystem Version=0.8.5 Source=union:/C:/Users/London%20Bunden/AppData/Roaming/.minecraft/mods/Connector-1.0.0-beta.43+1.20.1.jar%23266%23270!/ Service=ModLauncher Env=CLIENT [03Jun2024 15:23:44.312] [main/WARN] [net.minecraftforge.fml.loading.moddiscovery.ModFileParser/LOADING]: Mod file C:\Users\London Bunden\AppData\Roaming\.minecraft\libraries\net\minecraftforge\fmlcore\1.20.1-47.2.32\fmlcore-1.20.1-47.2.32.jar is missing mods.toml file [03Jun2024 15:23:44.317] [main/WARN] [net.minecraftforge.fml.loading.moddiscovery.ModFileParser/LOADING]: Mod file C:\Users\London Bunden\AppData\Roaming\.minecraft\libraries\net\minecraftforge\javafmllanguage\1.20.1-47.2.32\javafmllanguage-1.20.1-47.2.32.jar is missing mods.toml file [03Jun2024 15:23:44.323] [main/WARN] [net.minecraftforge.fml.loading.moddiscovery.ModFileParser/LOADING]: Mod file C:\Users\London Bunden\AppData\Roaming\.minecraft\libraries\net\minecraftforge\lowcodelanguage\1.20.1-47.2.32\lowcodelanguage-1.20.1-47.2.32.jar is missing mods.toml file [03Jun2024 15:23:44.329] [main/WARN] [net.minecraftforge.fml.loading.moddiscovery.ModFileParser/LOADING]: Mod file C:\Users\London Bunden\AppData\Roaming\.minecraft\libraries\net\minecraftforge\mclanguage\1.20.1-47.2.32\mclanguage-1.20.1-47.2.32.jar is missing mods.toml file [03Jun2024 15:23:44.862] [main/WARN] [net.minecraftforge.jarjar.selection.JarSelector/]: Attempted to select two dependency jars from JarJar which have the same identification: Mod File:  and Mod File: . Using Mod File:  [03Jun2024 15:23:44.864] [main/WARN] [net.minecraftforge.jarjar.selection.JarSelector/]: Attempted to select a dependency jar for JarJar which was passed in as source: curios. Using Mod File: C:\Users\London Bunden\AppData\Roaming\.minecraft\mods\curios-forge-5.9.1+1.20.1.jar [03Jun2024 15:23:44.864] [main/INFO] [net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator/]: Found 75 dependencies adding them to mods collection [03Jun2024 15:23:49.089] [main/INFO] [gg.essential.loader.stage2.util.KFFMerger/]: Found Kotlin-containing mod Jar[union:/C:/Users/London%20Bunden/AppData/Roaming/.minecraft/essential/libraries/forge_1.20.1/kotlin-for-forge-4.3.0-slim.jar%23280!/], checking whether we need to upgrade it.. [03Jun2024 15:23:49.091] [main/INFO] [gg.essential.loader.stage2.util.KFFMerger/]: Found outdated Kotlin core libs 0.0.0 (we ship 1.9.23) [03Jun2024 15:23:49.092] [main/INFO] [gg.essential.loader.stage2.util.KFFMerger/]: Found outdated Kotlin Coroutines libs 0.0.0 (we ship 1.8.0) [03Jun2024 15:23:49.092] [main/INFO] [gg.essential.loader.stage2.util.KFFMerger/]: Found outdated Kotlin Serialization libs 0.0.0 (we ship 1.6.3) [03Jun2024 15:23:49.095] [main/INFO] [gg.essential.loader.stage2.util.KFFMerger/]: Generating jar with updated Kotlin at C:\Users\LONDON~1\AppData\Local\Temp\kff-updated-kotlin-14765634657383373807-4.3.0-slim.jar [03Jun2024 15:23:49.974] [main/ERROR] [net.minecraftforge.fml.loading.LanguageLoadingProvider/LOADING]: Missing language kotlinforforge version [3,) wanted by Cobblemon-forge-1.5.2+1.20.1.jar [03Jun2024 15:23:49.989] [main/ERROR] [net.minecraftforge.fml.loading.ModSorter/LOADING]: Missing or unsupported mandatory dependencies:     Mod ID: 'curios', Requested by: 'radiantgear', Expected range: '[7,)', Actual version: '5.9.1+1.20.1'     Mod ID: 'minecraft', Requested by: 'radiantgear', Expected range: '[1.20.5,1.21)', Actual version: '1.20.1'     Mod ID: 'forge', Requested by: 'radiantgear', Expected range: '[50,)', Actual version: '47.2.32' [03Jun2024 15:23:50.434] [main/INFO] [dev.su5ed.sinytra.connector.service.hacks.ModuleLayerMigrator/]: Successfully made module authlib transformable [03Jun2024 15:23:51.112] [main/ERROR] [dev.su5ed.sinytra.connector.loader.ConnectorEarlyLoader/]: Skipping early mod setup due to previous error [03Jun2024 15:23:51.115] [main/INFO] [cpw.mods.modlauncher.LaunchServiceHandler/MODLAUNCHER]: Launching target 'forgeclient' with arguments [--version, 1.20.1-forge-47.2.32, --gameDir, C:\Users\London Bunden\AppData\Roaming\.minecraft, --assetsDir, C:\Users\London Bunden\AppData\Roaming\.minecraft\assets, --uuid, da3510f9b4b4427bb78304c88f4c534a, --username, LondonDumbden, --assetIndex, 5, --accessToken, ????????, --clientId, ZTIxMjA2NTctYmIxZS00ZWQzLWFkZDEtMmMxMGQzMjQyNjBj, --xuid, 2535420262661734, --userType, msa, --versionType, release, --quickPlayPath, C:\Users\London Bunden\AppData\Roaming\.minecraft\quickPlay\java\1717446216838.json]  
    • When I try to install the forge installer it comes with several files instead of just one in executable java format
    • 0 I have recently started with Java and the implementation of Minecraft mods. I am currently working on a mod for 1.20.4-49.0.31 I'm trying to get the content of each slot in the console to be displayed when the inventory is opened, which works. In addition, I wanted to do the same with chests (in this case containers). However, I get in the output that there is Air at every slot of the chest, even if the chest is filled. Does anyone have experience with similar problems and could help me? package net.kaan.sortingmod; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; import net.minecraft.client.gui.screens.inventory.InventoryScreen; import net.minecraft.client.gui.screens.inventory.ContainerScreen; import net.minecraft.client.gui.screens.inventory.FurnaceScreen; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.InventoryMenu; import net.minecraft.world.item.ItemStack; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.client.event.ScreenEvent; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; @Mod(SortingMod.MODID) public class SortingMod { public static final String MODID = "sortingmod"; public SortingMod() { // Register the client setup method FMLJavaModLoadingContext.get().getModEventBus().addListener(this::doClientStuff); // Register this class for Forge events MinecraftForge.EVENT_BUS.register(this); } private void doClientStuff(final FMLClientSetupEvent event) { // Any client-side setup can be done here } @SubscribeEvent public void onScreenOpen(ScreenEvent.Opening event) { Screen screen = event.getScreen(); if (screen instanceof InventoryScreen) { System.out.println("Player opened their inventory."); assert Minecraft.getInstance().player != null; printInventoryItems(Minecraft.getInstance().player); } else if (screen instanceof ContainerScreen) { System.out.println("Player opened a chest."); printContainerItems((ContainerScreen) screen); } } private void printInventoryItems(Player player) { AbstractContainerMenu menu = player.inventoryMenu; for (int i = 0; i < menu.slots.size(); i++) { ItemStack stack = menu.getSlot(i).getItem(); if (!stack.isEmpty()) { System.out.println("Slot " + i + ": " + stack.getCount() + "x " + stack.getHoverName().getString()); } } } private void printContainerItems(ContainerScreen screen) { AbstractContainerMenu menu = screen.getMenu(); System.out.println(menu.slots.size()); for (int i = 0; i < menu.slots.size(); i++) { ItemStack stack = menu.getSlot(i).getItem(); System.out.println("Slot " + i + ": " + stack.getCount() + "x " + stack.getHoverName().getString()); } } }  
  • Topics

×
×
  • Create New...

Important Information

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