Skip to content

Commit

Permalink
woah it actually worked first try
Browse files Browse the repository at this point in the history
  • Loading branch information
AV306 committed Dec 27, 2023
1 parent eefa572 commit 5f1807d
Show file tree
Hide file tree
Showing 10 changed files with 133 additions and 51 deletions.
39 changes: 39 additions & 0 deletions src/main/java/me/av306/xenon/event/EntityRendererEvents.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package me.av306.xenon.event;

import net.fabricmc.fabric.api.event.Event;
import net.fabricmc.fabric.api.event.EventFactory;
import net.minecraft.client.render.entity.model.EntityModel;
import net.minecraft.entity.Entity;
import net.minecraft.entity.mob.MobEntity;
import net.minecraft.text.Text;
import net.minecraft.util.ActionResult;

public interface EntityRendererEvents
{
Event<GetLabelText> RENDER_LABEL_TEXT = EventFactory.createArrayBacked(
GetLabelText.class,
(listeners) -> (entity, text) ->
{
for ( GetLabelText listener : listeners )
{
ActionResult result = listener.onGetLabelText( entity, text );

if ( result != ActionResult.PASS ) return result;
}

return ActionResult.PASS;
}
);

@FunctionalInterface
interface GetLabelText<T extends Entity>
{
ActionResult onGetLabelText( T entity, Text text );
}

class EventData
{
public static Text LABEL_TEXT_OVERRIDE;
public static boolean SHOULD_OVERRIDE_LABEL_TEXT = false;
}
}
8 changes: 4 additions & 4 deletions src/main/java/me/av306/xenon/event/EventFields.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@ public class EventFields
public static float REACH_MODIFIER = 0f;


public static boolean shouldOverrideFov = false;
public static double FOV_MODIFIER = 0d;
//public static boolean shouldOverrideFov = false;
//public static double FOV_MODIFIER = 0d;

public static double FOV_OVERRIDE = 0d;
//public static double FOV_OVERRIDE = 0d;

public static double FOV_ZOOM_LEVEL = 1d;
//public static double FOV_ZOOM_LEVEL = 1d;

//public static int CROSSHAIR_SIZE_OVERRIDE = 10;
}
6 changes: 4 additions & 2 deletions src/main/java/me/av306/xenon/event/GetFovEvent.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,10 @@ public interface GetFovEvent

ActionResult interact( Camera camera, float tickDelta, boolean changingFov );

public static class EventData
public class EventData
{
public static float FOV_ZOOM_LEVEL = 1f;
public static double FOV_ZOOM_LEVEL = 1f;
public static float FOV_OVERRIDE = 0f;
public static boolean SHOULD_OVERRIDE_FOV = false;
}
}
31 changes: 31 additions & 0 deletions src/main/java/me/av306/xenon/event/MobEntityRendererEvents.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package me.av306.xenon.event;

import net.fabricmc.fabric.api.event.Event;
import net.fabricmc.fabric.api.event.EventFactory;
import net.minecraft.client.render.entity.model.EntityModel;
import net.minecraft.entity.mob.MobEntity;
import net.minecraft.util.ActionResult;

public interface MobEntityRendererEvents
{
Event<RenderLabelTextEvent> RENDER_LABEL_TEXT = EventFactory.createArrayBacked(
RenderLabelTextEvent.class,
(listeners) -> (entity) ->
{
for ( RenderLabelTextEvent listener : listeners )
{
ActionResult result = listener.onGetHasLabel( entity );

if ( result != ActionResult.PASS ) return result;
}

return ActionResult.PASS;
}
);

@FunctionalInterface
interface RenderLabelTextEvent<T extends MobEntity>
{
ActionResult onGetHasLabel( T entity );
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,20 +20,23 @@ private ActionResult onGetFov( Camera camera, float tickDelta, boolean changingF
{
if ( this.isEnabled )
//EventFields.FOV_OVERRIDE = 360d - Xenon.INSTANCE.client.options.getFov().getValue();
EventFields.FOV_OVERRIDE = -Xenon.INSTANCE.client.options.getFov().getValue();
//EventFields.FOV_OVERRIDE = -Xenon.INSTANCE.client.options.getFov().getValue();
GetFovEvent.EventData.FOV_OVERRIDE = -Xenon.INSTANCE.client.options.getFov().getValue();

return ActionResult.PASS;
}

@Override
protected void onEnable()
{
EventFields.shouldOverrideFov = true;
//EventFields.shouldOverrideFov = true;
GetFovEvent.EventData.SHOULD_OVERRIDE_FOV = true;
}

@Override
protected void onDisable()
{
EventFields.shouldOverrideFov = false;
//EventFields.shouldOverrideFov = false;
GetFovEvent.EventData.SHOULD_OVERRIDE_FOV = false;
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
package me.av306.xenon.features.render;

import me.av306.xenon.event.EntityRendererEvents;
import me.av306.xenon.event.MobEntityRendererEvents;
import me.av306.xenon.feature.IToggleableFeature;
import net.minecraft.entity.Entity;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.mob.MobEntity;
import net.minecraft.text.Text;
import net.minecraft.util.ActionResult;

// See `me.av306.xenon.mixin.EntityRendererMixin`.
// Breaking conventions here because I don't feel like making a new event type.
Expand All @@ -18,40 +22,41 @@ public HealthDisplayFeature()

// HudRenderCallback.EVENT.register( this::onHudRender );
INSTANCE = this;
}

@Override
protected void onEnable()
{
MobEntityRendererEvents.RENDER_LABEL_TEXT.register( this::shouldForceEntityNameplate );

EntityRendererEvents.RENDER_LABEL_TEXT.register( this::getLabelText );
}

@Override
protected void onDisable()
private ActionResult getLabelText( Entity entity, Text text )
{
if ( !this.isEnabled ) return ActionResult.PASS;

}
try
{
LivingEntity livingEntity = (LivingEntity) entity;

// Used in `me.av306.xenon.mixin.EntityRendererMixin`
// Breaking conventions a bit since these mixins are used solely for this feature
public Text modifyEntityLabelText( Entity entity, Text text )
{
if ( !this.isEnabled ) return text;
EntityRendererEvents.EventData.LABEL_TEXT_OVERRIDE = text.copy().append( String.format( " §c(%.2f❤)§r", livingEntity.getHealth() ) );
}
catch ( ClassCastException ignored ) {}

try
{
LivingEntity livingEntity = (LivingEntity) entity;
return ActionResult.PASS;
}

text = text.copy().append( String.format( " §c(%.2f❤)§r", livingEntity.getHealth() ) );
}
catch ( ClassCastException ignored ) {}
private ActionResult shouldForceEntityNameplate( MobEntity mobEntity )
{
return this.isEnabled ? ActionResult.FAIL : ActionResult.PASS;
}

return text;
@Override
protected void onEnable()
{
EntityRendererEvents.EventData.SHOULD_OVERRIDE_LABEL_TEXT = true;
}

// Used in `me.av306.xenon.mixin.MobEntityRendererMixin`
public boolean shouldForceEntityNameplate()
@Override
protected void onDisable()
{
return this.isEnabled;
EntityRendererEvents.EventData.SHOULD_OVERRIDE_LABEL_TEXT = false;
}
}
13 changes: 7 additions & 6 deletions src/main/java/me/av306/xenon/features/render/ZoomFeature.java
Original file line number Diff line number Diff line change
Expand Up @@ -46,21 +46,22 @@ private ActionResult onGetFov( Camera camera, float td, boolean changing )
// It should be 1 by default (no zoom when just enabled)
// the clamp will boost it up to 2
// eliminating the need for a local variable
EventFields.FOV_ZOOM_LEVEL = MathHelper.clamp(
EventFields.FOV_ZOOM_LEVEL,
GetFovEvent.EventData.FOV_ZOOM_LEVEL = MathHelper.clamp(
GetFovEvent.EventData.FOV_ZOOM_LEVEL,
ZoomGroup.minZoom,
ZoomGroup.maxZoom
);

// Adjust our mouse sensitivity based on zoom
Xenon.INSTANCE.client.options.getMouseSensitivity()
.setValue( this.originalMouseSensitivity / EventFields.FOV_ZOOM_LEVEL );
.setValue( this.originalMouseSensitivity / GetFovEvent.EventData.FOV_ZOOM_LEVEL );

}
else
{
// Zoom not needed, reset zoom level
EventFields.FOV_ZOOM_LEVEL = 1d;
//EventFields.FOV_ZOOM_LEVEL = 1d;
GetFovEvent.EventData.FOV_ZOOM_LEVEL = 1f;

// Reset sensitivity
Xenon.INSTANCE.client.options.getMouseSensitivity()
Expand Down Expand Up @@ -92,8 +93,8 @@ private ActionResult onMouseScroll( long window, double horizontal, double verti
{
// Scrolling up zooms in,
// scrolling down zooms out
if ( vertical > 0 ) EventFields.FOV_ZOOM_LEVEL *= (1 + ZoomGroup.scrollInterval);
else if ( vertical < 0 ) EventFields.FOV_ZOOM_LEVEL *= (1 - ZoomGroup.scrollInterval);
if ( vertical > 0 ) GetFovEvent.EventData.FOV_ZOOM_LEVEL *= (1 + ZoomGroup.scrollInterval);
else if ( vertical < 0 ) GetFovEvent.EventData.FOV_ZOOM_LEVEL *= (1 - ZoomGroup.scrollInterval);
}

return ActionResult.PASS;
Expand Down
5 changes: 4 additions & 1 deletion src/main/java/me/av306/xenon/mixin/EntityRendererMixin.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package me.av306.xenon.mixin;

import me.av306.xenon.event.EntityRendererEvents;
import me.av306.xenon.features.render.HealthDisplayFeature;
import net.minecraft.entity.Entity;
import net.minecraft.text.Text;
Expand Down Expand Up @@ -38,6 +39,8 @@ private Text modifyLabelText( Text text, T entity, Text textOther, MatrixStack m
{
//if ( !HealthDisplayFeature.getInstance().getIsEnabled() ) return text1;

return HealthDisplayFeature.getInstance().modifyEntityLabelText( entity, text );
EntityRendererEvents.RENDER_LABEL_TEXT.invoker().onGetLabelText( entity, text );

return EntityRendererEvents.EventData.SHOULD_OVERRIDE_LABEL_TEXT ? EntityRendererEvents.EventData.LABEL_TEXT_OVERRIDE : text;
}
}
8 changes: 5 additions & 3 deletions src/main/java/me/av306/xenon/mixin/GameRendererMixin.java
Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,11 @@ private void onGetFov( Camera camera, float tickDelta, boolean changingFov, Call
//if ( EventFields.shouldOverrideFov ) cir.setReturnValue( EventFields.FOV_OVERRIDE / EventFields.FOV_ZOOM_LEVEL );
//else cir.setReturnValue( (cir.getReturnValue() + EventFields.FOV_MODIFIER) / EventFields.FOV_ZOOM_LEVEL );

// I have never used the other two things I added (modifier and override)
// so out they go
cir.setReturnValue( cir.getReturnValue() / GetFovEvent.EventData.FOV_ZOOM_LEVEL );
cir.setReturnValue(
(GetFovEvent.EventData.SHOULD_OVERRIDE_FOV
? GetFovEvent.EventData.FOV_OVERRIDE
: cir.getReturnValue()) / GetFovEvent.EventData.FOV_ZOOM_LEVEL
);

//Xenon.INSTANCE.sendInfoMessage( String.valueOf( cir.getReturnValue() ) );
}
Expand Down
16 changes: 6 additions & 10 deletions src/main/java/me/av306/xenon/mixin/MobEntityRendererMixin.java
Original file line number Diff line number Diff line change
@@ -1,18 +1,11 @@
package me.av306.xenon.mixin;

import me.av306.xenon.Xenon;
import me.av306.xenon.event.MinecraftClientEvents;
import me.av306.xenon.features.render.HealthDisplayFeature;
import me.av306.xenon.util.text.TextFactory;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.world.ClientWorld;
import me.av306.xenon.event.MobEntityRendererEvents;
import net.minecraft.entity.mob.MobEntity;
import net.minecraft.text.MutableText;
import net.minecraft.text.Text;
import net.minecraft.client.render.VertexConsumerProvider;
import net.minecraft.client.render.entity.MobEntityRenderer;
import net.minecraft.client.render.entity.model.EntityModel;

import net.minecraft.util.ActionResult;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
Expand All @@ -29,7 +22,10 @@ public class MobEntityRendererMixin<T extends MobEntity, M extends EntityModel<T
private void onGetHasLabel( T entity, CallbackInfoReturnable<Boolean> cir )
{
// Don't block name tags when disabled
if ( HealthDisplayFeature.getInstance().shouldForceEntityNameplate() )
//if ( HealthDisplayFeature.getInstance().shouldForceEntityNameplate() )
//cir.setReturnValue( true );

if ( MobEntityRendererEvents.RENDER_LABEL_TEXT.invoker().onGetHasLabel( entity ) == ActionResult.FAIL )
cir.setReturnValue( true );
}
}

0 comments on commit 5f1807d

Please sign in to comment.