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


  • Posts

  • Joined

  • Last visited

mclich's Achievements

Tree Puncher

Tree Puncher (2/8)



  1. A little update: i discovered that GameRenderer#renderConfusionOverlay just renders a nausea texture, not an actual distortion, which is not what i needed. I found information about EntityRenderer#setupCameraTransform, but it's not currently available in 1.16.5 forge version. In previous versions it looks like this: f2 = this.mc.thePlayer.prevTimeInPortal + (this.mc.thePlayer.timeInPortal - this.mc.thePlayer.prevTimeInPortal) * par1; if (f2 > 0.0F) { byte b0 = 20; if (this.mc.thePlayer.isPotionActive(Potion.confusion)) { b0 = 7; } float f3 = 5.0F / (f2 * f2 + 5.0F) - f2 * 0.04F; f3 *= f3; GL11.glRotatef(((float)this.rendererUpdateCount + par1) * (float)b0, 0.0F, 1.0F, 1.0F); GL11.glScalef(1.0F / f3, 1.0F, 1.0F); GL11.glRotatef(-((float)this.rendererUpdateCount + par1) * (float)b0, 0.0F, 1.0F, 1.0F); } As i understand, an actual distortion is caused by GL11 static methods. I tried to experiment with those methods and some render events to make nausea distortion effect, but it works not as i expected and still doesn't make what i want. Is there any EntityRenderer#setupCameraTransform method, but available in 1.16.5 forge version? Or maybe am i doing something wrong?
  2. Is there way to use non-static methods? Maybe there is another anotation which looks at all methods?
  3. I commented line which was creating event: //this.renderOverlay(new RenderTickEvent(Phase.END, 10F)); but it still doesn't work. My effect code actually do nothing now, and my createOverlay method is never called Already read the most of it
  4. That is exactly what you have said previously I passed Phase.END to event constructor, so i guess there is no need in this
  5. Effect class: @EventBusSubscriber(modid=ElderNorseGods.MOD_ID, bus=EventBusSubscriber.Bus.MOD) public class DrunkennessEffect extends Effect { public static final String ID="drunkenness"; public static final int COLOR=0xf0c02c; private float deformation=1F; public DrunkennessEffect() { super(EffectType.HARMFUL, DrunkennessEffect.COLOR); this.addAttributeModifier(Attributes.MOVEMENT_SPEED, "1f8955f0-2985-4658-9dd8-0eb83fe32283", -0.05D, AttributeModifier.Operation.MULTIPLY_TOTAL); this.addAttributeModifier(Attributes.ATTACK_SPEED, "490e03c0-319b-4b22-b094-a98636fa6a4a", -0.05D, AttributeModifier.Operation.MULTIPLY_TOTAL); this.addAttributeModifier(Attributes.ATTACK_DAMAGE, "9855509b-0900-48de-a4b0-82eefaa24d62", 0.1D, AttributeModifier.Operation.MULTIPLY_TOTAL); } @Override public boolean isDurationEffectTick(int duration, int amplifier) { this.deformation=this.deformation==1F?3F:1F; this.renderOverlay(new RenderTickEvent(Phase.END, 10F)); return false; } @SubscribeEvent public void renderOverlay(RenderTickEvent event) { this.createOverlay(); } @SuppressWarnings("deprecation") private void createOverlay() { ElderNorseGods.LOGGER.info("createOverlay"); Minecraft minecraft=Minecraft.getInstance(); int i = minecraft.getWindow().getGuiScaledWidth(); int j = minecraft.getWindow().getGuiScaledHeight(); double d0 = MathHelper.lerp((double)deformation, 2.0D, 1.0D); float f = 0.2F * deformation; float f1 = 0.4F * deformation; float f2 = 0.2F * deformation; double d1 = (double)i * d0; double d2 = (double)j * d0; double d3 = ((double)i - d1) / 2.0D; double d4 = ((double)j - d2) / 2.0D; RenderSystem.disableDepthTest(); RenderSystem.depthMask(false); RenderSystem.enableBlend(); RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ONE, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ONE); RenderSystem.color4f(f, f1, f2, 1.0F); minecraft.getTextureManager().bind(new ResourceLocation("minecraft", "textures/misc/nausea.png")); Tessellator tessellator = Tessellator.getInstance(); BufferBuilder bufferbuilder = tessellator.getBuilder(); bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX); bufferbuilder.vertex(d3, d4 + d2, -90.0D).uv(0.0F, 1.0F).endVertex(); bufferbuilder.vertex(d3 + d1, d4 + d2, -90.0D).uv(1.0F, 1.0F).endVertex(); bufferbuilder.vertex(d3 + d1, d4, -90.0D).uv(1.0F, 0.0F).endVertex(); bufferbuilder.vertex(d3, d4, -90.0D).uv(0.0F, 0.0F).endVertex(); tessellator.end(); RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); RenderSystem.defaultBlendFunc(); RenderSystem.disableBlend(); RenderSystem.depthMask(true); RenderSystem.enableDepthTest(); } } Logs: [18:41:35] [Server thread/FATAL] [ne.mi.co.ForgeMod/]: Preparing crash report with UUID ada9d733-775c-491b-9cb2-7b4d0883f163 [18:41:35] [Server thread/ERROR] [minecraft/MinecraftServer]: Encountered an unexpected exception net.minecraft.crash.ReportedException: Ticking player at net.minecraft.network.NetworkSystem.tick(NetworkSystem.java:137) ~[forge:?] {re:classloading} at net.minecraft.server.MinecraftServer.tickChildren(MinecraftServer.java:865) ~[forge:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.server.MinecraftServer.tickServer(MinecraftServer.java:787) ~[forge:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.server.integrated.IntegratedServer.tickServer(IntegratedServer.java:78) ~[forge:?] {re:classloading,pl:runtimedistcleaner:A} at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:642) ~[forge:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:232) ~[forge:?] {re:classloading,pl:accesstransformer:B} at java.lang.Thread.run(Thread.java:748) [?:1.8.0_291] {} Caused by: java.lang.IllegalStateException: Rendersystem called from wrong thread at com.mojang.blaze3d.systems.RenderSystem.assertThread(RenderSystem.java:76) ~[forge:?] {re:classloading,pl:runtimedistcleaner:A} at com.mojang.blaze3d.platform.GlStateManager._disableDepthTest(GlStateManager.java:182) ~[forge:?] {re:classloading,pl:runtimedistcleaner:A} at com.mojang.blaze3d.systems.RenderSystem.disableDepthTest(RenderSystem.java:192) ~[forge:?] {re:classloading,pl:runtimedistcleaner:A} at com.mclich.engmod.effect.DrunkennessEffect.createOverlay(DrunkennessEffect.java:73) ~[?:?] {re:classloading} at com.mclich.engmod.effect.DrunkennessEffect.renderOverlay(DrunkennessEffect.java:55) ~[?:?] {re:classloading} at com.mclich.engmod.effect.DrunkennessEffect.isDurationEffectTick(DrunkennessEffect.java:48) ~[?:?] {re:classloading} at net.minecraft.potion.EffectInstance.tick(EffectInstance.java:141) ~[forge:?] {re:classloading,xf:fml:forge:potion} at net.minecraft.entity.LivingEntity.tickEffects(LivingEntity.java:671) ~[forge:?] {re:classloading} at net.minecraft.entity.LivingEntity.baseTick(LivingEntity.java:386) ~[forge:?] {re:classloading} at net.minecraft.entity.Entity.tick(Entity.java:386) ~[forge:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.entity.LivingEntity.tick(LivingEntity.java:2113) ~[forge:?] {re:classloading} at net.minecraft.entity.player.PlayerEntity.tick(PlayerEntity.java:223) ~[forge:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.entity.player.ServerPlayerEntity.doTick(ServerPlayerEntity.java:404) ~[forge:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.network.play.ServerPlayNetHandler.tick(ServerPlayNetHandler.java:207) ~[forge:?] {re:classloading} at net.minecraft.network.NetworkManager.tick(NetworkManager.java:226) ~[forge:?] {re:classloading} at net.minecraft.network.NetworkSystem.tick(NetworkSystem.java:134) ~[forge:?] {re:classloading} ... 6 more AL lib: (EE) alc_cleanup: 1 device not closed
  6. Well, i tried that, but i'm still getting the same error: IllegalStateException("Rendersystem called from wrong thread")
  7. I actually tried nothing, i mean i don't even know where i can find method that creates potion particles in Forge library. Effect#applyEffectTick has two args: LivingEntity and int, and there is no such method in LivingEntity class. The only method i know and can use is World#addParticle, but if i use this method, potion particles from my effect and vanilla effects don't mix in one color, but they should do, so that is the issue. I aslo don't know what ParticleType should i use: ENTITY_EFFECT or AMBIENT_ENTITY_EFFECT, i don't know what is the difference between them
  8. So i just need to call my overlay method inside that event listener? Like this e.g.? @SubscribeEvent public void renderOverlay(RenderTickEvent event) { if(event.phase==Phase.END) { this.createOverlay(); } } Sorry if i am asking obvious things, but i don't understand at all how this should works since RenderTickEvent is called after renderConfusionOverlay. To create overlay in game, i need to manually call my renderOverlay method?
  9. Seems it won't help much in my case. I mean what i want to do is just make my own renderConfusionOverlay method, since i cannot use renderConfusionOverlay implementation because it needs to be called in a specific thread
  10. In that case what method should i call in Effect#applyEffectTick to spawn them? I tried to find out in game files, but found nothing
  11. Hello. In my mod i created my own Effect and registered it. What i want this effect to do when applying on player is create screen overlay animation, similar to Nausea Effect (or Confusion Effect). I've done some researching in game files and discovered renderConfusionOverlay method in GameRenderer class. This method is private, so i just copy-pasted it in my applyEffectTick method, but it didn't work. That method used some RenderSystem static methods inside itself, and they throwed IllegalStateException("Rendersystem called from wrong thread") when i tried to use them in my files. So that is the problem. Is there any way to implement such kind of an animation since renderConfusionOverlay doesn't work?
  12. I have similar question, but in my case i am curious how to make effect produce less particles than usual, like particles from invisibility effect (their number is less comparing to other effects). Is there any way to achieve that?
  13. Oh, it is just personal thing. I always use class name with its static fields (as well as this with non-static fields), even inside that class. It is easier for me to read my own code like this Jeez, it is finally working! Thank you so much, you are a legend
  14. Of course i'm not. My DeferredRegister and its RegistryObjects are in one class, i just showed my container declaration line In my BreweryBlock class i have overrided AbstractBlock#use method: @Override public ActionResultType use(BlockState blockState, World world, BlockPos blockPos, PlayerEntity player, Hand hand, BlockRayTraceResult blockRayTrace) { if(world.isClientSide()) return ActionResultType.SUCCESS; else { TileEntity tileEntity=world.getBlockEntity(blockPos); if(tileEntity instanceof BreweryTileEntity) { player.openMenu((BreweryTileEntity)tileEntity) } return ActionResultType.CONSUME; } } I know that there is a way to open gui with NetworkHooks#openGui, but i don't actually know what is the difference between it and PlayerEntity#openMenu method
  • Create New...

Important Information

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