Jump to content

Recommended Posts

Posted

Hey there!

 

So I'm making an "ability" where a player left clicks in the air with an empty hand, and a floating rock spawns and follows the player around. It's suppose to emulate earth bending from Avatar the Last Airbender. I have the PlayerInteractEvent.LeftClickEmpty set up correctly and the entity is spawning correctly, so that's all good. However, this is only being ran client side, meaning that when the EntityRock extends EntityTameable spawns, the super constructor for EntityLiving isn't running the "initEntityAI" code. I suppose I could just call it myself, but I'm willing to bet it's been written that way for a particular reason, perhaps meaning "logic" should be done server-side?

 

Any thoughts or help are appreciated! :D

 

Here's the event:

@SubscribeEvent
    public void onLeftClick(PlayerInteractEvent.LeftClickEmpty event){

        System.out.println("SIDE: " + event.getSide().toString());
        EntityPlayer player = event.getEntityPlayer();

        if(player.getHeldItem(EnumHand.MAIN_HAND) == null && player.equals(ClientProxy.MINECRAFT.thePlayer)){
            EntityRock entity;

            entity = new EntityRock(player.worldObj);

            entity.setLocationAndAngles(player.posX, player.posY, player.posZ, MathHelper.wrapDegrees(player.worldObj.rand.nextFloat() * 360.0F), 0.0F);
            entity.rotationYawHead = entity.rotationYaw;
            entity.renderYawOffset = entity.rotationYaw;
            entity.onInitialSpawn(player.worldObj.getDifficultyForLocation(new BlockPos(entity)), (IEntityLivingData)null);
            player.worldObj.spawnEntityInWorld(entity);
            entity.playLivingSound();

            ClientProxy.clientInfo.rocks.add(entity);
        }
    }

 

Here's the EntityRock class:

public class EntityRock extends EntityTameable {

    //Some code copied from Blaze class

    private EntityLivingBase owner;
    private double maxTravelDistance;
    private BlockPos startPosition;
    private double randomGeneratedOffset;
    private float heightOffset;
    /** ticks until heightOffset is randomized */
    private int heightOffsetUpdateTime;
    private EntityAIFollowOwner followTask;
    private EntityAITargetBlock launhTask;
    private EntityAITargetEntity entityLaunchTask;

    public EntityRock(World worldIn) {
        super(worldIn);

        this.owner = ClientProxy.MINECRAFT.thePlayer;
        this.setSize(1f, 1f);
        this.experienceValue = 200;
        this.stepHeight = 1;
        randomGeneratedOffset = this.rand.nextInt(3); //0 - 2
        //this.navigator = getNewNavigator(this.worldObj);
        this.setOwnerId(owner.getUniqueID());
        this.posX = owner.posX + this.rand.nextInt(3);
        this.posY = owner.getEyeHeight() + 1;
        this.posZ = owner.posZ + this.rand.nextInt(3);
        this.setHomePosAndDistance(new BlockPos(posX, posY, posZ), Integer.MAX_VALUE);
    }

    @Override
    protected void initEntityAI(){
        System.out.println("AI INIT");
        //this.tasks.addTask(0, new EntityAIFollowBender(this, ClientProxy.MINECRAFT.thePlayer, 1f, 1.5f, 2.0f));
        this.tasks.addTask(0, followTask = new EntityAIFollowOwner(this, 0.5D, 1.5f, 2f));
    }

    @Override
    protected void applyEntityAttributes(){
        super.applyEntityAttributes();

        this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(200.0D); //100 full hearts
        this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(1.0D);
    }

    public void launch(EntityPlayer player) {
        int yaw = (int)player.rotationYaw;

        if(yaw<0) {            //due to the yaw running a -360 to positive 360
            yaw += 360;
        }        //not sure why it's that way
        yaw+=22;     //centers coordinates you may want to drop this line
        yaw%=360;  //and this one if you want a strict interpretation of the zones

        int facing = yaw/45;   //  360degrees divided by 45 == 8 zones (4 normal direction, 4 diagonal)

        //-----------------------
        RayTraceResult result = player.worldObj.rayTraceBlocks(player.getPositionEyes(1.0f), player.getLookVec());
        //remove task of following owner
        //add task of going to target
        //turn step height to 0
        //mark start position
        //play sound

        if(result == null)
            return;

        if(result.typeOfHit != RayTraceResult.Type.MISS)
            this.tasks.removeTask(followTask);

        if(result.typeOfHit == RayTraceResult.Type.BLOCK) {
            BlockPos pos = new BlockPos(result.hitVec);
            this.tasks.addTask(0, launhTask = new EntityAITargetBlock(this, 2.0D, Integer.MAX_VALUE, pos));
        }
        else if(result.typeOfHit == RayTraceResult.Type.ENTITY && result.entityHit instanceof EntityLivingBase)
            this.tasks.addTask(0, entityLaunchTask = new EntityAITargetEntity(this, false, (EntityLivingBase) result.entityHit));

        this.stepHeight = 0;
        this.startPosition = new BlockPos(this.getPositionVector());

        //play sound
    }

    @Override
    public EntityAgeable createChild(EntityAgeable ageable) {
        return null;
    }

    @Override
    public boolean canBeCollidedWith(){
        return false;
    }

    @Override
    public void onCollideWithPlayer(EntityPlayer player){
        if(player == owner){
            return;
        }
    }

    @Override
    public void collideWithEntity(Entity entity){

    }

    //@Override
    //protected PathNavigate getNewNavigator(World world){
        //return new PathNavigateFollowAbility(this, world);
    //}



    @Override
    public boolean processInteract(EntityPlayer player, EnumHand hand, ItemStack stack){
        if(hand.equals(EnumHand.MAIN_HAND)){

        }
        //remove task of following owner
        //add task of going to target
        //turn step height to 0
        //mark start position
        //play sound
        return true;
    }

    /**
     * Called frequently so the entity can update its state every tick as required. For example, zombies and skeletons
     * use this to react to sunlight and start to burn.
     */
    public void onLivingUpdate()
    {
        super.onLivingUpdate();
        if (!this.onGround && this.motionY < 0.0D)
        {
            this.motionY *= 0.6D;
        }
        this.onGround = true; //to make the path navigate believe the entity is on the ground so it can execute
    }

    protected void updateAITasks()
    {
        //may not want them to fly high incase they get in the way of shooting abilities
        super.updateAITasks();

        --this.heightOffsetUpdateTime;

        if (this.heightOffsetUpdateTime <= 0)
        {
            this.heightOffsetUpdateTime = 100;
            this.heightOffset = 0.5F + (float)this.rand.nextGaussian() * 3.0F;
        }

        if (randomGeneratedOffset > 0 && owner != null && !owner.isDead && (Math.abs(this.posY - (owner.posY + owner.getEyeHeight())) > 1.0D))
        {
            this.motionY += (0.30000001192092896D - this.motionY) * 0.30000001192092896D;
            this.motionY *= randomGeneratedOffset;
            this.isAirBorne = true;
        }
        this.onGround = true; //to make the path navigate believe the entity is on the ground so it can execute
    }

    public void fall(float distance, float damageMultiplier)
    {
    }

    @Override
    public boolean isAIDisabled(){return false;}

    protected SoundEvent getAmbientSound(){
        return TestSounds.Guard;
    }
    protected SoundEvent getHurtSound(){return TestSounds.Guard;}
    protected SoundEvent getDeathSound(){return TestSounds.Guard;}


}

Posted

You need to create a custom packet and send it to the server where it handles the spawning of the rock.

 

Thank ya. I'll go find a tutorial on how to do that! :D

Posted

For anyone that happens to come across this same problem, just make sure that you registered your event class common/server side and not specifically just client side. Mine was fixed (well, believed to be fixed - I'll update the code tomorrow) by making sure it was registered common/server side.

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

    • My apologies, it's a Postscript. I was able to play for an extended period of time right after generating the world without any problems. If I close it and reopen it, I get that message at random. Once it appears, I have to modify the Level.dat to open it.
    • Share logs/errors, and someone may know how to help. Make sure to read the FAQ on sharing logs.
    • Hello.  regarding Invalid player data.  First of all, my English is not good, so there might be mistakes. I am using Minecraft 1.20.1 forge 47.3.22 CurseForge and have over 250 mods in my modpack. Single-player. I can play the game after generating the world (about 5 hours) and restarting it, but there is no set timing and one day it suddenly shows ''Invalid player data''. Restarted the game several times after that, but the same message appears. Fix the level.dat file and play for a few hours, but the next day when I try to open the world I get the ''Invalid player data'' message again. Can open other worlds, but after some progress in the other worlds, the same message appears and I can't start them. Is there something wrong with the mod configuration? I would be very grateful if you could tell me how to solve this problem. ◉ErrorCode https://mclo.gs/4gcfPbY   ◉ModList AdvancementPlaques-forge-1.6.9.jar AI-Improvements-1.20-0.5.2.jar alexsmobs-1.22.9.jar alternate_current-mc1.20-1.7.0.jar AmbientSounds_FORGE_v6.1.6_mc1.20.1.jar amendments-1.20-1.2.18.jar Apotheosis-1.20.1-7.4.6.jar ApothicAttributes-1.20.1-1.3.7.jar appleskin-forge-mc1.20.1-2.5.1.jar aquamirae-6.API15.jar architectury-9.2.14-forge.jar ars_elemental-1.20.1-0.6.7.7.jar ars_extended_glyphs-1.20.1-1.9.jar ars_nouveau-1.20.1-4.12.6-all.jar AttributeFix-Forge-1.20.1-21.0.4.jar azurelib-neo-1.20.1-2.0.41.jar BadOptimizations-2.2.1-1.20.1.jar balm-forge-1.20.1-7.3.16-all.jar barbequesdelight-1.0.5.jar BattleArts-20.9.7.1.jar BattleArtsAPI-20.9.5.3.jar BEB-Forge-1.20.1-2.0.0.jar bendy-lib-forge-4.0.0.jar betterendcities-1.0.0-1.20.1.jar betterfpsdist-1.20.1-6.0.jar BetterThirdPerson-Forge-1.20-1.9.0.jar bettervillage-forge-1.20.1-3.2.0.jar biggerendcities-1.20.1-1.0.0.jar blockui-1.20.1-1.0.156-RELEASE.jar blueprint-1.20.1-7.1.1.jar blur-forge-3.1.1.jar BOMD-Forge-1.20.1-1.1.1.jar Bookshelf-Forge-1.20.1-20.2.13.jar BrewinAndChewin-1.20.1-3.1.2.jar BridgingMod-2.5.1+1.20.1.forge-release.jar caelus-forge-3.2.0+1.20.1.jar CarbonConfig-1.20-1.2.6.jar Cardiac-FORGE-0.5.3.2+1.20.1.jar carryon-forge-1.20.1-2.1.2.7.jar casualness_delight-1.20.1-0.4n.jar CerbonsApi-Forge-1.20.1-1.0.0.jar chat_heads-0.13.13-forge-1.20.jar cherishedworlds-forge-6.1.7+1.20.1.jar ChoiceTheorem's Overhauled Village-3.4.11.jar Chunk-Pregenerator-1.20-4.4.4.jar citadel-2.6.1-1.20.1.jar clean_tooltips-1.0-forge-1.20.1.jar cloth-config-11.1.136-forge.jar Clumps-forge-1.20.1-12.0.0.4.jar cobweb-forge-1.20.1-1.0.1.jar CocoaInput-1.20.5-fabric-4.4.1-EXPERIMENTAL.jar collective-1.20.1-7.91.jar cosmeticarmorreworked-1.20.1-v1a.jar create-1.20.1-0.5.1.j.jar create_easy_structures-0.1.2-forge-1.20.1.jar CreativeCore_FORGE_v2.12.31_mc1.20.1.jar creeperoverhaul-3.0.2-forge.jar cristellib-1.1.6-forge.jar cuisinedelight-1.1.16.jar cupboard-1.20.1-2.7.jar curios-forge-5.11.1+1.20.1.jar CutAllSMP_v2.5.2.jar default_skill_trees-1.1.jar DisenchantmentEditTable-1.20-1.1.2.jar DistantHorizons-2.2.1-a-1.20.1-forge-fabric.jar domesticationinnovation-1.7.1-1.20.1.jar domum_ornamentum-1.20.1-1.0.186-RELEASE-universal.jar dragonitegear-0.3.2.jar Dungeon Crawl-1.20.1-2.3.15.jar dungeons-and-taverns-ancient-city-overhaul-1 [Forge].jar DungeonsArise-1.20.x-2.1.58-release.jar dungeons_enhanced-1.20.1-5.3.0.jar dungeons_plus-1.20.1-1.5.0.jar ec_isasb_plugin-1.20.1-1.0.0-all.jar efiscompat-2.2.4.jar EFMCompat 20.2.0.1.jar embeddium-0.3.31+mc1.20.1.jar EnchantmentDescriptions-Forge-1.20.1-17.1.19.jar endermanoverhaul-forge-1.20.1-1.0.4.jar EnderWyrmlings-1.0.0-forge-1.20.1.jar endrem_forge-5.3.3-R-1.20.1.jar enhanced_boss_bars-1.20.1-1.0.0.jar entityculling-forge-1.7.2-mc1.20.1.jar entity_model_features_forge_1.20.1-2.4.1.jar entity_texture_features_forge_1.20.1-6.2.9.jar Epic-Knights-9.21.jar Epic-Knights-Addon-1.22.jar Epic-Knights-Slavic-Armory-1.5.jar epicfight-forge-20.9.7-1.20.1.jar essential_1-3-5-7_forge_1-20-1.jar ExCap-20.9.7.3.jar exoticbirds-1.20.1-1.0.0.jar expanded_combat-1.20.1-3.2.4-all.jar Explorify v1.6.2 f10-48.jar extrasounds-1.20.1-forge-1.3.jar falchionmoveset-20.8.2.jar Fallingleaves-1.20.1-2.1.0.jar FarmersDelight-1.20.1-1.2.7.jar farsight-1.20.1-3.7.jar FastFurnace-1.20.1-8.0.2.jar FastSuite-1.20.1-5.0.1.jar FastWorkbench-1.20.1-8.0.4.jar ferritecore-6.0.1-forge.jar forge-medievalend-1.0.1.jar framework-forge-1.20.1-0.7.12.jar frozen_zombie_castle-1.4.0-forge-1.20.1.jar fzzy_config-0.6.4+1.20.1+forge.jar geckolib-forge-1.20.1-4.7.jar globalxp-forge-1.20.1-1.12.jar goblintraders-forge-1.20.1-1.9.3.jar gravestone-forge-1.20.1-1.0.24.jar guardvillagers-1.20.1-1.6.10.jar harvest-with-ease-forge-1.20.1-9.4.0.jar Highlighter-1.20.1-forge-1.1.9.jar hole_filler_mod-1.2.8_mc-1.20.1_forge.jar Iceberg-1.20.1-forge-1.1.25.jar ImmediatelyFast-Forge-1.3.4+1.20.4.jar ImmersiveUI-FORGE-0.3.0.jar imst-2.1.0.jar infernalmobs-1.20.1.6.jar integrated_api-1.5.1+1.20.1-forge.jar integrated_villages-1.1.5+1.20.1-forge.jar inventoryhud.forge.1.20.1-3.4.26.jar InventoryProfilesNext-forge-1.20-1.10.14.jar inventorysorter-1.20.1-23.0.8.jar InventorySpam-1.20.1-1.5.6.jar ironchest-1.20.1-14.4.4.jar irons_spellbooks-1.20.1-3.4.0.7.jar iron_repair_kits-2.4.3-forge-1.20.1.jar ItemBorders-1.20.1-forge-1.2.2.jar ItemProductionLib-1.20.1-1.0.2a-all.jar Jade-1.20.1-Forge-11.12.3.jar jei-1.20.1-forge-15.20.0.106.jar journeymap-1.20.1-5.10.3-forge.jar justhammers-forge-2.0.3+mc1.20.1.jar Kobolds-2.12.0.jar kotlinforforge-4.11.0-all.jar LegendaryTooltips-1.20.1-forge-1.4.5.jar libIPN-forge-1.20-4.0.2.jar libraryferret-forge-1.20.1-4.0.0.jar lionfishapi-2.4-Fix.jar lithostitched-forge-1.20.1-1.4.4.jar lmft-1.0.4+1.20.1-forge.jar lootbeams-1.20.1-1.2.6.jar lootintegrations-1.20.1-4.0.jar lukis-grand-capitals-1.1.1.jar L_Enders_Cataclysm-2.54- 1.20.1.jar mes-1.3.4-1.20-forge.jar mexicans_delight-1.1.1-forge-1.20.1.jar MineAllSMP_v2.6.6.jar minecolonies-1.20.1-1.1.814-snapshot.jar mna-forge-1.20.1-3.1.0.4-all.jar modernfix-forge-5.20.2+mc1.20.1.jar ModernUI-Forge-1.20.1-3.11.1.6-universal.jar modlist.txt moonlight-1.20-2.13.65-forge.jar mowziesmobs-1.7.0.jar multipiston-1.20-1.2.43-RELEASE.jar MutantMonsters-v8.0.7-1.20.1-Forge.jar mutil-1.20.1-6.1.1.jar mvs-4.1.4-1.20-forge.jar NaturesCompass-1.20.1-1.11.2-forge.jar Neat-1.20.1-41-FORGE.jar netherportalfix-forge-1.20-13.0.1.jar notenoughanimations-forge-1.9.2-mc1.20.1.jar Obscure-Tooltips-2.2.jar obscure_api-15.jar OctoLib-FORGE-0.4.2+1.20.1.jar oculus-mc1.20.1-1.8.0.jar packetfixer-forge-2.0.0-1.19-to-1.20.1.jar PackingTape-1.20.1-0.14.3.jar PassiveSkillTree-1.20.1-BETA-0.6.14a-all.jar Patchouli-1.20.1-84.1-FORGE.jar phantasm-1.0.1.jar Placebo-1.20.1-8.6.2.jar player-animation-lib-forge-1.0.2-rc1+1.20.jar polymorph-forge-0.49.8+1.20.1.jar Prism-1.20.1-forge-1.0.5.jar projectvibrantjourneys-1.20.1-6.0.5.jar puffish_attributes-0.7.2-1.20-forge.jar puffish_skills-0.14.7-1.20-forge.jar PuzzlesLib-v8.1.25-1.20.1-Forge.jar QualityCrops-1.20.1-1.3.3.jar QualitysDelight-1.20.1-1.5.3.jar Quark-4.0-460.jar QUILT-2.0.0.jar repair_amulet-2.0-forge-1.20.1.jar repurposed_structures-7.1.15+1.20.1-forge.jar resourcefulconfig-forge-1.20.1-2.1.2.jar resourcefullib-forge-1.20.1-2.1.29.jar RPG-HUD-3.10.jar rpg_companions_tiny_dragons-0.0.4-forge-1.20.1.jar run.bat samurai_dynasty-0.0.48-1.20.1-neo.jar simplyswords-forge-1.56.0-1.20.1.jar SkyVillages-1.0.4-1.19.2-1.20.1-forge-release.jar smoothboot(reloaded)-mc1.20.1-0.0.4.jar sophisticatedbackpacks-1.20.1-3.23.5.1200.jar sophisticatedcore-1.20.1-1.2.12.872.jar sound-physics-remastered-forge-1.20.1-1.4.8.jar Stackable Potions-forge-1.20.1-1.0.0.jar StorageBox_v3.2.5.jar StorageDrawers-1.20.1-12.9.13.jar Structory_1.20.x_v1.3.5.jar Structory_Towers_1.20.x_v1.0.7.jar structure_gel-1.20.1-2.16.2.jar structurize-1.20.1-1.0.764-snapshot.jar SubtleEffects-forge-1.20.1-1.8.0.jar supermartijn642configlib-1.1.8-forge-mc1.20.jar supermartijn642corelib-1.1.18-forge-mc1.20.1.jar supplementaries-1.20-3.1.13.jar TaxCastlePillager+M.1.20.1+ForM.1.0.1.jar TaxTreeGiant+M.1.20.1+ForM.1.1.0.jar TerraBlender-forge-1.20.1-3.0.1.7.jar Terralith_1.20.x_v2.5.4.jar tetra-1.20.1-6.8.0.jar TheOuterEnd-1.0.10.jar tidal-towns-1.3.4.jar tlc_forge-1.0.3-R-1.20.X.jar toms_storage-1.20-1.7.0.jar toomanyglyphs-1.20.1-2.3.2.12345.jar totw_additions-1.3.1-1.20.x-forge.jar totw_modded-forge-1.20.1-1.0.5.jar Towns-and-Towers-1.12-Fabric+Forge.jar towntalk-1.20.1-1.1.0.jar trashcans-1.0.18b-forge-mc1.20.jar trashslot-forge-1.20-15.1.1.jar travelersbackpack-forge-1.20.1-9.1.16.jar TravelersTitles-1.20-Forge-4.0.2.jar tru.e-ending-v1.1.0c.jar uncrafter-forge-1.20.1-1.2.0.jar valarian_conquest-3.0-forge-1.20.1.jar valhelsia_core-forge-1.20.1-1.1.2.jar valhelsia_structures-forge-1.20.1-1.1.2.jar villagernames-1.20.1-8.2.jar visuality-forge-2.0.2.jar waystones-forge-1.20.1-14.1.9.jar WeaponsOfMiracles-20.1.8.5.6.jar XP From Harvest Reworked-1.20.x-1.2.4.jar YetAnotherConfigLib-3.6.2+1.20.1-forge.jar YungsApi-1.20-Forge-4.0.6.jar YungsBetterDesertTemples-1.20-Forge-3.0.3.jar YungsBetterDungeons-1.20-Forge-4.0.4.jar YungsBetterEndIsland-1.20-Forge-2.0.6.jar YungsBetterJungleTemples-1.20-Forge-2.0.5.jar YungsBetterMineshafts-1.20-Forge-4.0.4.jar YungsBetterNetherFortresses-1.20-Forge-2.0.6.jar YungsBetterOceanMonuments-1.20-Forge-3.0.4.jar YungsBetterWitchHuts-1.20-Forge-3.0.3.jar YungsBridges-1.20-Forge-4.0.3.jar YungsCaveBiomes-1.20.1-Forge-2.0.1.jar YungsExtras-1.20-Forge-4.0.3.jar Zeta-1.0-24.jar  
    • I did exactly like in the instruction , i even copied the build.gradle from alex mobs like he told in the instruction for citadel 1.7.0 and above, and i got 100 different error no matter what i changed in the build.gradle, i once managed to make a build succesfull but then the run client wasnt working I did exactly like in the instruction , i even copied the build.gradle from alex mobs like he told in the instruction for citadel 1.7.0 and above, and i got 100 different error no matter what i changed in the build.gradle, i once managed to make a build succesfull but then the run client wasnt working
    • Please share a link to your crash report on https://paste.ee, as explained in the FAQ
  • Topics

×
×
  • Create New...

Important Information

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