Jump to content

Recommended Posts

Posted

firstly i though id start a new topic because my old thread has gone off on a rather large tangent.

second, i know absolutely nothing about NBT's i only started looking at them about 30 mins ago so please be patient and forgive stupid errors xD

 

what i am trying to do is make a sword which when it hits a zombie, recognises this and +1 to dmg of the sword to zombies. i tried to do this with

 

package CriticalStrike.common;

import net.minecraft.entity.Entity;
import net.minecraft.entity.monster.EntityZombie;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EntityDamageSource;
import net.minecraftforge.event.ForgeSubscribe;
import net.minecraftforge.event.entity.living.LivingHurtEvent;

public class MobDrops {

int Zombie = 0;
   
    @ForgeSubscribe
    public void onEntityAttacked(LivingHurtEvent event) {
    	
    	if (!(event.source instanceof EntityDamageSource))
	{return;}
    	
    	EntityDamageSource dmgSource = (EntityDamageSource) event.source;
	Entity ent = dmgSource.getEntity();

	if (!(ent instanceof EntityPlayer))
	{return;}

    	EntityPlayer player = (EntityPlayer) ent;
	ItemStack weapon = player.getCurrentEquippedItem();



            if (event.source.getDamageType().equals("player")) {
            if (!(weapon == null)){
            if (weapon.getItem() instanceof ImmortalAdaptingBlade){
            if (event.entityLiving instanceof EntityZombie) {
            	 Zombie =+ 1;
            	 event.ammount =+ Zombie;
            	
            }}}}
            
            }
    }

 

The result was that the sword only did 1 dmg. i wanted it to do 1 + 1 + 1 + 1 + 1 ...etc

They suggested NBTTagCompound, so here is my effort at that, the problem is that it still seems to do only one dmg not matter how many times i hit a zombie,

 

SwordCode

package CriticalStrike.common;

import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.EnumToolMaterial;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemSword;
import net.minecraft.world.World;
import net.minecraft.potion.Potion;
import net.minecraft.potion.PotionEffect;
import net.minecraft.nbt.*;

public class ImmortalAdaptingBlade extends ItemSword{


public ImmortalAdaptingBlade(int ItemID, EnumToolMaterial Steel){
	super(ItemID, Steel);
}

public void onCreated(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) {
        if( par1ItemStack.stackTagCompound == null )
                par1ItemStack.setTagCompound( new NBTTagCompound( ) );

        int i = 0;
        par1ItemStack.stackTagCompound.setInteger( "Zombie", i );
}

  @Override
  public void registerIcons(IconRegister reg){
          this.itemIcon = reg.registerIcon("criticalstrike:MythicalEmpoweringSword");
  }} 

 

eventClass

 

package CriticalStrike.common;

import java.awt.List;

import net.minecraft.entity.Entity;
import net.minecraft.entity.monster.EntityZombie;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EntityDamageSource;
import net.minecraftforge.event.ForgeSubscribe;
import net.minecraftforge.event.entity.living.LivingHurtEvent;

public class AdaptingBladeEvent {

private int zz;

public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) {
        if( par1ItemStack.stackTagCompound == null )
                par1ItemStack.setTagCompound( new NBTTagCompound( ) );

      
        zz = par1ItemStack.stackTagCompound.getInteger( "Zombie" );
}

    @ForgeSubscribe
    public void onEntityAttacked(LivingHurtEvent event) {
    	
    	if (!(event.source instanceof EntityDamageSource))
	{return;}
    	
    	EntityDamageSource dmgSource = (EntityDamageSource) event.source;
	Entity ent = dmgSource.getEntity();

	if (!(ent instanceof EntityPlayer))
	{return;}

    	EntityPlayer player = (EntityPlayer) ent;
	ItemStack weapon = player.getCurrentEquippedItem();

            if (event.source.getDamageType().equals("player")) {
            if (!(weapon == null)){
            if (weapon.getItem() instanceof ImmortalAdaptingBlade){
            if (event.entityLiving instanceof EntityZombie) {
            	 zz =+ 1;
            	 event.ammount =+ zz;
            	
            }}}}
            
            }
    }

 

i summery, i want a sword that stacks +1 dmg every time i hit a zombie, only a zombie mind.

 

All help/suggestions/constructive criticism is great, Thanks :)

Use examples, i have aspergers.

Examples make sense to me.

Posted

How are you going to use that addInformation method ?  ???

 

Anyway, here is how I would do it:

 

//Inside of the event
if (weapon.getItem() instanceof ImmortalAdaptingBlade){
            if (event.entityLiving instanceof EntityZombie) {
int dmg = 0;
            	 if(weapon.hasTagCompound && weapon.stackTagCompound.hasKey("Zombie")
{
dmg = weapon.getTagCompound.getShort("Zombie");
}
else
{
NBTTagCompound tag = new NBTTagCompound();
tag.setShort("Zombie", 0);
weapon.setTagCompoung(tag);
}
            	 event.ammount =+ dmg;
            	weapon.getTagCompound.setShort("Zombie",dmg+1);
            }}

Posted

did you write this in eclipse? or free hand?

because when i put the code into the event i got a tonne of errors xD did i do somthing wrong?

anyway can you verify that the changes i made to get rid of errors still do the same things?

and there are two related errors i cant seem to get rid of under  tag.setShort("Zombie", 0); &  weapon.stackTagCompound.setShort("Zombie",dmg+1);

the error is "The method setShort(String, short) in the type NBTTagCompound is not applicable for the arguments (String, int)"

 

package CriticalStrike.common;

import java.awt.List;

import net.minecraft.entity.Entity;
import net.minecraft.entity.monster.EntityZombie;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EntityDamageSource;
import net.minecraftforge.event.ForgeSubscribe;
import net.minecraftforge.event.entity.living.LivingHurtEvent;

public class AdaptingBladeEvent {

    @ForgeSubscribe
    public void onEntityAttacked(LivingHurtEvent event) {
    	
    	if (!(event.source instanceof EntityDamageSource))
	{return;}
    	
    	EntityDamageSource dmgSource = (EntityDamageSource) event.source;
	Entity ent = dmgSource.getEntity();

	if (!(ent instanceof EntityPlayer))
	{return;}

    	EntityPlayer player = (EntityPlayer) ent;
	ItemStack weapon = player.getCurrentEquippedItem();

            if (event.source.getDamageType().equals("player")) {
            if (!(weapon == null)){
            	if (weapon.getItem() instanceof ImmortalAdaptingBlade){
                    if (event.entityLiving instanceof EntityZombie) {
        int dmg = 0;
                    if(weapon.hasTagCompound() && weapon.stackTagCompound.hasKey("Zombie"))
        {
        dmg = weapon.stackTagCompound.getShort("Zombie");
        }
        else
        {
        NBTTagCompound tag = new NBTTagCompound();
        tag.setShort("Zombie", 0);
        weapon.setTagCompound(tag);
        }
                    event.ammount =+ dmg;
                    weapon.stackTagCompound.setShort("Zombie",dmg+1);
            	
            }}}}
            
            }
    }

Use examples, i have aspergers.

Examples make sense to me.

Posted

did you write this in eclipse? or free hand?

because when i put the code into the event i got a tonne of errors xD did i do somthing wrong?

anyway can you verify that the changes i made to get rid of errors still do the same things?

and there are two related errors i cant seem to get rid of under  tag.setShort("Zombie", 0); &  weapon.stackTagCompound.setShort("Zombie",dmg+1);

the error is "The method setShort(String, short) in the type NBTTagCompound is not applicable for the arguments (String, int)"

 

package CriticalStrike.common;

import java.awt.List;

import net.minecraft.entity.Entity;
import net.minecraft.entity.monster.EntityZombie;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EntityDamageSource;
import net.minecraftforge.event.ForgeSubscribe;
import net.minecraftforge.event.entity.living.LivingHurtEvent;

public class AdaptingBladeEvent {

    @ForgeSubscribe
    public void onEntityAttacked(LivingHurtEvent event) {
    	
    	if (!(event.source instanceof EntityDamageSource))
	{return;}
    	
    	EntityDamageSource dmgSource = (EntityDamageSource) event.source;
	Entity ent = dmgSource.getEntity();

	if (!(ent instanceof EntityPlayer))
	{return;}

    	EntityPlayer player = (EntityPlayer) ent;
	ItemStack weapon = player.getCurrentEquippedItem();

            if (event.source.getDamageType().equals("player")) {
            if (!(weapon == null)){
            	if (weapon.getItem() instanceof ImmortalAdaptingBlade){
                    if (event.entityLiving instanceof EntityZombie) {
        int dmg = 0;
                    if(weapon.hasTagCompound() && weapon.stackTagCompound.hasKey("Zombie"))
        {
        dmg = weapon.stackTagCompound.getShort("Zombie");
        }
        else
        {
        NBTTagCompound tag = new NBTTagCompound();
        tag.setShort("Zombie", 0);
        weapon.setTagCompound(tag);
        }
                    event.ammount =+ dmg;
                    weapon.stackTagCompound.setShort("Zombie",dmg+1);
            	
            }}}}
            
            }
    }

try to change setShort&getShort to setInt&getInt OR OR OR OR change type of dmg to short,but idk will that help or no

edit: that will help

Posted

ok i have changed it to set int, i dont know if it will work, but it got rid of the errors. I always feel so dumb when i cant figure somthing out, come on here and you guys are like "oh right just..." and im like oh shit, ofc. xD

Use examples, i have aspergers.

Examples make sense to me.

Posted

it does but im a pretty nooby coder so if you want to rewrite my code to make it better, go for it. Im pretty sure the more advaned guys on here look at at and cry somtimes :P

Use examples, i have aspergers.

Examples make sense to me.

Posted

it does but im a pretty nooby coder so if you want to rewrite my code to make it better, go for it. Im pretty sure the more advaned guys on here look at at and cry somtimes :P

i was crying at all you code :D

if you want to rewrite all you code,then plz send it to me on skype,my skype is fhntv24.Beacos that will be a lot faster =) and i can teach you for somting,and i have very goon online so i can teach you amost all times

__________________________

              -Good fhntv24,that want to help noobs,beacos he was noob,and know,how is that,be a noob

 

Posted

<3

 

can i upload it to dropbox and just mail you a link?

also i dont have skype do you have steam?

&& i have a lvls, so coursework to do, and as i am at school i am internet limited, i am using a mobile hotspot atm xD

but i love to do this in my spare time along with dooootaaaaaaa xD

Use examples, i have aspergers.

Examples make sense to me.

Posted

<3

 

can i upload it to dropbox and just mail you a link?

also i dont have skype do you have steam?

&& i have a lvls, so coursework to do, and as i am at school i am internet limited, i am using a mobile hotspot atm xD

but i love to do this in my spare time along with dooootaaaaaaa xD

heh then just send drop box link to me in PM.I have steam,but dont give it to anyone ;)

Posted

I lied, if i had two tags, tow integers and i wanted to make sure the second was zero but i hadn't used it yet? because the code i have been graciously given courtesy of goto, checks the key then uses them. is there a way i can check all the tags i need earlier? then change them as i wish?

 

Or am i just being a dumbass and i don't even need to check them? as nbts are uniquely named can i just reference one and it will know what i am talking about?

Use examples, i have aspergers.

Examples make sense to me.

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

    • Honestly, the forums are a back burner thing. Not many people use it. Best option is discord. I know that I haven't looked at the forums for more then admin tasks in quite a while. You're also best off not following tutorials which give you code. Knowing programming and reading the MC/Forge code yourself would be the best way to go.
    • on my last computer, i had a similar problem with forge/ neoforge mods but instead them launcher screen was black
    • I am trying to make a mod, all it is, a config folder that tells another mod to not require a dependency, pretty simple right.. well, I dont want whoever downloads my mod to have to download 4 other mods and then decide if they want 2 more that they kinda really need.. i want to make my mod basically implement all of these mods, i really dont care how it does it, ive tried putting them in every file location you can think of, ive downloaded intellij, mcreator, and tried vmware but thats eh (had it from school). I downloaded them in hopes theyd create the correct file i needed but honestly im only more lost now. I have gotten my config file to work, if i put all these mods into my own mods folder and the config file into the config and it works (unvbelievably) but i want to share this to everyone else, lets just say this mod will legitimately get 7M downloads.  I tried putting them in a run folder then having it create all the contents in that for a game (mods,config..etc) then i drop the mods in and all the sudden i cant even open the game, like it literally works with my own world i play on, but i cant get it to work on any coding platform, they all have like built in java versions you cant switch, its a nightmare. I am on 1.20.1 I need Java 17 (i dont think the specific versions of 17 matter) I have even tried recreating the mods i want to implement and deleting import things like net.adamsandler.themodsname and replacing it with what mine is. that only creates other problems, where im at right now is i got the thing to start opening then it crashes, closest ive gotten it, then it just says this  exception in thread "main" cpw.mods.niofs.union.unionfilesystem$uncheckedioexception: java.util.zip.zipexception: zip end header not found caused by: java.util.zip.zipexception: zip end header not found basically saying theres something wrong with my java.exe file, so i tried downloading so many different versions of java and putting them all in so many different spots, nothing, someone online says its just a mod that isnt built right so i put the mod into an editor and bunch of errors came up, id post it but i deleted it on accident, i just need help integrating mods
    • Vanilla 1.16.5 Crash Report [#L2KYKaK] - mclo.gs  
    • Hello, probably the last update, if anyone has the same problem or this can be of any help, the answer was pretty simple, textures started rendering just using a Tesselator instead of a VertexConsumer given by a MultibufferSource and a RenderType, pretty simple
  • Topics

×
×
  • Create New...

Important Information

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