
Jenhde
Members-
Posts
4 -
Joined
-
Last visited
Jenhde's Achievements

Tree Puncher (2/8)
0
Reputation
-
Someone could help me.
-
Thank you very much, I managed to do as you said, and guided by some github repositories EDIT: After trying the mod for a few moments, when it comes to killing an enemy, the game gives me an error "net.minecraft.crash.ReportedException: Exception ticking world" Crash-Report: ---- Minecraft Crash Report ---- // My bad. Time: 16/03/20 05:16 AM Description: Exception ticking world java.lang.IllegalStateException: Entity is already tracked! at net.minecraft.world.server.ChunkManager.track(ChunkManager.java:948) ~[?:?] {re:classloading} at net.minecraft.world.server.ServerChunkProvider.track(ServerChunkProvider.java:450) ~[?:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.world.server.ServerWorld.onEntityAdded(ServerWorld.java:1012) ~[?:?] {re:classloading} at net.minecraft.world.server.ServerWorld.tick(ServerWorld.java:367) ~[?:?] {re:classloading} at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:878) ~[?:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:813) ~[?:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:118) ~[?:?] {re:classloading,pl:runtimedistcleaner:A} at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:659) [?:?] {re:classloading,pl:accesstransformer:B} at java.lang.Thread.run(Thread.java:748) [?:1.8.0_211] {} A detailed walkthrough of the error, its code path and all known details is as follows: --------------------------------------------------------------------------------------- -- Head -- Thread: Server thread Stacktrace: at net.minecraft.world.server.ChunkManager.track(ChunkManager.java:948) at net.minecraft.world.server.ServerChunkProvider.track(ServerChunkProvider.java:450) at net.minecraft.world.server.ServerWorld.onEntityAdded(ServerWorld.java:1012) at net.minecraft.world.server.ServerWorld.tick(ServerWorld.java:367) -- Affected level -- Details: All players: 1 total; [ServerPlayerEntity['Dev'/324, l='New World', x=53.94, y=74.00, z=5.63]] Chunk stats: ServerChunkCache: 2342 Level dimension: DimensionType{minecraft:overworld} Level name: New World Level seed: -5162292807879311142 Level generator: ID 00 - default, ver 1. Features enabled: true Level generator options: {} Level spawn location: World: (0,73,-32), Chunk: (at 0,4,0 in 0,-2; contains blocks 0,0,-32 to 15,255,-17), Region: (0,-1; contains chunks 0,-32 to 31,-1, blocks 0,0,-512 to 511,255,-1) Level time: 415 game time, 415 day time Level storage version: 0x04ABD - Anvil Level weather: Rain time: 140401 (now: false), thunder time: 124012 (now: false) Level game mode: Game mode: creative (ID 1). Hardcore: false. Cheats: true Stacktrace: at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:878) at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:813) at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:118) at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:659) at java.lang.Thread.run(Thread.java:748) -- System Details -- Details: Minecraft Version: 1.15.1 Minecraft Version ID: 1.15.1 Operating System: Windows 10 (amd64) version 10.0 Java Version: 1.8.0_211, Oracle Corporation Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation Memory: 472310040 bytes (450 MB) / 2244476928 bytes (2140 MB) up to 3782737920 bytes (3607 MB) CPUs: 12 JVM Flags: 1 total; -XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump ModLauncher: 5.0.0-milestone.4+67+b1a340b ModLauncher launch target: fmluserdevclient ModLauncher naming: mcp ModLauncher services: /eventbus-2.0.0-milestone.1-service.jar eventbus PLUGINSERVICE /forge-1.15.1-30.0.51_mapped_snapshot_20200225-1.15.1-launcher.jar object_holder_definalize PLUGINSERVICE /forge-1.15.1-30.0.51_mapped_snapshot_20200225-1.15.1-launcher.jar runtime_enum_extender PLUGINSERVICE /accesstransformers-2.0.0-milestone.1-shadowed.jar accesstransformer PLUGINSERVICE /forge-1.15.1-30.0.51_mapped_snapshot_20200225-1.15.1-launcher.jar capability_inject_definalize PLUGINSERVICE /forge-1.15.1-30.0.51_mapped_snapshot_20200225-1.15.1-launcher.jar runtimedistcleaner PLUGINSERVICE /forge-1.15.1-30.0.51_mapped_snapshot_20200225-1.15.1-launcher.jar fml TRANSFORMATIONSERVICE FML: 30.0 Forge: net.minecraftforge:30.0.51 FML Language Providers: [email protected] minecraft@1 Mod List: client-extra.jar Minecraft {[email protected] DONE} forge-1.15.1-30.0.51_mapped_snapshot_20200225-1.15.1-recomp.jar Forge {[email protected] DONE} main randommobsize {[email protected] DONE} Player Count: 1 / 8; [ServerPlayerEntity['Dev'/324, l='New World', x=53.94, y=74.00, z=5.63]] Data Packs: vanilla, mod:forge (incompatible), mod:randommobsize Type: Integrated Server (map_client.txt) Is Modded: Definitely; Client brand changed to 'forge' ModEventSuscriber.java package com.jenhde.randommobsize; import com.jenhde.randommobsize.capabilities.SizeCapability; import com.jenhde.randommobsize.capabilities.SizeStorage; import com.jenhde.randommobsize.capabilities.instances.Size; import com.jenhde.randommobsize.capabilities.interfaces.ISize; import com.jenhde.randommobsize.network.SizePacketHandler; import com.mojang.blaze3d.matrix.MatrixStack; import net.minecraft.client.renderer.Vector3f; import net.minecraft.client.renderer.entity.model.GiantModel; import net.minecraft.entity.*; import net.minecraft.entity.item.ItemEntity; import net.minecraft.entity.monster.CreeperEntity; import net.minecraft.entity.monster.ZombieEntity; import net.minecraft.entity.passive.CowEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.IntNBT; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.world.World; import net.minecraft.world.storage.loot.IRandomRange; import net.minecraftforge.client.event.RenderLivingEvent; import net.minecraftforge.common.capabilities.CapabilityManager; import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.event.AttachCapabilitiesEvent; import net.minecraftforge.event.entity.EntityEvent; import net.minecraftforge.event.entity.EntityJoinWorldEvent; import net.minecraftforge.event.entity.living.LivingDropsEvent; import net.minecraftforge.event.entity.living.LivingSpawnEvent; import net.minecraftforge.event.entity.player.PlayerEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod.EventBusSubscriber; import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent; import org.lwjgl.BufferUtils; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL20; import java.nio.FloatBuffer; import java.util.Collection; import java.util.Iterator; import java.util.Random; @EventBusSubscriber(modid = RandomMobSize.MODID) public class ModEventSuscriber { public static final Logger LOGGER = LogManager.getLogger(RandomMobSize.MODID); public static final ResourceLocation SIZE_CAP = new ResourceLocation(RandomMobSize.MODID, "sizet"); public ModEventSuscriber(){ } @SubscribeEvent public static void entityJoinWorld(EntityJoinWorldEvent event){ float [] arrSizes = new float[]{0.2f,0.2f,0.5f,0.5f,1.0f,1.0f,1.0f,2.0f,2.0f,2.0f,3.0f,3.0f,4.0f}; int generatedFloat = 0 + (int)(Math.random() * (13 - 0)); float sizet = arrSizes[generatedFloat]; Entity ent = event.getEntity(); if(!event.getEntity().world.isRemote && ent instanceof MobEntity){ ent.getCapability(SizeCapability.CAPABILITY_SIZE, null).ifPresent( cap -> { cap.setSizet(sizet); }); float Max_health_new = (float)((MobEntity) ent).getAttribute(SharedMonsterAttributes.MAX_HEALTH).getValue()*sizet; ((MobEntity) ent).getAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(Max_health_new); ((MobEntity) ent).setHealth(Max_health_new); LOGGER.debug("Max health"); LOGGER.debug(Max_health_new); if(ent instanceof CreeperEntity){ int radiusExplode = 3; if((int)sizet <= 1) radiusExplode = 1; else radiusExplode = (int)sizet * 3; LOGGER.debug("Creeper sized"); LOGGER.debug(radiusExplode); CompoundNBT compound = new CompoundNBT(); compound.put("ExplosionRadius", IntNBT.valueOf(radiusExplode *3)); ((CreeperEntity) ent).readAdditional(compound); } SizePacketHandler.sendToAllTracking(ent,sizet); } } @SubscribeEvent public static void entityStartTracking(PlayerEvent.StartTracking event){ Entity target = event.getTarget(); PlayerEntity player = event.getPlayer(); if(player instanceof ServerPlayerEntity && target instanceof MobEntity){ target.getCapability(SizeCapability.CAPABILITY_SIZE, null).ifPresent( cap -> { SizePacketHandler.sendToPlayer(event.getPlayer(),target,cap.getSizet()); }); } } @SubscribeEvent public static void onDropMob(LivingDropsEvent event) { if (!(event.getEntity() instanceof MobEntity)) return; Entity ent = event.getEntity(); World world = ent.getEntityWorld(); ent.getCapability(SizeCapability.CAPABILITY_SIZE, null).ifPresent( cap -> { int dropsQ = (int)cap.getSizet(); Collection<ItemEntity> collection = event.getDrops(); Iterator<ItemEntity> iterator = collection.iterator(); while (iterator.hasNext()) { ItemEntity Item = iterator.next(); Item.getItem().setCount(dropsQ*2); world.addEntity(Item); } } ); } @SubscribeEvent public static void preRenderLiving(RenderLivingEvent.Pre event){ Entity ent = event.getEntity(); if(ent instanceof MobEntity){ ent.getCapability(SizeCapability.CAPABILITY_SIZE, null).ifPresent( cap -> { float scalet = cap.getSizet(); double half_width = ent.getWidth()*scalet / 2; double height = ent.getHeight()*scalet; AxisAlignedBB new_BoundingBox = new AxisAlignedBB( ent.getPosX() - half_width, ent.getPosY(), ent.getPosZ()- half_width, ent.getPosX() + half_width, ent.getPosY() + (double) height, ent.getPosZ() + half_width); ent.setBoundingBox(new_BoundingBox ); //double MAX_HEALTH = ((MobEntity) ent).getAttribute(SharedMonsterAttributes.MAX_HEALTH).getBaseValue(); //((MobEntity) ent).getAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(MAX_HEALTH * scalet); event.getMatrixStack().push(); event.getMatrixStack().scale(scalet,scalet,scalet); } ); } } @SubscribeEvent public static void postRenderLiving(RenderLivingEvent.Post event){ Entity ent = event.getEntity(); if(event.getEntity() instanceof MobEntity){ event.getMatrixStack().pop(); } } @SubscribeEvent public static void onCommonSetup(FMLCommonSetupEvent event) { //Register our Capability CapabilityManager.INSTANCE.register(ISize.class, new SizeStorage(), Size::new); SizePacketHandler.register(); LOGGER.debug("COMMON SETUP"); } @SubscribeEvent public static void onAttachCapability(final AttachCapabilitiesEvent<Entity> event){ if (event.getCapabilities().containsKey(SIZE_CAP)) return; if(!(event.getObject().getEntity() instanceof MobEntity)) return; event.addCapability(SIZE_CAP,new SizeCapability()); LOGGER.debug("Added Capability"); } }
-
Is there a tutorial on that subject? Or do you know of a repository? Thanks for the help
-
Hi guys, I have a problem assigning extra values to the mobs, I have a capability that assigns them a random value for their size, which is used to render the model of the mob. If I initialize the random size in the capability constructor, every time I want to access it from different events it gives me a different number. On the other hand, if I randomly assign it in the "EntityConstructing" event when I get the capability value in another event, it returns it as if I had not assigned it. ModEventSuscriber.java package com.jenhde.randommobsize; import com.jenhde.randommobsize.capabilities.SizeCapability; import com.jenhde.randommobsize.capabilities.SizeStorage; import com.jenhde.randommobsize.capabilities.instances.Size; import com.jenhde.randommobsize.capabilities.interfaces.ISize; import com.mojang.blaze3d.matrix.MatrixStack; import net.minecraft.client.renderer.Vector3f; import net.minecraft.client.renderer.entity.model.GiantModel; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.MobEntity; import net.minecraft.entity.item.ItemEntity; import net.minecraft.entity.monster.ZombieEntity; import net.minecraft.entity.passive.CowEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.world.World; import net.minecraft.world.storage.loot.IRandomRange; import net.minecraftforge.client.event.RenderLivingEvent; import net.minecraftforge.common.capabilities.CapabilityManager; import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.event.AttachCapabilitiesEvent; import net.minecraftforge.event.entity.EntityEvent; import net.minecraftforge.event.entity.living.LivingDropsEvent; import net.minecraftforge.event.entity.living.LivingSpawnEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod.EventBusSubscriber; import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent; import org.lwjgl.BufferUtils; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL20; import java.nio.FloatBuffer; import java.util.Collection; import java.util.Iterator; import java.util.Random; @EventBusSubscriber(modid = RandomMobSize.MODID, bus = EventBusSubscriber.Bus.FORGE) public class ModEventSuscriber { public static final Logger LOGGER = LogManager.getLogger(RandomMobSize.MODID); public static final ResourceLocation SIZE_CAP = new ResourceLocation(RandomMobSize.MODID, "sizet"); public ModEventSuscriber(){ } @SubscribeEvent public void onDropMob(LivingDropsEvent event) { if (!(event.getEntity() instanceof MobEntity)) return; Entity ent = event.getEntity(); World world = ent.getEntityWorld(); //LazyOptional<ISize> sizecap = ent.getCapability(SizeCapability.CAPABILITY_SIZE, null).ifPresent( ent.getCapability(SizeCapability.CAPABILITY_SIZE, null).ifPresent( cap -> { LOGGER.debug("Capability Size: "); LOGGER.debug(cap.getSizet()); } ); Collection<ItemEntity> collection = event.getDrops(); Iterator<ItemEntity> iterator = collection.iterator(); while (iterator.hasNext()) { ItemEntity Item = iterator.next(); Item.getItem().setCount((int)3.0); world.addEntity(Item); } } @SubscribeEvent public void preRenderLiving(RenderLivingEvent.Pre event){ Entity ent = event.getEntity(); if(ent instanceof MobEntity){ ent.getCapability(SizeCapability.CAPABILITY_SIZE, null).ifPresent( cap -> { LOGGER.debug("Capability Size Render: "); LOGGER.debug(cap.getSizet()); float scalet = cap.getSizet(); double half_width = ent.getWidth()*scalet / 2; double height = ent.getHeight()*scalet; AxisAlignedBB new_BoundingBox = new AxisAlignedBB( ent.getPosX() - half_width, ent.getPosY(), ent.getPosZ()- half_width, ent.getPosX() + half_width, ent.getPosY() + (double) height, ent.getPosZ() + half_width); ent.setBoundingBox(new_BoundingBox ); event.getMatrixStack().push(); event.getMatrixStack().scale(scalet,scalet,scalet); } ); } } @SubscribeEvent public void postRenderLiving(RenderLivingEvent.Post event){ Entity ent = event.getEntity(); if(event.getEntity() instanceof MobEntity){ event.getMatrixStack().pop(); } } @SubscribeEvent public static void onCommonSetup(FMLCommonSetupEvent event) { //Register our Capability CapabilityManager.INSTANCE.register(ISize.class, new SizeStorage(), Size::new); } /*@SubscribeEvent public void onConstructing(EntityEvent.EntityConstructing event){ if(!(event.getEntity() instanceof MobEntity)) return; final LazyOptional<ISize> sizecap = event.getEntity().getCapability(SizeCapability.CAPABILITY_SIZE, null); final ISize size = sizecap.orElse(new Size()); float [] arrSizes = new float[]{0.2f,0.5f,1.0f,2.0f,3.0f,4.0f}; int generatedFloat = 0 + (int)(Math.random() * (6 - 0)); float sizet = arrSizes[generatedFloat]; size.setSizet(sizet); LOGGER.debug("Capability Size Constructing: "); LOGGER.debug(sizet); }*/ @SubscribeEvent public void attachCapability(AttachCapabilitiesEvent<Entity> event){ if(!(event.getObject() instanceof MobEntity)) return; event.addCapability(SIZE_CAP,new SizeCapability()); LOGGER.debug("Added Capability"); } } SizeCapability.java package com.jenhde.randommobsize.capabilities; import com.jenhde.randommobsize.capabilities.interfaces.ISize; import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.INBT; import net.minecraft.util.Direction; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.capabilities.CapabilityInject; import net.minecraftforge.common.capabilities.ICapabilitySerializable; import net.minecraftforge.common.util.LazyOptional; import javax.annotation.Nonnull; public class SizeCapability implements ICapabilitySerializable<INBT> { @CapabilityInject(ISize.class) public static Capability<ISize> CAPABILITY_SIZE = null; private LazyOptional<ISize> instance = LazyOptional.of(CAPABILITY_SIZE::getDefaultInstance); @Override public void deserializeNBT(INBT nbt) { CAPABILITY_SIZE.getStorage().readNBT(CAPABILITY_SIZE, instance.orElseThrow(() -> new IllegalArgumentException("LazyOptional cannot be empty!")), null, nbt); } @Override public CompoundNBT serializeNBT() { return (CompoundNBT) CAPABILITY_SIZE.getStorage().writeNBT(CAPABILITY_SIZE, instance.orElseThrow(() -> new IllegalArgumentException("LazyOptional cannot be empty!")), null); } @Nonnull @Override public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, Direction side) { return cap == CAPABILITY_SIZE ? instance.cast() : LazyOptional.empty(); } } SizeStorage.java package com.jenhde.randommobsize.capabilities; import com.jenhde.randommobsize.capabilities.interfaces.ISize; import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.FloatNBT; import net.minecraft.nbt.INBT; import net.minecraft.util.Direction; import net.minecraftforge.common.capabilities.Capability; import javax.annotation.Nullable; public class SizeStorage implements Capability.IStorage<ISize>{ @Nullable @Override public INBT writeNBT(Capability<ISize> capability, ISize instance, Direction side) { CompoundNBT tag = new CompoundNBT(); tag.put("sizet", FloatNBT.valueOf(instance.getSizet())); return tag; } @Override public void readNBT(Capability<ISize> capability, ISize instance, Direction side, INBT nbt) { CompoundNBT tag = (CompoundNBT) nbt; instance.setSizet(tag.getFloat("sizet")); } } Size.java package com.jenhde.randommobsize.capabilities.instances; import com.jenhde.randommobsize.capabilities.interfaces.ISize; public class Size implements ISize { private float sizet; public Size(){ float [] arrSizes = new float[]{0.2f,0.5f,1.0f,2.0f,3.0f,4.0f}; int generatedFloat = 0 + (int)(Math.random() * (6 - 0)); sizet = arrSizes[generatedFloat]; //sizet = 1.0f; } @Override public void setSizet(float size) { this.sizet = size; } @Override public float getSizet() { return this.sizet; } }