223 lines
8.6 KiB
Java
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_);
|
|
}
|
|
}
|