From d823e4bc71a0ac379f9f5199447a54151fe1eddd Mon Sep 17 00:00:00 2001 From: Sekwah Date: Thu, 10 Feb 2022 01:23:42 +0000 Subject: [PATCH] feat: adding logic to render info over the world --- .../java/com/sekwah/narutomod/NarutoMod.java | 2 ++ .../jutsus/SubstitutionJutsuAbility.java | 8 +++++ .../narutomod/capabilities/INinjaData.java | 1 + .../narutomod/capabilities/NinjaData.java | 5 +++ .../narutomod/client/gui/SubstitutionGUI.java | 2 +- .../client/renderer/NarutoRenderTypes.java | 22 ++++++++++++ .../renderer/NarutoWorldRenderEvents.java | 36 +++++++++++++++++++ .../SubstitutionWorldMarkerRenderer.java | 23 +++++++++++- 8 files changed, 97 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/sekwah/narutomod/client/renderer/NarutoRenderTypes.java create mode 100644 src/main/java/com/sekwah/narutomod/client/renderer/NarutoWorldRenderEvents.java diff --git a/src/main/java/com/sekwah/narutomod/NarutoMod.java b/src/main/java/com/sekwah/narutomod/NarutoMod.java index 71d419b2..2c31f4ba 100644 --- a/src/main/java/com/sekwah/narutomod/NarutoMod.java +++ b/src/main/java/com/sekwah/narutomod/NarutoMod.java @@ -8,6 +8,7 @@ import com.sekwah.narutomod.client.gui.NarutoInGameGUI; import com.sekwah.narutomod.client.keybinds.NarutoKeyHandler; import com.sekwah.narutomod.client.renderer.NarutoRenderEvents; +import com.sekwah.narutomod.client.renderer.NarutoWorldRenderEvents; import com.sekwah.narutomod.commands.NarutoCommands; import com.sekwah.narutomod.client.renderer.entity.config.NarutoConfig; import com.sekwah.narutomod.entity.NarutoDataSerialisers; @@ -72,6 +73,7 @@ public NarutoMod() { private void clientSetup(FMLClientSetupEvent event) { NarutoRenderEvents.registerRenderTypes(); NarutoKeyHandler.registerKeyBinds(); + NarutoWorldRenderEvents.registerEvents(); } private void setup(FMLCommonSetupEvent event) { diff --git a/src/main/java/com/sekwah/narutomod/abilities/jutsus/SubstitutionJutsuAbility.java b/src/main/java/com/sekwah/narutomod/abilities/jutsus/SubstitutionJutsuAbility.java index 5f7924ec..41128cfe 100644 --- a/src/main/java/com/sekwah/narutomod/abilities/jutsus/SubstitutionJutsuAbility.java +++ b/src/main/java/com/sekwah/narutomod/abilities/jutsus/SubstitutionJutsuAbility.java @@ -36,8 +36,16 @@ public void performServer(Player player, INinjaData ninjaData, int ticksActive) player.displayClientMessage(new TranslatableComponent("jutsu.cast.substitution"), false); // Activate ninjaData.useSubstitution(1); + Vec3 loc = ninjaData.getSubstitutionLoc(); + if(loc != null) { + double distance = player.position().distanceTo(loc); + if(distance < 40) { + player.teleportTo(loc.x, loc.y, loc.z); + } + } } else { player.displayClientMessage(new TranslatableComponent("jutsu.cast.substitution_mark"), false); + ninjaData.setSubstitutionLoc(player.position()); // Mark } } diff --git a/src/main/java/com/sekwah/narutomod/capabilities/INinjaData.java b/src/main/java/com/sekwah/narutomod/capabilities/INinjaData.java index 58411045..c81b2968 100644 --- a/src/main/java/com/sekwah/narutomod/capabilities/INinjaData.java +++ b/src/main/java/com/sekwah/narutomod/capabilities/INinjaData.java @@ -28,6 +28,7 @@ public interface INinjaData extends INBTSerializable { void addStamina(float amount); Vec3 getSubstitutionLoc(); + void setSubstitutionLoc(Vec3 loc); DoubleJumpData getDoubleJumpData(); diff --git a/src/main/java/com/sekwah/narutomod/capabilities/NinjaData.java b/src/main/java/com/sekwah/narutomod/capabilities/NinjaData.java index af340df4..d42f7860 100644 --- a/src/main/java/com/sekwah/narutomod/capabilities/NinjaData.java +++ b/src/main/java/com/sekwah/narutomod/capabilities/NinjaData.java @@ -187,6 +187,11 @@ public Vec3 getSubstitutionLoc() { return this.substitutionLocation; } + @Override + public void setSubstitutionLoc(Vec3 loc) { + this.substitutionLocation = loc; + } + @Override public DoubleJumpData getDoubleJumpData() { return this.doubleJumpData; diff --git a/src/main/java/com/sekwah/narutomod/client/gui/SubstitutionGUI.java b/src/main/java/com/sekwah/narutomod/client/gui/SubstitutionGUI.java index 9f54648c..79222606 100644 --- a/src/main/java/com/sekwah/narutomod/client/gui/SubstitutionGUI.java +++ b/src/main/java/com/sekwah/narutomod/client/gui/SubstitutionGUI.java @@ -16,7 +16,7 @@ public class SubstitutionGUI extends GuiComponent { - private static final ResourceLocation LOG_TEXTURE = new ResourceLocation(NarutoMod.MOD_ID, "textures/gui/jutsu/jutsu_substiutution.png"); + public static final ResourceLocation LOG_TEXTURE = new ResourceLocation(NarutoMod.MOD_ID, "textures/gui/jutsu/jutsu_substiutution.png"); private final Minecraft minecraft; private int screenWidth; diff --git a/src/main/java/com/sekwah/narutomod/client/renderer/NarutoRenderTypes.java b/src/main/java/com/sekwah/narutomod/client/renderer/NarutoRenderTypes.java new file mode 100644 index 00000000..a00ddf77 --- /dev/null +++ b/src/main/java/com/sekwah/narutomod/client/renderer/NarutoRenderTypes.java @@ -0,0 +1,22 @@ +package com.sekwah.narutomod.client.renderer; + +import com.mojang.blaze3d.vertex.DefaultVertexFormat; +import com.mojang.blaze3d.vertex.VertexFormat; +import net.minecraft.client.renderer.RenderType; +import org.lwjgl.opengl.GL11; + +public class NarutoRenderTypes extends RenderType { + + public static final RenderType JUTSU_INFO = create("narutomod_jutsu_overlay", + DefaultVertexFormat.POSITION_COLOR_TEX, VertexFormat.Mode.QUADS, 256/*bufferSize*/, + false/*affectsCrumbling*/, false/*sortOnUpload*/, RenderType.CompositeState.builder() + .setTransparencyState(TRANSLUCENT_TRANSPARENCY) + .setWriteMaskState(COLOR_WRITE) + .setCullState(CULL) + .createCompositeState(false) + ); + + public NarutoRenderTypes(String p_173178_, VertexFormat p_173179_, VertexFormat.Mode p_173180_, int p_173181_, boolean p_173182_, boolean p_173183_, Runnable p_173184_, Runnable p_173185_) { + super(p_173178_, p_173179_, p_173180_, p_173181_, p_173182_, p_173183_, p_173184_, p_173185_); + } +} diff --git a/src/main/java/com/sekwah/narutomod/client/renderer/NarutoWorldRenderEvents.java b/src/main/java/com/sekwah/narutomod/client/renderer/NarutoWorldRenderEvents.java new file mode 100644 index 00000000..2d11f5b8 --- /dev/null +++ b/src/main/java/com/sekwah/narutomod/client/renderer/NarutoWorldRenderEvents.java @@ -0,0 +1,36 @@ +package com.sekwah.narutomod.client.renderer; + +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.math.Matrix4f; +import com.sekwah.narutomod.client.gui.SubstitutionGUI; +import com.sekwah.narutomod.client.renderer.worldinfo.SubstitutionWorldMarkerRenderer; +import net.minecraft.client.Camera; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiComponent; +import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraftforge.client.event.RenderLevelLastEvent; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.eventbus.api.SubscribeEvent; + +public class NarutoWorldRenderEvents { + + public static void registerEvents() { + MinecraftForge.EVENT_BUS.register(NarutoWorldRenderEvents.class); + } + + @SubscribeEvent + public static void renderLevelLast(RenderLevelLastEvent event) { + Minecraft mc = Minecraft.getInstance(); + if(mc.options.hideGui || mc.level == null || mc.player == null) { + return; + } + Camera camera = mc.getEntityRenderDispatcher().camera; + PoseStack poseStack = event.getPoseStack(); + Matrix4f matrix = event.getProjectionMatrix(); + float partialTicks = event.getPartialTick(); + MultiBufferSource multiBufferSource = mc.renderBuffers().bufferSource(); + SubstitutionWorldMarkerRenderer.render(poseStack, camera, matrix, multiBufferSource, partialTicks); + } +} diff --git a/src/main/java/com/sekwah/narutomod/client/renderer/worldinfo/SubstitutionWorldMarkerRenderer.java b/src/main/java/com/sekwah/narutomod/client/renderer/worldinfo/SubstitutionWorldMarkerRenderer.java index ab1f83f2..3fed796e 100644 --- a/src/main/java/com/sekwah/narutomod/client/renderer/worldinfo/SubstitutionWorldMarkerRenderer.java +++ b/src/main/java/com/sekwah/narutomod/client/renderer/worldinfo/SubstitutionWorldMarkerRenderer.java @@ -1,7 +1,28 @@ package com.sekwah.narutomod.client.renderer.worldinfo; +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.mojang.math.Matrix4f; +import com.sekwah.narutomod.NarutoMod; +import com.sekwah.narutomod.client.gui.SubstitutionGUI; +import com.sekwah.narutomod.client.renderer.NarutoRenderTypes; +import net.minecraft.client.Camera; +import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.client.renderer.MultiBufferSource; + public class SubstitutionWorldMarkerRenderer { - public static void render() { + public static void render(PoseStack poseStack, Camera camera, Matrix4f matrix, MultiBufferSource multiBufferSource, float partialTicks) { + int textureWidth = 19; + int textureHeight = 18; + RenderSystem.setShader(GameRenderer::getPositionTexShader); + RenderSystem.setShaderTexture(0, SubstitutionGUI.LOG_TEXTURE); + poseStack.pushPose(); + poseStack.translate(camera.getPosition().x, camera.getPosition().y, camera.getPosition().z); + + VertexConsumer vertexConsumer = multiBufferSource.getBuffer(NarutoRenderTypes.JUTSU_INFO); + + poseStack.popPose(); } }