Skip to content

Commit

Permalink
rearrange mixins, add ClientLevel mixin
Browse files Browse the repository at this point in the history
  • Loading branch information
ttttdoy committed Sep 4, 2024
1 parent 8534c3e commit b703623
Show file tree
Hide file tree
Showing 22 changed files with 199 additions and 83 deletions.

This file was deleted.

28 changes: 28 additions & 0 deletions src/main/java/breadmod/mixin/client/ClientLevelMixin.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package breadmod.mixin.client;

import breadmod.util.render.RenderGeneralKt;
import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.world.phys.Vec3;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;

// todo red sky hue shifting back to normal colors, repeating (probably use sin for this)
@Mixin(ClientLevel.class)
class ClientLevelMixin {

@Inject(method = "getSkyColor", at = @At("HEAD"), cancellable = true)
private void getSkyColor(Vec3 pPos, float pPartialTick, CallbackInfoReturnable<Vec3> cir) {
if (RenderGeneralKt.getSkyColorMixinActive()) {
cir.setReturnValue(new Vec3(1f, 0f, 0f));
}
}

@Inject(method = "getSkyDarken", at = @At("HEAD"), cancellable = true)
private void getSkyDarken(float pPartialTick, CallbackInfoReturnable<Float> cir) {
if (RenderGeneralKt.getSkyColorMixinActive()) {
cir.setReturnValue(1f);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package breadmod.mixin.accessors.client;
package breadmod.mixin.client;

import net.minecraft.client.renderer.texture.atlas.sources.DirectoryLister;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;

@Mixin(DirectoryLister.class)
public interface IAccessorDirectoryLister {
interface IAccessorDirectoryLister {
@Accessor("sourcePath")
String getSourcePath();

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package breadmod.mixin.accessors.client;
package breadmod.mixin.client;

import com.mojang.blaze3d.shaders.Program;
import org.spongepowered.asm.mixin.Mixin;
Expand Down
19 changes: 19 additions & 0 deletions src/main/java/breadmod/mixin/client/IFontManagerAccessor.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package breadmod.mixin.client;

import net.minecraft.client.gui.font.FontManager;
import net.minecraft.client.gui.font.FontSet;
import net.minecraft.resources.ResourceLocation;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;

import java.util.Map;

@Mixin(FontManager.class)
interface IFontManagerAccessor {

@Accessor("fontSets")
Map<ResourceLocation, FontSet> iGetFontSets();

@Accessor("missingFontSet")
FontSet iGetMissingFontSet();
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package breadmod.mixin.client;

import breadmod.mixin.accessors.client.IAccessorDirectoryLister;
import net.minecraft.client.renderer.texture.atlas.SpriteSource;
import net.minecraft.client.renderer.texture.atlas.sources.DirectoryLister;
import net.minecraft.resources.ResourceLocation;
Expand Down
16 changes: 2 additions & 14 deletions src/main/java/breadmod/mixin/client/MixinFontManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,35 +2,23 @@

import breadmod.util.ModFonts;
import net.minecraft.client.gui.Font;
import net.minecraft.client.gui.font.FontSet;
import net.minecraft.network.chat.Style;
import net.minecraft.resources.ResourceLocation;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.gen.Invoker;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;

import java.util.Map;

/**
* This mixin is not seriously used by us at the moment.
*
* @author Miko Elbrecht
* @since 1.0.0
*/
@Mixin(net.minecraft.client.gui.font.FontManager.class)
abstract class MixinFontManager {
@Final
@Shadow
private Map<ResourceLocation, FontSet> fontSets;

@Final
@Shadow
private FontSet missingFontSet;
abstract class MixinFontManager implements IFontManagerAccessor {

@Invoker("getActualId")
abstract ResourceLocation iGetID(ResourceLocation pId);
Expand All @@ -47,7 +35,7 @@ private void createFont(final CallbackInfoReturnable<? super Font> cir) {
final Style publicSansRegular = ModFonts.getPUBLIC_SANS_REGULAR();
final ResourceLocation font = publicSansRegular.getFont();
final ResourceLocation key = this.iGetID(font);
return this.fontSets.getOrDefault(key, this.missingFontSet);
return iGetFontSets().getOrDefault(key, iGetMissingFontSet());
},
false
));
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package breadmod.mixin.accessors.common;
package breadmod.mixin.common;

import net.minecraft.world.entity.Entity;
import net.minecraft.world.level.Level;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;

@Mixin(Entity.class)
public interface IAccessorEntity {
interface IAccessorEntity {
@Accessor("level")
Level breadmod$getLevel();
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package breadmod.mixin.common;

import breadmod.block.util.ILightningStrikeAction;
import breadmod.mixin.accessors.common.IAccessorEntity;
import net.minecraft.core.BlockPos;
import net.minecraft.world.entity.LightningBolt;
import net.minecraft.world.level.block.state.BlockState;
Expand Down
2 changes: 1 addition & 1 deletion src/main/kotlin/breadmod/ClientModEventBus.kt
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ object ClientModEventBus {
@SubscribeEvent
fun registerGuiOverlays(event: RegisterGuiOverlaysEvent) {
event.registerBelow(VanillaGuiOverlay.DEBUG_TEXT.id(), "tool_gun_overlay", ToolGunOverlay())
event.registerBelow(VanillaGuiOverlay.DEBUG_TEXT.id(), "war_overlay", WarOverlay())
event.registerAboveAll("war_overlay", WarOverlay())
}

@SubscribeEvent
Expand Down
4 changes: 2 additions & 2 deletions src/main/kotlin/breadmod/CommonForgeEventBus.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package breadmod

import breadmod.commands.server.WarTimerServerCommand
import breadmod.commands.server.WarTimerCommand
import breadmod.datagen.tool_gun.ModToolGunModeDataLoader
import breadmod.network.PacketHandler
import breadmod.network.clientbound.war_timer.WarTimerSynchronizationPacket
Expand Down Expand Up @@ -75,7 +75,7 @@ object CommonForgeEventBus {
@SubscribeEvent
fun registerCommands(event: RegisterCommandsEvent) {
event.dispatcher.register(Commands.literal("breadmod")
.then(WarTimerServerCommand.register())
.then(WarTimerCommand.register())
)
}
}
38 changes: 38 additions & 0 deletions src/main/kotlin/breadmod/block/WarTerminalBlock.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package breadmod.block

import breadmod.CommonForgeEventBus.warTimerMap
import breadmod.network.PacketHandler
import breadmod.network.clientbound.war_timer.WarTimerIncrementPacket
import net.minecraft.core.BlockPos
import net.minecraft.world.entity.player.Player
import net.minecraft.world.level.Level
import net.minecraft.world.level.block.Block
import net.minecraft.world.level.block.state.BlockState
import net.minecraft.world.level.material.FluidState
import net.minecraftforge.network.PacketDistributor

// todo 3d model, texturing, sounds
class WarTerminalBlock: Block(Properties.of()) {

override fun onDestroyedByPlayer(
state: BlockState,
level: Level,
pos: BlockPos,
player: Player,
willHarvest: Boolean,
fluid: FluidState
): Boolean {
val server = level.server ?: return super.onDestroyedByPlayer(state, level, pos, player, willHarvest, fluid)
server.playerList.players.forEach { player ->
warTimerMap[player]?.let {
val increase = it.first.third + 30
warTimerMap.put(player, Triple(it.first.first, 41, increase) to (it.second.first to true))
PacketHandler.NETWORK.send(
PacketDistributor.PLAYER.with { player },
WarTimerIncrementPacket(true, increase)
)
}
}
return super.onDestroyedByPlayer(state, level, pos, player, willHarvest, fluid)
}
}
14 changes: 7 additions & 7 deletions src/main/kotlin/breadmod/client/gui/WarOverlay.kt
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package breadmod.client.gui

import breadmod.ModMain.modLocation
import breadmod.client.gui.WarTickerClient.lastScroll
import breadmod.client.gui.WarTickerClient.scroll
import breadmod.client.gui.WarTickerClient.lastTimerPosition
import breadmod.client.gui.WarTickerClient.timerPosition
import breadmod.util.ModFonts
import breadmod.util.render.rgMinecraft
import breadmod.util.render.scaleFlat
Expand All @@ -28,18 +28,18 @@ class WarOverlay : AbstractModGuiOverlay() {
pBuffer: MultiBufferSource,
pPlayer: LocalPlayer
) {
val seconds = WarTickerClient.timer % 60
val minutes = WarTickerClient.timer / 60
val seconds = WarTickerClient.timeLeft % 60
val minutes = WarTickerClient.timeLeft / 60
val formattedSeconds = if (seconds < 10) "0$seconds" else seconds
val formattedMinutes = if (minutes < 10) "0$minutes" else minutes
val colorPair: Triple<Float, Float, Float> =
if (WarTickerClient.isIncreasing) Triple(0.376f, 0.91f, 0.471f)
if (WarTickerClient.isTimerIncreasing) Triple(0.376f, 0.91f, 0.471f)
else Triple(0.973f, 0f, 0f)

if (scroll > -110f) {
if (timerPosition > -110f) {
pPoseStack.pushPose()
pPoseStack.scaleFlat(0.5f)
pPoseStack.translate(0.0, Mth.lerp(rgMinecraft.partialTick, lastScroll, scroll).toDouble(), 0.0)
pPoseStack.translate(0.0, Mth.lerp(rgMinecraft.partialTick, lastTimerPosition, timerPosition).toDouble(), 0.0)
pPoseStack.translate(pScreenWidth - (pScreenWidth / 2).toDouble(), 0.0, 0.0)
pGuiGraphics.blit(overlayTexture, 0, 0, 0, 0, 163, 89)
pGuiGraphics.blit(overlayTexture, 163, 0, 0, 90, 166, 111)
Expand Down
24 changes: 12 additions & 12 deletions src/main/kotlin/breadmod/client/gui/WarTickerClient.kt
Original file line number Diff line number Diff line change
@@ -1,25 +1,25 @@
package breadmod.client.gui

object WarTickerClient {
var timer = 30
var isIncreasing = false
var timeLeft = 30
var isTimerIncreasing = false
var increasingTimer = 0
var active = false
var timerActive = false

var scroll = -110f
var lastScroll = -110f
var timerPosition = -110f
var lastTimerPosition = -110f

fun tick() {
if (increasingTimer > 0) { // Increase timer
increasingTimer--
timer++
} else isIncreasing = false
timeLeft++
} else isTimerIncreasing = false

lastScroll = scroll // hell code until I figure out proper smooth like anims from minecraft's code
if (scroll > -110.0 && !active) {
scroll -= (1f * 0.5f) * 4.0f
} else if (scroll < 0.0 && active) {
scroll += (1f * 0.5f) * 4.0f
lastTimerPosition = timerPosition // hell code until I figure out proper smooth like anims from minecraft's code
if (timerPosition > -110.0 && !timerActive) {
timerPosition -= (1f * 0.5f) * 4.0f
} else if (timerPosition < 0.0 && timerActive) {
timerPosition += (1f * 0.5f) * 4.0f
}
}
}
15 changes: 15 additions & 0 deletions src/main/kotlin/breadmod/client/render/SoundBlockRenderer.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@ import net.minecraft.Util
import net.minecraft.client.renderer.MultiBufferSource
import net.minecraft.client.renderer.blockentity.BlockEntityRenderer
import net.minecraft.network.chat.Component
import net.minecraft.resources.ResourceLocation
import net.minecraft.util.Mth.lerp
import net.minecraftforge.registries.ForgeRegistries
import kotlin.math.cos
import kotlin.math.max
import kotlin.math.sin
Expand All @@ -22,7 +24,12 @@ internal class SoundBlockRenderer : BlockEntityRenderer<SoundBlockEntity> {
pPackedLight: Int,
pPackedOverlay: Int
) {
val soundString = pBlockEntity.currentSound ?: return
val sound = ForgeRegistries.SOUND_EVENTS.getValue(ResourceLocation(soundString))?.location ?: return
val convertedString = if (sound.namespace == "minecraft") "subtitles." + sound.path else sound.path

// TODO split into render general
// TODO fix the scrolling not working properly
val pText = Component.literal("dummydummydummydummy")
val pMinX = 0
val pMaxX = 12
Expand Down Expand Up @@ -61,5 +68,13 @@ internal class SoundBlockRenderer : BlockEntityRenderer<SoundBlockEntity> {
pScale = 0.0105f
)
}

drawTextOnSide(
rgMinecraft.font, Component.translatable(convertedString),
0.1, -0.1,
pPoseStack = pPoseStack, pBuffer = pBuffer,
pBlockState = pBlockEntity.blockState,
pScale = 0.0105f
)
}
}
Loading

0 comments on commit b703623

Please sign in to comment.