Use callback-style events for crosshair and hotbar render events
This commit is contained in:
@@ -8,6 +8,8 @@ import com.replaymod.core.events.PreRenderCallback;
|
|||||||
import com.replaymod.core.events.PreRenderHandCallback;
|
import com.replaymod.core.events.PreRenderHandCallback;
|
||||||
import com.replaymod.core.events.SettingsChangedCallback;
|
import com.replaymod.core.events.SettingsChangedCallback;
|
||||||
import com.replaymod.replay.ReplayHandler;
|
import com.replaymod.replay.ReplayHandler;
|
||||||
|
import com.replaymod.replay.events.RenderHotbarCallback;
|
||||||
|
import com.replaymod.replay.events.RenderSpectatorCrosshairCallback;
|
||||||
import de.johni0702.minecraft.gui.utils.EventRegistrations;
|
import de.johni0702.minecraft.gui.utils.EventRegistrations;
|
||||||
import de.johni0702.minecraft.gui.versions.callbacks.PreTickCallback;
|
import de.johni0702.minecraft.gui.versions.callbacks.PreTickCallback;
|
||||||
import com.replaymod.core.utils.Utils;
|
import com.replaymod.core.utils.Utils;
|
||||||
@@ -28,7 +30,6 @@ import net.minecraft.util.Identifier;
|
|||||||
import net.minecraft.util.math.Box;
|
import net.minecraft.util.math.Box;
|
||||||
|
|
||||||
//#if FABRIC>=1
|
//#if FABRIC>=1
|
||||||
import com.replaymod.replay.events.RenderSpectatorCrosshairCallback;
|
|
||||||
//#else
|
//#else
|
||||||
//$$ import com.replaymod.core.versions.MCVer;
|
//$$ import com.replaymod.core.versions.MCVer;
|
||||||
//$$ import net.minecraftforge.client.event.EntityViewRenderEvent;
|
//$$ import net.minecraftforge.client.event.EntityViewRenderEvent;
|
||||||
@@ -680,24 +681,15 @@ public class CameraEntity
|
|||||||
|
|
||||||
{ on(KeyBindingEventCallback.EVENT, CameraEntity.this::handleInputEvents); }
|
{ on(KeyBindingEventCallback.EVENT, CameraEntity.this::handleInputEvents); }
|
||||||
|
|
||||||
//#if FABRIC>=1
|
|
||||||
{ on(RenderSpectatorCrosshairCallback.EVENT, this::shouldRenderSpectatorCrosshair); }
|
{ on(RenderSpectatorCrosshairCallback.EVENT, this::shouldRenderSpectatorCrosshair); }
|
||||||
private Boolean shouldRenderSpectatorCrosshair() {
|
private Boolean shouldRenderSpectatorCrosshair() {
|
||||||
return canSpectate(mc.targetedEntity);
|
return canSpectate(mc.targetedEntity);
|
||||||
}
|
}
|
||||||
//#else
|
|
||||||
//$$ @SubscribeEvent
|
{ on(RenderHotbarCallback.EVENT, this::shouldRenderHotbar); }
|
||||||
//$$ public void preCrosshairRender(RenderGameOverlayEvent.Pre event) {
|
private Boolean shouldRenderHotbar() {
|
||||||
//$$ // The crosshair should only render if targeted entity can actually be spectated
|
return false;
|
||||||
//$$ if (MCVer.getType(event) == RenderGameOverlayEvent.ElementType.CROSSHAIRS) {
|
}
|
||||||
//$$ event.setCanceled(!canSpectate(mc.pointedEntity));
|
|
||||||
//$$ }
|
|
||||||
//$$ // Hotbar should never be rendered
|
|
||||||
//$$ if (MCVer.getType(event) == RenderGameOverlayEvent.ElementType.HOTBAR) {
|
|
||||||
//$$ event.setCanceled(true);
|
|
||||||
//$$ }
|
|
||||||
//$$ }
|
|
||||||
//#endif
|
|
||||||
|
|
||||||
{ on(SettingsChangedCallback.EVENT, this::onSettingsChanged); }
|
{ on(SettingsChangedCallback.EVENT, this::onSettingsChanged); }
|
||||||
private void onSettingsChanged(SettingsRegistry registry, SettingsRegistry.SettingKey<?> key) {
|
private void onSettingsChanged(SettingsRegistry registry, SettingsRegistry.SettingKey<?> key) {
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
package com.replaymod.replay.events;
|
||||||
|
|
||||||
|
import de.johni0702.minecraft.gui.utils.Event;
|
||||||
|
|
||||||
|
public interface RenderHotbarCallback {
|
||||||
|
Event<RenderHotbarCallback> EVENT = Event.create((listeners) ->
|
||||||
|
() -> {
|
||||||
|
for (RenderHotbarCallback listener : listeners) {
|
||||||
|
Boolean state = listener.shouldRenderHotbar();
|
||||||
|
if (state != null) {
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
Boolean shouldRenderHotbar();
|
||||||
|
}
|
||||||
@@ -1,4 +1,3 @@
|
|||||||
//#if MC>=11400
|
|
||||||
package com.replaymod.replay.events;
|
package com.replaymod.replay.events;
|
||||||
|
|
||||||
import de.johni0702.minecraft.gui.utils.Event;
|
import de.johni0702.minecraft.gui.utils.Event;
|
||||||
@@ -18,4 +17,3 @@ public interface RenderSpectatorCrosshairCallback {
|
|||||||
|
|
||||||
Boolean shouldRenderSpectatorCrosshair();
|
Boolean shouldRenderSpectatorCrosshair();
|
||||||
}
|
}
|
||||||
//#endif
|
|
||||||
|
|||||||
@@ -1,11 +1,13 @@
|
|||||||
//#if MC>=11400
|
//#if MC>=11400
|
||||||
package com.replaymod.replay.mixin;
|
package com.replaymod.replay.mixin;
|
||||||
|
|
||||||
|
import com.replaymod.replay.events.RenderHotbarCallback;
|
||||||
import com.replaymod.replay.events.RenderSpectatorCrosshairCallback;
|
import com.replaymod.replay.events.RenderSpectatorCrosshairCallback;
|
||||||
import net.minecraft.client.gui.hud.InGameHud;
|
import net.minecraft.client.gui.hud.InGameHud;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||||
|
|
||||||
@Mixin(InGameHud.class)
|
@Mixin(InGameHud.class)
|
||||||
@@ -17,5 +19,13 @@ public class MixinInGameHud {
|
|||||||
ci.setReturnValue(state);
|
ci.setReturnValue(state);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Inject(method = "renderHotbar", at = @At("HEAD"), cancellable = true)
|
||||||
|
private void shouldRenderHotbar(CallbackInfo ci) {
|
||||||
|
Boolean state = RenderHotbarCallback.EVENT.invoker().shouldRenderHotbar();
|
||||||
|
if (state == Boolean.FALSE) {
|
||||||
|
ci.cancel();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//#endif
|
//#endif
|
||||||
|
|||||||
@@ -5,8 +5,12 @@ import com.replaymod.core.events.PostRenderCallback;
|
|||||||
import com.replaymod.core.events.PostRenderWorldCallback;
|
import com.replaymod.core.events.PostRenderWorldCallback;
|
||||||
import com.replaymod.core.events.PreRenderCallback;
|
import com.replaymod.core.events.PreRenderCallback;
|
||||||
import com.replaymod.core.events.PreRenderHandCallback;
|
import com.replaymod.core.events.PreRenderHandCallback;
|
||||||
|
import com.replaymod.core.versions.MCVer;
|
||||||
|
import com.replaymod.replay.events.RenderHotbarCallback;
|
||||||
|
import com.replaymod.replay.events.RenderSpectatorCrosshairCallback;
|
||||||
import de.johni0702.minecraft.gui.utils.EventRegistrations;
|
import de.johni0702.minecraft.gui.utils.EventRegistrations;
|
||||||
import de.johni0702.minecraft.gui.versions.MatrixStack;
|
import de.johni0702.minecraft.gui.versions.MatrixStack;
|
||||||
|
import net.minecraftforge.client.event.RenderGameOverlayEvent;
|
||||||
import net.minecraftforge.client.event.RenderHandEvent;
|
import net.minecraftforge.client.event.RenderHandEvent;
|
||||||
import net.minecraftforge.client.event.RenderWorldLastEvent;
|
import net.minecraftforge.client.event.RenderWorldLastEvent;
|
||||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||||
@@ -47,4 +51,20 @@ public class EventsAdapter extends EventRegistrations {
|
|||||||
event.setCanceled(true);
|
event.setCanceled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SubscribeEvent
|
||||||
|
public void preRenderGameOverlay(RenderGameOverlayEvent.Pre event) {
|
||||||
|
Boolean result = null;
|
||||||
|
switch (MCVer.getType(event)) {
|
||||||
|
case CROSSHAIRS:
|
||||||
|
result = RenderSpectatorCrosshairCallback.EVENT.invoker().shouldRenderSpectatorCrosshair();
|
||||||
|
break;
|
||||||
|
case HOTBAR:
|
||||||
|
result = RenderHotbarCallback.EVENT.invoker().shouldRenderHotbar();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (result == Boolean.FALSE) {
|
||||||
|
event.setCanceled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user