ModernLifePatch/src-source/main/java/com/dairymoose/modernlife/blocks/gui/GuitarScreen.java
2024-10-26 09:40:21 +08:00

223 lines
8.6 KiB
Java

package com.dairymoose.modernlife.blocks.gui;
import com.dairymoose.modernlife.core.CustomBlocks;
import com.dairymoose.modernlife.core.ModernLifeCommon;
import com.dairymoose.modernlife.core.ModernLifeNetwork;
import com.dairymoose.modernlife.items.GuitarItem;
import com.dairymoose.modernlife.network.play.client.ServerboundGuitarPacket;
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.client.gui.Font;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.client.renderer.GameRenderer;
import net.minecraft.core.BlockPos;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.Style;
import net.minecraft.network.chat.TextColor;
import net.minecraft.network.chat.TextComponent;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.FormattedCharSequence;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@OnlyIn(Dist.CLIENT)
/* loaded from: outputsrg.jar:com/dairymoose/modernlife/blocks/gui/GuitarScreen.class */
public class GuitarScreen extends Screen {
private static final Logger LOGGER = LogManager.getLogger();
private static final ResourceLocation GUITAR_GUI = new ResourceLocation("modernlife", "textures/gui/mc_guitar_keys_full.png");
final int GUI_WIDTH = 256;
final int GUI_HEIGHT = 134;
private Level world;
private Player player;
GuitarItem.Tuning string;
int lastPlayedFret;
int counter;
char[] fretKeys;
char[] stringKeys;
public GuitarScreen(Level world, Player player) {
super(new TextComponent("Guitar").m_6270_(Style.EMPTY.withColor(TextColor.fromRgb(4210752))));
this.GUI_WIDTH = 256;
this.GUI_HEIGHT = 134;
this.string = GuitarItem.Tuning.STRING_E;
this.lastPlayedFret = -1;
this.counter = 1;
this.fretKeys = new char[]{'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', 'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'Z', 'X', 'C', 'V', 'B', 'N'};
this.stringKeys = new char[]{'1', '2', '3', '4', '5', '6'};
this.world = world;
this.player = player;
}
protected void init() {
ModernLifeCommon.LOGGER.debug("in init!");
int i = (this.width - 256) / 2;
int i2 = (this.height - 134) / 2;
}
public boolean isPauseScreen() {
return false;
}
private boolean areaContainsAmplifier(BlockPos pos) {
BlockState state = this.world.getBlockState(pos);
if (state.is(CustomBlocks.BLOCK_GUITAR_AMPLIFIER.get())) {
return true;
}
BlockState state2 = this.world.getBlockState(pos.above());
if (state2.is(CustomBlocks.BLOCK_GUITAR_AMPLIFIER.get())) {
return true;
}
BlockState state3 = this.world.getBlockState(pos.below());
if (state3.is(CustomBlocks.BLOCK_GUITAR_AMPLIFIER.get())) {
return true;
}
return false;
}
public boolean isNearAmplifier(Level world, BlockPos pos) {
if (world == null || pos == null) {
return false;
}
for (int x = -6; x < 6; x++) {
for (int z = -6; z < 6; z++) {
BlockPos searchPos = pos.east(x);
if (areaContainsAmplifier(searchPos.south(z))) {
return true;
}
}
}
return false;
}
public void applyGuitarStringChange(int stringNo) {
if (stringNo == 1) {
this.string = GuitarItem.Tuning.STRING_E;
return;
}
if (stringNo == 2) {
this.string = GuitarItem.Tuning.STRING_A;
return;
}
if (stringNo == 3) {
this.string = GuitarItem.Tuning.STRING_D;
return;
}
if (stringNo == 4) {
this.string = GuitarItem.Tuning.STRING_G;
} else if (stringNo == 5) {
this.string = GuitarItem.Tuning.STRING_B;
} else if (stringNo == 6) {
this.string = GuitarItem.Tuning.STRING_HI_E;
}
}
public int getGuitarStringNo() {
if (this.string == GuitarItem.Tuning.STRING_E) {
return 1;
}
if (this.string == GuitarItem.Tuning.STRING_A) {
return 2;
}
if (this.string == GuitarItem.Tuning.STRING_D) {
return 3;
}
if (this.string == GuitarItem.Tuning.STRING_G) {
return 4;
}
if (this.string == GuitarItem.Tuning.STRING_B) {
return 5;
}
if (this.string == GuitarItem.Tuning.STRING_HI_E) {
return 6;
}
return 1;
}
public boolean m_6050_(double a, double b, double c) {
int currentStringNo = getGuitarStringNo();
if (c > 0.0d) {
applyGuitarStringChange(currentStringNo - 1);
} else {
applyGuitarStringChange(currentStringNo + 1);
}
return super.m_6050_(a, b, c);
}
public boolean keyPressed(int key, int p_231046_2_, int p_231046_3_) {
ModernLifeCommon.LOGGER.debug("key press: " + key);
int keyIndex = ArrayUtils.indexOf(this.stringKeys, (char) key);
if (keyIndex != -1) {
int stringNo = keyIndex + 1;
applyGuitarStringChange(stringNo);
}
int keyIndex2 = ArrayUtils.indexOf(this.fretKeys, (char) key);
boolean distorted = isNearAmplifier(this.world, this.player.blockPosition());
if (keyIndex2 != -1) {
int fret = keyIndex2 + 1;
if (this.player != null && this.world != null) {
ServerboundGuitarPacket.playGuitarSound(this.world, this.player, this.player.blockPosition(), ServerboundGuitarPacket.getSoundEvent(this.string, distorted), distorted, fret);
}
ServerboundGuitarPacket packet = new ServerboundGuitarPacket(this.string, fret, distorted);
ModernLifeNetwork.INSTANCE.sendToServer(packet);
this.lastPlayedFret = fret - 1;
}
return super.keyPressed(key, p_231046_2_, p_231046_3_);
}
private void drawCenteredStringNoShadow(PoseStack p_238472_0_, Font p_238472_1_, Component p_238472_2_, int p_238472_3_, int p_238472_4_, int p_238472_5_) {
FormattedCharSequence lvt_6_1_ = p_238472_2_.getVisualOrderText();
p_238472_1_.draw(p_238472_0_, lvt_6_1_, p_238472_3_ - (p_238472_1_.width(lvt_6_1_) / 2), p_238472_4_, p_238472_5_);
}
private String numberSuffix(int fret) {
int lastDigit = fret % 10;
if (fret == 11 || fret == 12 || fret == 13) {
return "th";
}
if (lastDigit == 1) {
return "st";
}
if (lastDigit == 2) {
return "nd";
}
if (lastDigit == 3) {
return "rd";
}
return "th";
}
public void render(PoseStack p_230430_1_, int p_230430_2_, int p_230430_3_, float p_230430_4_) {
RenderSystem.setShader(GameRenderer::getPositionTexShader);
RenderSystem.setShaderTexture(0, GUITAR_GUI);
int lvt_5_1_ = (this.width - 256) / 2;
int lvt_6_1_ = (this.height - 134) / 2;
m_93228_(p_230430_1_, lvt_5_1_, lvt_6_1_, 0, 0, 256, 134);
String stringText = "";
if (this.string == GuitarItem.Tuning.STRING_E) {
stringText = "E String";
} else if (this.string == GuitarItem.Tuning.STRING_A) {
stringText = "A String";
} else if (this.string == GuitarItem.Tuning.STRING_D) {
stringText = "D String";
} else if (this.string == GuitarItem.Tuning.STRING_G) {
stringText = "G String";
} else if (this.string == GuitarItem.Tuning.STRING_B) {
stringText = "B String";
} else if (this.string == GuitarItem.Tuning.STRING_HI_E) {
stringText = "High E String";
}
drawCenteredStringNoShadow(p_230430_1_, this.minecraft.font, new TextComponent(stringText).m_6270_(Style.EMPTY.withColor(TextColor.fromRgb(16777215))), lvt_5_1_ + 128, lvt_6_1_ + 53, 0);
if (this.lastPlayedFret != -1) {
String fretText = this.lastPlayedFret + numberSuffix(this.lastPlayedFret) + " fret";
drawCenteredStringNoShadow(p_230430_1_, this.minecraft.font, new TextComponent(fretText).m_6270_(Style.EMPTY.withColor(TextColor.fromRgb(16777215))), lvt_5_1_ + 128, lvt_6_1_ + 140, 0);
}
super.render(p_230430_1_, p_230430_2_, p_230430_3_, p_230430_4_);
}
}