Jump to content
View in the app

A better way to browse. Learn more.

Forge Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Jenhde

Members
  • Joined

  • Last visited

  1. Someone could help me.
  2. 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"); } }
  3. Is there a tutorial on that subject? Or do you know of a repository? Thanks for the help
  4. 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; } }

Important Information

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.