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

Custom Entity spawns as a Pig


_vertig0
 Share

Recommended Posts

I've been making a mod for my server and so far it's been going ok, but then I ran into this problem. I used the Registries to overwrite the vanilla Villager and Zombie Villager classes, but upon starting up my server I noticed a problem, I have code to remove Zombie Villagers from natural spawns in the ServerStarted block, normally it prints the debug message "Spawn List Entry minecraft:zombie_villager removed", but this time it printed "Spawn List Entry minecraft:pig removed". Completely confused, I went into my world and spawned a Zombie Villager with a spawn egg, and guess what? It wasn't a Zombie Villager at all, it was a Pig. I did the same thing with Villagers, and sure enough, they also spawned as pigs. They had Villager/Zombie Villager AI and sounds, but everything else, even their drops, were all characteristic of Pigs (They dropped Porkchops, sure enough). And looking further into my console, I also found the Villager death messages:

[00:39:02] [Server thread/INFO] [minecraft/Entity]: Villager VillagerEntity['entity.minecraft.pig.cleric'/2298, l='world', x=-2046.59, y=106.41, z=1837.30] died, message: 'entity.minecraft.pig.cleric was slain by [Admin] _vertig0'
[00:39:46] [Server thread/INFO] [minecraft/Entity]: Villager VillagerEntity['entity.minecraft.pig.armorer'/2448, l='world', x=-2034.57, y=107.05, z=1845.01] died, message: 'entity.minecraft.pig.armorer was slain by [Admin] _vertig0'
[00:40:23] [Server thread/INFO] [minecraft/Entity]: Villager VillagerEntity['entity.minecraft.pig.none'/2487, l='world', x=-2032.48, y=105.00, z=1846.95] died, message: 'entity.minecraft.pig.none was slain by [Admin] _vertig0'

entity.minecraft.pig.armourer?? Seriously?

Edit: I just realised the above means the server is using the default Minecraft Villager class and not my class, since my class is named EntityVillager. VillagerEntity is the name of the Minecraft class

 

And it gets even stranger. Zombie Villagers and Villagers spawned by the /summon command are perfectly normal, and render properly. Villagers that spawned naturally in the world before I loaded my updated mod were also fine. But any Villagers/Zombie Villagers that spawned after, unless spawned through /summon, are always Pigs...

 

This is how I've overridden the vanilla classes, or at least tried to override. As far as I know I've done everything from the tutorials correctly (For setRegistryName the Mod ID is minecraft because I'm replacing vanilla classes):

public static EntityType<?> villager;
public static EntityType<?> zombieVillager;

// You can use EventBusSubscriber to automatically subscribe events on the contained class (this is subscribing to the MOD
    // Event bus for receiving Registry Events)
    @Mod.EventBusSubscriber(bus=Mod.EventBusSubscriber.Bus.MOD)
    public static class RegistryEvents {
        
        @SubscribeEvent
        public static void onEntityRegistry(final RegistryEvent.Register<EntityType<?>> event) {
        	villager = EntityType.Builder.<EntityVillager>create(EntityVillager::new, EntityClassification.MISC).size(0.6F, 1.95F).build("villager").setRegistryName("minecraft", "villager");
        	zombieVillager = EntityType.Builder.<EntityZombieVillager>create(EntityZombieVillager::new, EntityClassification.MONSTER).size(0.6F, 1.95F).immuneToFire().build("zombie_villager").setRegistryName("minecraft", "zombie_villager");
        	event.getRegistry().registerAll(villager, zombieVillager);
        }
    }

Could anyone help me out? I'm completely stumped by this issue. I've successfully overriden Items and Enchantments this way, but for some reason it just doesn't work with entities

 

These here are my Custom Entity classes, I didn't change much, so I doubt this is the cause

package mod.server.forgeservermod;

import net.minecraft.entity.EntityType;
import net.minecraft.entity.SharedMonsterAttributes;
import net.minecraft.entity.effect.LightningBoltEntity;
import net.minecraft.entity.merchant.villager.VillagerEntity;
import net.minecraft.entity.villager.IVillagerType;
import net.minecraft.world.GameRules;
import net.minecraft.world.World;

public class EntityVillager extends VillagerEntity {
	
	public EntityVillager(EntityType<? extends VillagerEntity> type, World worldIn) {
	      super(type, worldIn);
	}
	
	@Override
	protected void registerAttributes() {
		super.registerAttributes();
		this.getAttribute(SharedMonsterAttributes.ARMOR).setBaseValue(2.0D);
		this.getAttribute(SharedMonsterAttributes.ARMOR_TOUGHNESS).setBaseValue(1.0D);
	}
	
	@Override
	public void livingTick() {
		if(this.world.getGameRules().getBoolean(GameRules.NATURAL_REGENERATION)) {
			if (this.getHealth() < this.getMaxHealth() && this.ticksExisted % 20 == 0) {
	            this.heal(2.0F);
	         }
		}
		super.livingTick();
	}
	
	public EntityVillager(EntityType<? extends VillagerEntity> type, World worldIn, IVillagerType villagerType) {
		super(type, worldIn, villagerType);
		// TODO Auto-generated constructor stub
	}
	
	@Override
	public void onStruckByLightning(LightningBoltEntity lightning) {
		return;
	}
	
	@Override
	public boolean preventDespawn() {
		return true;
	}
	
}

package mod.server.forgeservermod;

import net.minecraft.entity.EntityType;
import net.minecraft.entity.monster.ZombieVillagerEntity;
import net.minecraft.world.World;

public class EntityZombieVillager extends ZombieVillagerEntity {

	public EntityZombieVillager(EntityType<? extends ZombieVillagerEntity> type, World world) {
		super(type, world);
		// TODO Auto-generated constructor stub
	}
	
	@Override
	public boolean preventDespawn() {
		return true;
	}
	
	@Override
	public boolean canDespawn(double distanceToClosestPlayer) {
		return false;
	}

}

Thanks for taking the time to read my thread :)

Edited by _vertig0
Link to comment
Share on other sites

You are registering your entity types wrong. You don't initialize them via static intiializer. You use ObjectHolder (DeferredRegistry also works). Since you are OVERRIDING a vanilla entity, you match the object holder's string parameter with the desired minecraft id you want to override with.

Edited by [NoOneButNo]
Link to comment
Share on other sites

11 hours ago, [NoOneButNo] said:

You are registering your entity types wrong. You don't initialize them via static intiializer. You use ObjectHolder (DeferredRegistry also works). Since you are OVERRIDING a vanilla entity, you match the object holder's string parameter with the desired minecraft id you want to override with.

I could've sworn I wasn't using static initializers, since I only created the registry entries at the approriate registry event, and not within a static {} block. But anyway:

 

I changed my registration to use the DeferredRegister, but now it keeps throwing these errors:

238567078_2020-06-19(1).thumb.png.05a04dacfcc9bbe61df2b5348bd22e5e.png

1658731348_2020-06-19(2).thumb.png.902b98e563e658c0a7cff9d24f9be7b3.png

It's odd since EntityType.java is indeed the registry in vanilla Minecraft for Entities

 

The full registry code:

public static final DeferredRegister<EntityType> ENTITY_TYPES = new DeferredRegister<>(ForgeRegistries.ENTITIES, "minecraft");
public static final RegistryObject<EntityType> VILLAGER = ENTITY_TYPES.register("villager", () -> EntityType.Builder.<EntityVillager>create(EntityVillager::new, EntityClassification.MISC).size(0.6F, 1.95F).build("villager"));
public static final RegistryObject<EntityType> ZOMBIE_VILLAGER = ENTITY_TYPES.register("zombie_villager", () -> EntityType.Builder.<EntityZombieVillager>create(EntityZombieVillager::new, EntityClassification.MONSTER).size(0.6F, 1.95F).immuneToFire().build("zombie_villager"));

public ForgeServerCore() {
    ENTITY_TYPES.register(FMLJavaModLoadingContext.get().getModEventBus());
    //All the other code here is not relevant so I removed it for brevity
}


EDIT: Solved the compile error, now I'm building the mod. Crossing my fingers and hope it works!

Edited by _vertig0
Link to comment
Share on other sites

11 hours ago, [NoOneButNo] said:

You are registering your entity types wrong. You don't initialize them via static intiializer. You use ObjectHolder (DeferredRegistry also works). Since you are OVERRIDING a vanilla entity, you match the object holder's string parameter with the desired minecraft id you want to override with.

Nope, didn't work. They're still all Pigs

Link to comment
Share on other sites

Bump

 

On 6/19/2020 at 2:32 PM, [NoOneButNo] said:

I won't say its little cluttered, its damn as hell as cluttered as it can be. I will be analysing this but don't expect a fast reply soon.

Should I reduce the code on Github to only include the part that is related to the issue, to save you the headache of searching through the monstrosity that is my mod's source code?

Link to comment
Share on other sites

2 hours ago, [NoOneButNo] said:

I don't know why you have so many hacks set when its not even needed. You even overrided the vanilla enchantments and item wrong. take a look at choonster's github. https://github.com/Choonster-Minecraft-Mods/TestMod3/tree/1.14.4/src/main/java/choonster

Oh, all the hack methods (Such as setFinalStatic and all that) were before I heard that the Forge registry allowed you to just plop your own replacements in. If that's what you meant you could safely ignore all the reflection in that class because I don't actually use those anymore

 

If not I'm not too sure how because I registered the replacement items and enchantments following the tutorials online, through registry events. The Custom Items + the Enchantments also work as intended as well (Or at least haven't broken down yet, unlike the entities)

Link to comment
Share on other sites

I just checked out Choonster's mod in hopes of finding Entity registration code but unfortunately it uses the older system and can be used for 1.15.2 😧

 

EDIT: Nevermind I'm blind I was looking at the 1.8 branch when there was a 1.14.4 branch *Facepalm

 

EDIT 2: Choonster's code didn't work for me :/

Edited by _vertig0
Link to comment
Share on other sites

1 hour ago, poopoodice said:

What do you mean by "didn't work" ?

By that I mean I'm still facing the original problem that caused me to post the thread. The Villager and Zombie Villager that I replaced are still spawning as pigs

 

I'm starting to think this is a Forge Bug, since my code is exactly the same as all the tutorials I've followed so far

Link to comment
Share on other sites

Here's an example of how you override things:

 

@ObjectHolder("minecraft:quick_charge")
public static final Enchantment QUICK_CHARGE = null;


@SubscribeEvent 
public void onRegistry(RegistryEvent.Register<Enchantment> reg){

  //note: The class that you are using should be the one you made for the Enchantment Quickcharge. Enchantment class is an abstract class.
  reg.getRegistry().register(new Enchantment().setRegistryName(new ResourceLocation("minecraft", "quick_charge")));
}

 

Same thing applies for entity types, etc.

Edited by [NoOneButNo]
Link to comment
Share on other sites

3 hours ago, [NoOneButNo] said:

Here's an example of how you override things:

 


@ObjectHolder("minecraft:quick_charge")
public static final Enchantment QUICK_CHARGE = null;


@SubscribeEvent 
public void onRegistry(RegistryEvent.Register<Enchantment> reg){

  //note: The class that you are using should be the one you made for the Enchantment Quickcharge. Enchantment class is an abstract class.
  reg.getRegistry().register(new Enchantment().setRegistryName(new ResourceLocation("minecraft", "quick_charge")));
}

 

Same thing applies for entity types, etc.

I'll give it a shot and let you know if it works for entities, thanks

 

On a side note, is it ok to not put the variable and the ObjectHolder? I only stored the new overriding enchantments and stuff in a variable for debugging, my mod doesn't actually need it

Link to comment
Share on other sites

3 hours ago, [NoOneButNo] said:

Here's an example of how you override things:

 


@ObjectHolder("minecraft:quick_charge")
public static final Enchantment QUICK_CHARGE = null;


@SubscribeEvent 
public void onRegistry(RegistryEvent.Register<Enchantment> reg){

  //note: The class that you are using should be the one you made for the Enchantment Quickcharge. Enchantment class is an abstract class.
  reg.getRegistry().register(new Enchantment().setRegistryName(new ResourceLocation("minecraft", "quick_charge")));
}

 

Same thing applies for entity types, etc.

Nope, didn't work either:

 

[20:36:48] [Server thread/INFO] [mod.server.forge.ForgeServerCore/]: Spawn List Entry Removed: minecraft:pig*(1-1):5
[20:36:48] [Server thread/INFO] [mod.server.forge.ForgeServerCore/]: Spawn List Entry Removed: minecraft:pig*(1-1):5
[20:36:48] [Server thread/INFO] [mod.server.forge.ForgeServerCore/]: Spawn List Entry Removed: minecraft:pig*(1-1):5
[20:36:48] [Server thread/INFO] [mod.server.forge.ForgeServerCore/]: Spawn List Entry Removed: minecraft:pig*(1-1):5

(The console log is 100 lines long, I shortened it to 4 lines because every lines says the same thing)

The above should be printing "Spawn List Entry Removed: minecraft:zombie_villager" if it had been successful

 

Here's the updated code:

    // You can use EventBusSubscriber to automatically subscribe events on the contained class (this is subscribing to the MOD
    // Event bus for receiving Registry Events)
    @Mod.EventBusSubscriber(bus=Mod.EventBusSubscriber.Bus.MOD)
    public static class RegistryEvents {
        @SubscribeEvent
        public static void onBlocksRegistry(final RegistryEvent.Register<Block> blockRegistryEvent) {
            // register a new block here
            LOGGER.info("HELLO from Register Block");
            blockRegistryEvent.getRegistry().registerAll(new BlockSweetBerryBush(Block.Properties.create(Material.PLANTS).tickRandomly().doesNotBlockMovement().sound(SoundType.SWEET_BERRY_BUSH)).setRegistryName(new ResourceLocation("minecraft", "sweet_berry_bush")));
        }
        
        @SubscribeEvent
        public static void onItemRegistry(final RegistryEvent.Register<Item> event) {
        	event.getRegistry().registerAll(new ItemCrossbow((new Item.Properties()).maxStackSize(1).group(ItemGroup.COMBAT).maxDamage(397)).setRegistryName(new ResourceLocation("minecraft", "crossbow")), new ItemBow((new Item.Properties()).maxDamage(384).group(ItemGroup.COMBAT)).setRegistryName(new ResourceLocation("minecraft", "bow")));
        }
        
        @SubscribeEvent
        public static void onEntityRegistry(final RegistryEvent.Register<EntityType<?>> event) {
        	ResourceLocation villagerRegistry = new ResourceLocation("minecraft", "villager");
        	ResourceLocation zombieVillagerRegistry = new ResourceLocation("minecraft", "zombie_villager");
        	
        	event.getRegistry().registerAll(EntityType.Builder.<VillagerEntity>create(EntityVillager::new, EntityClassification.MISC).size(0.6F, 1.95F).build(villagerRegistry.toString()).setRegistryName(villagerRegistry), EntityType.Builder.create(EntityZombieVillager::new, EntityClassification.MONSTER).size(0.6F, 1.95F).immuneToFire().build(zombieVillagerRegistry.toString()).setRegistryName(zombieVillagerRegistry));
        }
        
        @SubscribeEvent
        public static void onEnchantRegistry(final RegistryEvent.Register<Enchantment> event) {
        	event.getRegistry().registerAll(new EnchantmentPiercing(Enchantment.Rarity.COMMON, EquipmentSlotType.MAINHAND).setRegistryName(new ResourceLocation("minecraft", "piercing")), new EnchantmentQuickCharge(Enchantment.Rarity.UNCOMMON, EquipmentSlotType.MAINHAND).setRegistryName(new ResourceLocation("minecraft", "quick_charge")));
        }
    }

I even went into the game and grabbed a Villager Spawn egg just to check, and, you guessed it, it was a Pig making Villager noises

 

I'm aware that the default Entity in the base vanilla code registers is a Pig, and Minecraft defaults to that if something goes wrong with registering the entity. But if that's the case, ALL Villagers in Minecraft should be Pigs, yet naturally spawning Villagers in my server (In Villages) are totally unaffected and have my custom traits, but Villagers spawned with other means are always Pigs

Link to comment
Share on other sites

On 6/21/2020 at 1:47 PM, _vertig0 said:

Villagers spawned with other means

Do you just mean with spawn eggs? Or do commands not work either?

Vanilla spawn eggs (I believe) have the entity set when they are created, so if you override the entity, I think you also need to override the spawn egg to make it work.

Disclaimer: I've not actually done it myself, but I believe that is the case.

Link to comment
Share on other sites

2 minutes ago, Alpvax said:

Do you just mean with spawn eggs? Or do commands not work either?

Vanilla spawn eggs (I believe) have the entity set when they are created, so if you override the entity, I think you also need to override the spawn egg to make it work.

Disclaimer: I've not actually done it myself, but I believe that is the case.

Villagers cured from Zombie Villagers also become Pigs sadly ;-;

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

    • Thanks for the feedback. But it seems there is not really an easy way for this, most of the code is hard-coded and could not be accessed directly. 😞 I worked around this by using the "RenderHandEvent" and "RenderPlayerEvent" to create a dedicated render for my crossbow item.
    • I'm wondering how to go about creating a block that is essentially an Ender Chest (its contents are the same regardless of which chest you check), but where any player in that world can see the contents of the Ender Chest. I was thinking of modifying the saved data for a world, but I'm struggling to understand how that even works. Are there any tutorials out there on tools I can use to work on this sort of problem?  EDIT: I just found this post: is this about what I should be looking at for 1.16.5?    
    • Hey guys I have created a mod that assigns levels to mobs and scales them up using capabilities, everything works great but because of the recent changes to capabilities I am unable to find examples on how to save the level of my mobs so that it remains the same if I restart the server. I will upload all my files relating to the capability and hope you guys can lead me in the right direction   package com.chickenwand3.rpgmod.core.capabilities.entity; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.capabilities.CapabilityInject; import net.minecraftforge.common.capabilities.CapabilityManager; @SuppressWarnings("removal") public class CapabilityMobLevel { @CapabilityInject(MobLevel.class) public static Capability<MobLevel> MOB_LEVEL_CAPABILITY = null; public static void register() { CapabilityManager.INSTANCE.register(MobLevel.class); } } package com.chickenwand3.rpgmod.core.capabilities.entity; public class DefaultMobLevel implements MobLevel { public int mobLevel; public float mobMaxHealth; public float mobCurrentHealth; public boolean crazy; public boolean isCrazy() { return crazy; } public float getMaxHealth() { return mobMaxHealth; } public float getCurrentHealth() { return mobCurrentHealth; } } package com.chickenwand3.rpgmod.core.capabilities.entity; public interface MobLevel { } package com.chickenwand3.rpgmod.core.capabilities.entity; import com.chickenwand3.rpgmod.RPGMod; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.Mob; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.monster.Zombie; import net.minecraft.world.item.enchantment.Enchantments; import net.minecraftforge.event.AttachCapabilitiesEvent; import net.minecraftforge.event.entity.EntityJoinWorldEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; @Mod.EventBusSubscriber(modid = RPGMod.MODID, bus = Mod.EventBusSubscriber.Bus.FORGE) public class MobLevelEventHandler { @SubscribeEvent public static void onAttachCapabilitiesEvent(AttachCapabilitiesEvent<Entity> event) { if (event.getObject() instanceof Mob && !event.getObject().getCommandSenderWorld().isClientSide) { MobLevelProvider providerMobLevel = new MobLevelProvider(); event.addCapability(new ResourceLocation(RPGMod.MODID, "moblevel"), providerMobLevel); event.addListener(providerMobLevel::invalidate); } } @SubscribeEvent public static void OnSpawn(final EntityJoinWorldEvent event) { if (event.getEntity()instanceof Mob target && !event.getWorld().isClientSide) { target.getCapability(CapabilityMobLevel.MOB_LEVEL_CAPABILITY).ifPresent(mobLevel -> { DefaultMobLevel actualMobLevel = (DefaultMobLevel) mobLevel; actualMobLevel.mobLevel = (randomizeMobLevel()); if (superCrazy(actualMobLevel.mobLevel)) { actualMobLevel.crazy = true; } if (actualMobLevel.crazy) { if (!target.getMainHandItem().isEmpty()) { target.getMainHandItem().enchant(Enchantments.FIRE_ASPECT, 1); } if (event.getEntity()instanceof Zombie zombie) { zombie.getAttribute(Attributes.SPAWN_REINFORCEMENTS_CHANCE).setBaseValue(0.99D); } System.out.println("Super Crazy " + target.getName() + " has spawned!"); } actualMobLevel.mobMaxHealth = (target.getMaxHealth() * actualMobLevel.mobLevel * 2); actualMobLevel.mobCurrentHealth = actualMobLevel.mobMaxHealth; target.getAttribute(Attributes.MOVEMENT_SPEED) .setBaseValue(target.getAttributeValue(Attributes.MOVEMENT_SPEED) * (1 + (actualMobLevel.mobLevel - 1.0) / 10.0)); if (target.getAttribute(Attributes.ATTACK_DAMAGE) != null) { target.getAttribute(Attributes.ATTACK_DAMAGE) .setBaseValue(target.getAttributeValue(Attributes.ATTACK_DAMAGE) * (1 + (actualMobLevel.mobLevel - 1.0) / 2.0)); } }); } } private static int randomizeMobLevel() { boolean roll = true; int level = 1; while (roll) { if (Math.random() > .5) { level += 1; roll = true; } else { roll = false; } } return level; } private static boolean superCrazy(int level) { boolean result = false; if (level >= 5) { if (Math.random() < .25) { result = true; } else result = false; } return result; } } package com.chickenwand3.rpgmod.core.capabilities.entity; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.capabilities.ICapabilitySerializable; import net.minecraftforge.common.util.LazyOptional; import javax.annotation.Nonnull; import javax.annotation.Nullable; public class MobLevelProvider implements ICapabilitySerializable<CompoundTag> { private final DefaultMobLevel mobLevel = new DefaultMobLevel(); private final LazyOptional<MobLevel> mobLevelOptional = LazyOptional.of(() -> mobLevel); public void invalidate() { mobLevelOptional.invalidate(); } @Nonnull @Override public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, @Nullable Direction side) { return mobLevelOptional.cast(); } @Override public CompoundTag serializeNBT() { if (CapabilityMobLevel.MOB_LEVEL_CAPABILITY == null) { return new CompoundTag(); } else { CompoundTag compoundNBT = new CompoundTag(); compoundNBT.putInt("mobLevel", mobLevel.mobLevel); compoundNBT.putFloat("mobCurrentHealth", mobLevel.mobCurrentHealth); compoundNBT.putFloat("mobMaxHealth", mobLevel.mobMaxHealth); compoundNBT.putBoolean("crazy", mobLevel.crazy); return compoundNBT; } } @Override public void deserializeNBT(CompoundTag nbt) { if (CapabilityMobLevel.MOB_LEVEL_CAPABILITY != null) { mobLevel.mobLevel = (nbt.getInt("mobLevel")); float mobCurrentHealth = nbt.getFloat("mobCurrentHealth"); mobLevel.mobCurrentHealth = (mobCurrentHealth); float mobMaxHealth = nbt.getFloat("mobMaxHealth"); mobLevel.mobMaxHealth = (mobMaxHealth); boolean crazy = nbt.getBoolean("crazy"); mobLevel.crazy = (crazy); } } }  
    • Trying to install forge on Debian 11 (bullseye). I ran java -jar forge-1.18-38.0.4-installer.jar in the terminal, and that part seemed to work fine. I did the install client, and it was fine until the building processors step. It stopped and gave the following error message: Failed to run processor: java.lang.RuntimeException:Could not delete output file: home/[user]/.minecraft/libraries/de/oceanlabs/mcp/mcp_config/1.18-20211130.085255/mcp_config-1.18-20211130.085255-mappings.txt My dad did the same thing on his computer without complications. Any help would be much appreciated. Below is the installation log: JVM info: Debian - 17.0.1 - 17.0.1+12-Debian-1deb11u2 java.net.preferIPv4Stack=true Found java version 17.0.1 Extracting json Considering minecraft client jar Downloading libraries Found 0 additional library directories Considering library cpw.mods:securejarhandler:0.9.54 File exists: Checksum validated. Considering library org.ow2.asm:asm:9.1 File exists: Checksum validated. Considering library org.ow2.asm:asm-commons:9.1 File exists: Checksum validated. Considering library org.ow2.asm:asm-tree:9.1 File exists: Checksum validated. Considering library org.ow2.asm:asm-util:9.1 File exists: Checksum validated. Considering library org.ow2.asm:asm-analysis:9.1 File exists: Checksum validated. Considering library net.minecraftforge:accesstransformers:8.0.4 File exists: Checksum validated. Considering library org.antlr:antlr4-runtime:4.9.1 File exists: Checksum validated. Considering library net.minecraftforge:eventbus:5.0.3 File exists: Checksum validated. Considering library net.minecraftforge:forgespi:4.0.10 File exists: Checksum validated. Considering library net.minecraftforge:coremods:5.0.1 File exists: Checksum validated. Considering library cpw.mods:modlauncher:9.0.7 File exists: Checksum validated. Considering library net.minecraftforge:unsafe:0.2.0 File exists: Checksum validated. Considering library com.electronwill.night-config:core:3.6.4 File exists: Checksum validated. Considering library com.electronwill.night-config:toml:3.6.4 File exists: Checksum validated. Considering library org.apache.maven:maven-artifact:3.6.3 File exists: Checksum validated. Considering library org.apache.commons:commons-lang3:3.12.0 File exists: Checksum validated. Considering library net.jodah:typetools:0.8.3 File exists: Checksum validated. Considering library org.apache.logging.log4j:log4j-api:2.14.1 File exists: Checksum validated. Considering library org.apache.logging.log4j:log4j-core:2.14.1 File exists: Checksum validated. Considering library net.minecrell:terminalconsoleappender:1.2.0 File exists: Checksum validated. Considering library org.jline:jline-reader:3.12.1 File exists: Checksum validated. Considering library org.jline:jline-terminal:3.12.1 File exists: Checksum validated. Considering library net.sf.jopt-simple:jopt-simple:5.0.4 File exists: Checksum validated. Considering library org.openjdk.nashorn:nashorn-core:15.3 File exists: Checksum validated. Considering library com.google.guava:guava:31.0.1-jre File exists: Checksum validated. Considering library com.google.code.gson:gson:2.8.8 File exists: Checksum validated. Considering library cpw.mods:bootstraplauncher:0.1.17 File exists: Checksum validated. Considering library net.minecraftforge:fmlloader:1.18-38.0.4 File exists: Checksum validated. Considering library com.github.jponge:lzma-java:1.3 File exists: Checksum validated. Considering library com.google.code.findbugs:jsr305:3.0.2 File exists: Checksum validated. Considering library com.google.code.gson:gson:2.8.7 File exists: Checksum validated. Considering library com.google.errorprone:error_prone_annotations:2.1.3 File exists: Checksum validated. Considering library com.google.guava:guava:20.0 File exists: Checksum validated. Considering library com.google.guava:guava:25.1-jre File exists: Checksum validated. Considering library com.google.j2objc:j2objc-annotations:1.1 File exists: Checksum validated. Considering library com.nothome:javaxdelta:2.0.1 File exists: Checksum validated. Considering library com.opencsv:opencsv:4.4 File exists: Checksum validated. Considering library commons-beanutils:commons-beanutils:1.9.3 File exists: Checksum validated. Considering library commons-collections:commons-collections:3.2.2 File exists: Checksum validated. Considering library commons-io:commons-io:2.4 File exists: Checksum validated. Considering library commons-logging:commons-logging:1.2 File exists: Checksum validated. Considering library de.oceanlabs.mcp:mcp_config:1.18-20211130.085255@zip File exists: Checksum validated. Considering library de.siegmar:fastcsv:2.0.0 File exists: Checksum validated. Considering library net.md-5:SpecialSource:1.10.0 File exists: Checksum validated. Considering library net.minecraftforge:ForgeAutoRenamingTool:0.1.17:all File exists: Checksum validated. Considering library net.minecraftforge:binarypatcher:1.0.12 File exists: Checksum validated. Considering library net.minecraftforge:fmlcore:1.18-38.0.4 File exists: Checksum validated. Considering library net.minecraftforge:fmlloader:1.18-38.0.4 File exists: Checksum validated. Considering library net.minecraftforge:forge:1.18-38.0.4:universal File exists: Checksum validated. Considering library net.minecraftforge:installertools:1.2.10 File exists: Checksum validated. Considering library net.minecraftforge:jarsplitter:1.1.4 File exists: Checksum validated. Considering library net.minecraftforge:javafmllanguage:1.18-38.0.4 File exists: Checksum validated. Considering library net.minecraftforge:mclanguage:1.18-38.0.4 File exists: Checksum validated. Considering library net.minecraftforge:srgutils:0.4.3 File exists: Checksum validated. Considering library net.minecraftforge:srgutils:0.4.7 File exists: Checksum validated. Considering library net.sf.jopt-simple:jopt-simple:5.0.4 File exists: Checksum validated. Considering library net.sf.jopt-simple:jopt-simple:6.0-alpha-3 File exists: Checksum validated. Considering library org.apache.commons:commons-collections4:4.2 File exists: Checksum validated. Considering library org.apache.commons:commons-lang3:3.8.1 File exists: Checksum validated. Considering library org.apache.commons:commons-text:1.3 File exists: Checksum validated. Considering library org.checkerframework:checker-qual:2.0.0 File exists: Checksum validated. Considering library org.codehaus.mojo:animal-sniffer-annotations:1.14 File exists: Checksum validated. Considering library org.ow2.asm:asm-analysis:9.1 File exists: Checksum validated. Considering library org.ow2.asm:asm-analysis:9.2 File exists: Checksum validated. Considering library org.ow2.asm:asm-commons:9.1 File exists: Checksum validated. Considering library org.ow2.asm:asm-commons:9.2 File exists: Checksum validated. Considering library org.ow2.asm:asm-tree:9.1 File exists: Checksum validated. Considering library org.ow2.asm:asm-tree:9.2 File exists: Checksum validated. Considering library org.ow2.asm:asm:9.1 File exists: Checksum validated. Considering library org.ow2.asm:asm:9.2 File exists: Checksum validated. Considering library trove:trove:1.0.2 File exists: Checksum validated. Created Temporary Directory: /tmp/forge_installer10859551180063758840 Extracting: /data/client.lzma Building Processors =============================================================================== MainClass: net.minecraftforge.installertools.ConsoleTool Classpath: /home/qila/.minecraft/libraries/net/minecraftforge/installertools/1.2.10/installertools-1.2.10.jar /home/qila/.minecraft/libraries/net/md-5/SpecialSource/1.10.0/SpecialSource-1.10.0.jar /home/qila/.minecraft/libraries/net/sf/jopt-simple/jopt-simple/5.0.4/jopt-simple-5.0.4.jar /home/qila/.minecraft/libraries/com/google/code/gson/gson/2.8.7/gson-2.8.7.jar /home/qila/.minecraft/libraries/de/siegmar/fastcsv/2.0.0/fastcsv-2.0.0.jar /home/qila/.minecraft/libraries/net/minecraftforge/srgutils/0.4.3/srgutils-0.4.3.jar /home/qila/.minecraft/libraries/org/ow2/asm/asm-commons/9.1/asm-commons-9.1.jar /home/qila/.minecraft/libraries/com/google/guava/guava/20.0/guava-20.0.jar /home/qila/.minecraft/libraries/com/opencsv/opencsv/4.4/opencsv-4.4.jar /home/qila/.minecraft/libraries/org/ow2/asm/asm-analysis/9.1/asm-analysis-9.1.jar /home/qila/.minecraft/libraries/org/ow2/asm/asm-tree/9.1/asm-tree-9.1.jar /home/qila/.minecraft/libraries/org/ow2/asm/asm/9.1/asm-9.1.jar /home/qila/.minecraft/libraries/org/apache/commons/commons-text/1.3/commons-text-1.3.jar /home/qila/.minecraft/libraries/org/apache/commons/commons-lang3/3.8.1/commons-lang3-3.8.1.jar /home/qila/.minecraft/libraries/commons-beanutils/commons-beanutils/1.9.3/commons-beanutils-1.9.3.jar /home/qila/.minecraft/libraries/org/apache/commons/commons-collections4/4.2/commons-collections4-4.2.jar /home/qila/.minecraft/libraries/commons-logging/commons-logging/1.2/commons-logging-1.2.jar /home/qila/.minecraft/libraries/commons-collections/commons-collections/3.2.2/commons-collections-3.2.2.jar Args: --task, MCP_DATA, --input, /home/qila/.minecraft/libraries/de/oceanlabs/mcp/mcp_config/1.18-20211130.085255/mcp_config-1.18-20211130.085255.zip, --output, /home/qila/.minecraft/libraries/de/oceanlabs/mcp/mcp_config/1.18-20211130.085255/mcp_config-1.18-20211130.085255-mappings.txt, --key, mappings Task: MCP_DATA Input: /home/qila/.minecraft/libraries/de/oceanlabs/mcp/mcp_config/1.18-20211130.085255/mcp_config-1.18-20211130.085255.zip Output: /home/qila/.minecraft/libraries/de/oceanlabs/mcp/mcp_config/1.18-20211130.085255/mcp_config-1.18-20211130.085255-mappings.txt Key: mappings Could not delete output file: /home/qila/.minecraft/libraries/de/oceanlabs/mcp/mcp_config/1.18-20211130.085255/mcp_config-1.18-20211130.085255-mappings.txt java.lang.RuntimeException: Could not delete output file: /home/qila/.minecraft/libraries/de/oceanlabs/mcp/mcp_config/1.18-20211130.085255/mcp_config-1.18-20211130.085255-mappings.txt at net.minecraftforge.installertools.Task.error(Task.java:28) at net.minecraftforge.installertools.McpData.process(McpData.java:63) at net.minecraftforge.installertools.ConsoleTool.main(ConsoleTool.java:55) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at net.minecraftforge.installer.actions.PostProcessors.process(PostProcessors.java:226) at net.minecraftforge.installer.actions.ClientInstall.run(ClientInstall.java:144) at net.minecraftforge.installer.InstallerPanel.run(InstallerPanel.java:423) at net.minecraftforge.installer.SimpleInstaller.launchGui(SimpleInstaller.java:175) at net.minecraftforge.installer.SimpleInstaller.main(SimpleInstaller.java:147)  
    • @RideableEntitiesModElements.ModElement.Tag public class BabytigerEntity extends RideableEntitiesModElements.ModElement { public static EntityType entity = (EntityType.Builder.<CustomEntity>create(CustomEntity::new, EntityClassification.MONSTER) .setShouldReceiveVelocityUpdates(true).setTrackingRange(64).setUpdateInterval(3).setCustomClientFactory(CustomEntity::new) .size(0.6f, 1.8f)).build("babytiger").setRegistryName("babytiger"); public BabytigerEntity(RideableEntitiesModElements instance) { super(instance, 4); FMLJavaModLoadingContext.get().getModEventBus().register(new BabytigerRenderer.ModelRegisterHandler()); FMLJavaModLoadingContext.get().getModEventBus().register(new EntityAttributesRegisterHandler()); MinecraftForge.EVENT_BUS.register(this); } @Override public void initElements() { elements.entities.add(() -> entity); elements.items .add(() -> new SpawnEggItem(entity, -1, -1, new Item.Properties().group(ItemGroup.MISC)).setRegistryName("babytiger_spawn_egg")); } @SubscribeEvent public void addFeatureToBiomes(BiomeLoadingEvent event) { event.getSpawns().getSpawner(EntityClassification.MONSTER).add(new MobSpawnInfo.Spawners(entity, 20, 4, 4)); } @Override public void init(FMLCommonSetupEvent event) { EntitySpawnPlacementRegistry.register(entity, EntitySpawnPlacementRegistry.PlacementType.ON_GROUND, Heightmap.Type.MOTION_BLOCKING_NO_LEAVES, MonsterEntity::canMonsterSpawn); } private static class EntityAttributesRegisterHandler { @SubscribeEvent public void onEntityAttributeCreation(EntityAttributeCreationEvent event) { AttributeModifierMap.MutableAttribute ammma = MobEntity.func_233666_p_(); ammma = ammma.createMutableAttribute(Attributes.MOVEMENT_SPEED, 0.8); ammma = ammma.createMutableAttribute(Attributes.MAX_HEALTH, 10); ammma = ammma.createMutableAttribute(Attributes.ARMOR, 0); ammma = ammma.createMutableAttribute(Attributes.ATTACK_DAMAGE, 3); event.put(entity, ammma.create()); } } public static class CustomEntity extends CreatureEntity { public CustomEntity(FMLPlayMessages.SpawnEntity packet, World world) { this(entity, world); } public CustomEntity(EntityType<CustomEntity> type, World world) { super(type, world); experienceValue = 0; setNoAI(false); } @Override public IPacket<?> createSpawnPacket() { return NetworkHooks.getEntitySpawningPacket(this); } @Override protected void registerGoals() { super.registerGoals(); this.goalSelector.addGoal(1, new MeleeAttackGoal(this, 1.2, false)); this.goalSelector.addGoal(2, new RandomWalkingGoal(this, 1)); this.targetSelector.addGoal(3, new HurtByTargetGoal(this)); this.goalSelector.addGoal(4, new LookRandomlyGoal(this)); this.goalSelector.addGoal(5, new SwimGoal(this)); } @Override public CreatureAttribute getCreatureAttribute() { return CreatureAttribute.UNDEFINED; } @Override public net.minecraft.util.SoundEvent getHurtSound(DamageSource ds) { return (net.minecraft.util.SoundEvent) ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation("entity.generic.hurt")); } @Override public net.minecraft.util.SoundEvent getDeathSound() { return (net.minecraft.util.SoundEvent) ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation("entity.generic.death")); } @Override public ActionResultType func_230254_b_(PlayerEntity sourceentity, Hand hand) { ItemStack itemstack = sourceentity.getHeldItem(hand); ActionResultType retval = ActionResultType.func_233537_a_(this.world.isRemote()); super.func_230254_b_(sourceentity, hand); sourceentity.startRiding(this); return retval; } @Override public void travel(Vector3d dir) { Entity entity = this.getPassengers().isEmpty() ? null : (Entity) this.getPassengers().get(0); if (this.isBeingRidden()) { this.rotationYaw = entity.rotationYaw; this.prevRotationYaw = this.rotationYaw; this.rotationPitch = entity.rotationPitch * 0.5F; this.setRotation(this.rotationYaw, this.rotationPitch); this.jumpMovementFactor = this.getAIMoveSpeed() * 0.15F; this.renderYawOffset = entity.rotationYaw; this.rotationYawHead = entity.rotationYaw; this.stepHeight = 1.0F; if (entity instanceof LivingEntity) { this.setAIMoveSpeed((float) this.getAttributeValue(Attributes.MOVEMENT_SPEED)); float forward = ((LivingEntity) entity).moveForward; float strafe = ((LivingEntity) entity).moveStrafing; super.travel(new Vector3d(strafe, 0, forward)); } this.prevLimbSwingAmount = this.limbSwingAmount; double d1 = this.getPosX() - this.prevPosX; double d0 = this.getPosZ() - this.prevPosZ; float f1 = MathHelper.sqrt(d1 * d1 + d0 * d0) * 4.0F; if (f1 > 1.0F) f1 = 1.0F; this.limbSwingAmount += (f1 - this.limbSwingAmount) * 0.4F; this.limbSwing += this.limbSwingAmount; return; } this.stepHeight = 0.5F; this.jumpMovementFactor = 0.02F; super.travel(dir); } } } ok thanks and for the people that want to copy paste here is the code
  • Topics

  • Who's Online (See full list)

×
×
  • Create New...

Important Information

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