more minepad stuff, switch off of cloth config

This commit is contained in:
GiantLuigi4 2023-06-02 15:19:27 -04:00
parent 7d3de1fcc5
commit 116f7290d0
9 changed files with 179 additions and 177 deletions

View File

@ -104,7 +104,6 @@ public class ClientProxy extends SharedProxy implements IDisplayHandler, IJSQuer
isInHotbar = true; isInHotbar = true;
this.id = id; this.id = id;
} }
} }
private Minecraft mc; private Minecraft mc;

View File

@ -100,11 +100,12 @@ public class GuiSetURL2 extends WDScreen {
validate(tfURL.getText()); validate(tfURL.getText());
else if (ev.getSource() == btnShutDown) { else if (ev.getSource() == btnShutDown) {
if (isPad) { if (isPad) {
stack.getTag().remove("PadURL");
stack.getTag().remove("PadID");
WDNetworkRegistry.INSTANCE.sendToServer(new C2SMinepadUrl( WDNetworkRegistry.INSTANCE.sendToServer(new C2SMinepadUrl(
getUUID(), getUUID(),
"" ""
)); ));
stack.getTag().remove("PadURL");
} }
minecraft.setScreen(null); minecraft.setScreen(null);

View File

@ -11,118 +11,119 @@ import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.entity.player.PlayerRenderer; import net.minecraft.client.renderer.entity.player.PlayerRenderer;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
import net.montoyo.wd.WebDisplays; import net.montoyo.wd.WebDisplays;
import net.montoyo.wd.client.ClientProxy; import net.montoyo.wd.client.ClientProxy;
import net.montoyo.wd.item.ItemMinePad2;
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)
public final class MinePadRenderer implements IItemRenderer { public final class MinePadRenderer implements IItemRenderer {
private static final float PI = (float) Math.PI;
private static final float PI = (float) Math.PI; private final Minecraft mc = Minecraft.getInstance();
private final Minecraft mc = Minecraft.getInstance(); private final ResourceLocation tex = new ResourceLocation("webdisplays", "textures/models/minepad.png");
private final ResourceLocation tex = new ResourceLocation("webdisplays", "textures/models/minepad.png"); private final ModelMinePad model = new ModelMinePad();
// private final ModelMinePad model = new ModelMinePad(); private final ClientProxy clientProxy = (ClientProxy) WebDisplays.PROXY;
private final ClientProxy clientProxy = (ClientProxy) WebDisplays.PROXY;
private float sinSqrtSwingProg1;
private float sinSqrtSwingProg1; private float sinSqrtSwingProg2;
private float sinSqrtSwingProg2; private float sinSwingProg1;
private float sinSwingProg1; private float sinSwingProg2;
private float sinSwingProg2;
@Override
// public static void drawAxis() { public final boolean render(PoseStack stack, ItemStack is, float handSideSign, float swingProgress, float equipProgress, MultiBufferSource multiBufferSource, int packedLight) {
// glDisable(GL_TEXTURE_2D); //Pre-compute values
// glBegin(GL_LINES); float sqrtSwingProg = (float) Math.sqrt(swingProgress);
// glColor4f(1.f, 0.f, 0.f, 1.f); glVertex3d(0.0, 0.0, 0.0); sinSqrtSwingProg1 = (float) Math.sin(sqrtSwingProg * PI);
// glColor4f(1.f, 0.f, 0.f, 1.f); glVertex3d(5.0, 0.0, 0.0); sinSqrtSwingProg2 = (float) Math.sin(sqrtSwingProg * PI * 2.0f);
// glColor4f(0.f, 1.f, 0.f, 1.f); glVertex3d(0.0, 0.0, 0.0); sinSwingProg1 = (float) Math.sin(swingProgress * PI);
// glColor4f(0.f, 1.f, 0.f, 1.f); glVertex3d(0.0, 5.0, 0.0); sinSwingProg2 = (float) Math.sin(swingProgress * swingProgress * PI);
// glColor4f(0.f, 0.f, 1.f, 1.f); glVertex3d(0.0, 0.0, 0.0);
// glColor4f(0.f, 0.f, 1.f, 1.f); glVertex3d(0.0, 0.0, 5.0); //Render arm
// glEnd(); stack.pushPose();
// glEnable(GL_TEXTURE_2D); renderArmFirstPerson(stack, multiBufferSource, packedLight, equipProgress, handSideSign);
// } stack.popPose();
@Override //Prepare minePad transform
public final boolean render(PoseStack stack, ItemStack is, float handSideSign, float swingProgress, float equipProgress, MultiBufferSource multiBufferSource, int packedLight) { stack.pushPose();
//Pre-compute values stack.translate(handSideSign * -0.4f * sinSqrtSwingProg1, 0.2f * sinSqrtSwingProg2, -0.2f * sinSwingProg1);
float sqrtSwingProg = (float) Math.sqrt(swingProgress); stack.translate(handSideSign * 0.56f, -0.52f - equipProgress * 0.6f, -0.72f);
sinSqrtSwingProg1 = (float) Math.sin(sqrtSwingProg * PI); stack.mulPose(Vector3f.YP.rotationDegrees(handSideSign * (45.0f - sinSwingProg2 * 20.0f)));
sinSqrtSwingProg2 = (float) Math.sin(sqrtSwingProg * PI * 2.0f); stack.mulPose(Vector3f.ZP.rotationDegrees(handSideSign * sinSqrtSwingProg1 * -20.0f));
sinSwingProg1 = (float) Math.sin(swingProgress * PI); stack.mulPose(Vector3f.XP.rotationDegrees(sinSqrtSwingProg1 * -80.0f));
sinSwingProg2 = (float) Math.sin(swingProgress * swingProgress * PI); stack.mulPose(Vector3f.YP.rotationDegrees(handSideSign * -45.0f));
//Render arm // by default, the player holds the device off to the side
stack.pushPose(); // if they are crouching, they hold it infront of them
renderArmFirstPerson(stack, multiBufferSource, packedLight, equipProgress, handSideSign); // however, if they are holding two at once, then it once again should just be held off to the side
stack.popPose(); boolean sideHold = !Minecraft.getInstance().player.isShiftKeyDown();
if (
//Prepare minePad transform (handSideSign < 0 && Minecraft.getInstance().player.getItemInHand(InteractionHand.MAIN_HAND).getItem() instanceof ItemMinePad2) ||
stack.pushPose(); (handSideSign > 0 && Minecraft.getInstance().player.getItemInHand(InteractionHand.OFF_HAND).getItem() instanceof ItemMinePad2)
stack.translate(handSideSign * -0.4f * sinSqrtSwingProg1, 0.2f * sinSqrtSwingProg2, -0.2f * sinSwingProg1); ) sideHold = true;
stack.translate(handSideSign * 0.56f, -0.52f - equipProgress * 0.6f, -0.72f);
stack.mulPose(Vector3f.YP.rotationDegrees(handSideSign * (45.0f - sinSwingProg2 * 20.0f))); if (sideHold) {
stack.mulPose(Vector3f.ZP.rotationDegrees(handSideSign * sinSqrtSwingProg1 * -20.0f)); stack.translate(0.0f, 0.0f, -0.2f);
stack.mulPose(Vector3f.XP.rotationDegrees(sinSqrtSwingProg1 * -80.0f)); stack.mulPose(Vector3f.YP.rotationDegrees(20.0f * -handSideSign));
stack.mulPose(Vector3f.YP.rotationDegrees(handSideSign * -45.0f)); float total = 0.475f;
float off = -0.025f; // gotta love magic numbers
if(handSideSign >= 0.0f) stack.translate(-(total - off) + (off * handSideSign), -0.1f, 0.0f);
stack.translate(-1.065f, 0.0f, 0.0f); stack.mulPose(Vector3f.ZP.rotationDegrees(1.0f));
else { } else if (handSideSign >= 0) // right hand
stack.translate(0.0f, 0.0f, -0.2f); stack.translate(-1.065f, 0.0f, 0.0f);
stack.mulPose(Vector3f.YP.rotationDegrees(20.0f)); else // left hand
stack.translate(-0.475f, -0.1f, 0.0f); stack.translate(0.065f, 0.0f, 0.0f);
stack.mulPose(Vector3f.ZP.rotationDegrees(1.0f));
} //Render model
stack.translate(0.063f, 0.28f, 0.001f);
//Render model model.render(multiBufferSource, stack);
stack.pushPose(); stack.translate(-0.063f, -0.28f, -0.001f);
stack.mulPose(Vector3f.XP.rotationDegrees(-90.0f));
RenderSystem.setShaderColor(1.0f, 1.0f, 1.0f, 1.0f); if (is.getTag() != null && is.getTag().contains("PadID")) {
RenderSystem.setShaderTexture(0, tex); ClientProxy.PadData pd = clientProxy.getPadByID(is.getTag().getUUID("PadID"));
// model.render(1.f / 16.f);
stack.popPose(); //Render web view
if (pd != null) {
//Render web view double x1 = 0.0;
if(is.getTag() != null && is.getTag().contains("PadID")) { double y1 = 0.0;
ClientProxy.PadData pd = clientProxy.getPadByID(is.getTag().getUUID("PadID")); double x2 = 27.65 / 32.0 + 0.01;
double y2 = 14.0 / 32.0 + 0.002;
if(pd != null) {
stack.translate(0.063f, 0.28f, 0.001f); stack.translate(0.063f, 0.28f, 0.001f);
RenderSystem.setShaderTexture(0, tex); RenderSystem.setShaderTexture(0, tex);
pd.view.draw(stack,0.0, 0.0, 27.65 / 32.0 + 0.01, 14.0 / 32.0 + 0.002); pd.view.draw(stack, x1, y1, x2, y2);
} }
} }
stack.popPose(); stack.popPose();
RenderSystem.enableCull(); RenderSystem.enableCull();
return false; return true;
} }
private void renderArmFirstPerson(PoseStack stack, MultiBufferSource buffer, int combinedLight, float equipProgress, float handSideSign) { private void renderArmFirstPerson(PoseStack stack, MultiBufferSource buffer, int combinedLight, float equipProgress, float handSideSign) {
float tx = -0.3f * sinSqrtSwingProg1; float tx = -0.3f * sinSqrtSwingProg1;
float ty = 0.4f * sinSqrtSwingProg2; float ty = 0.4f * sinSqrtSwingProg2;
float tz = -0.4f * sinSwingProg1; float tz = -0.4f * sinSwingProg1;
stack.translate(handSideSign * (tx + 0.64000005f), ty - 0.6f - equipProgress * 0.6f, tz - 0.71999997f); stack.translate(handSideSign * (tx + 0.64000005f), ty - 0.6f - equipProgress * 0.6f, tz - 0.71999997f);
stack.mulPose(Vector3f.YP.rotationDegrees(handSideSign * 45.0f)); stack.mulPose(Vector3f.YP.rotationDegrees(handSideSign * 45.0f));
stack.mulPose(Vector3f.YP.rotationDegrees(handSideSign * sinSqrtSwingProg1 * 70.0f)); stack.mulPose(Vector3f.YP.rotationDegrees(handSideSign * sinSqrtSwingProg1 * 70.0f));
stack.mulPose(Vector3f.ZP.rotationDegrees(handSideSign * sinSwingProg2 * -20.0f)); stack.mulPose(Vector3f.ZP.rotationDegrees(handSideSign * sinSwingProg2 * -20.0f));
stack.translate(-handSideSign, 3.6f, 3.5f); stack.translate(-handSideSign, 3.6f, 3.5f);
stack.mulPose(Vector3f.ZP.rotationDegrees(handSideSign * 120.0f)); stack.mulPose(Vector3f.ZP.rotationDegrees(handSideSign * 120.0f));
stack.mulPose(Vector3f.XP.rotationDegrees(200.0f)); stack.mulPose(Vector3f.XP.rotationDegrees(200.0f));
stack.mulPose(Vector3f.YP.rotationDegrees(handSideSign * -135.0f)); stack.mulPose(Vector3f.YP.rotationDegrees(handSideSign * -135.0f));
stack.translate(handSideSign * 5.6f, 0.0f, 0.0f); stack.translate(handSideSign * 5.6f, 0.0f, 0.0f);
PlayerRenderer playerRenderer = (PlayerRenderer) mc.getEntityRenderDispatcher().getRenderer(mc.player); PlayerRenderer playerRenderer = (PlayerRenderer) mc.getEntityRenderDispatcher().getRenderer(mc.player);
RenderSystem.setShaderTexture(0, mc.player.getSkinTextureLocation()); RenderSystem.setShaderTexture(0, mc.player.getSkinTextureLocation());
if(handSideSign >= 0.0f) if (handSideSign >= 0.0f)
playerRenderer.renderRightHand(stack, buffer, combinedLight, mc.player); playerRenderer.renderRightHand(stack, buffer, combinedLight, mc.player);
else else
playerRenderer.renderLeftHand(stack, buffer, combinedLight, mc.player); playerRenderer.renderLeftHand(stack, buffer, combinedLight, mc.player);
} }
} }

View File

@ -4,60 +4,36 @@
package net.montoyo.wd.client.renderers; package net.montoyo.wd.client.renderers;
/*import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.blaze3d.vertex.*;
import net.minecraft.client.model.Model; import com.mojang.math.Matrix4f;
import net.minecraft.client.model.geom.ModelPart; import net.minecraft.client.renderer.GameRenderer;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)
public final class ModelMinePad extends Model { public final class ModelMinePad {
public void render(MultiBufferSource buffers, PoseStack stack) {
// fields // TODO: this needs completing
private final ModelPart base; // TODO: I'd like this to be able to load a model from a JSON if possible
private final ModelPart left;
private final ModelPart right; double x1 = 1.0;
double y1 = 0.0;
public ModelMinePad() { double x2 = 27.65 / 32.0 + 0.01;
super(); double y2 = 14.0 / 32.0 + 0.002;
textureWidth = 64;
textureHeight = 32; Matrix4f positionMatrix = stack.last().pose();
Tesselator t = Tesselator.getInstance();
base = new ModelPart(this, 0, 0); BufferBuilder vb = t.getBuilder();
base.addBox(0F, 0F, 0F, 14, 1, 9);
base.setRotationPoint(1F, 0F, 3.5F); RenderSystem.setShader(GameRenderer::getPositionColorShader);
base.setTextureSize(64, 32); RenderSystem.setShaderColor(1.0f, 1.0f, 1.0f, 1.0f);
base.mirror = true; vb.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR);
clearRotation(base); vb.vertex(positionMatrix, (float) x1, (float) y1, 0.0f).color(0, 0, 0, 255).endVertex();
left = new ModelRenderer(this, 0, 10); vb.vertex(positionMatrix, (float) x2, (float) y1, 0.0f).color(0, 0, 0, 255).endVertex();
left.addBox(0F, 0F, 0F, 1, 1, 7); vb.vertex(positionMatrix, (float) x2, (float) y2, 0.0f).color(0, 0, 0, 255).endVertex();
left.setRotationPoint(0F, 0F, 4.5F); vb.vertex(positionMatrix, (float) x1, (float) y2, 0.0f).color(0, 0, 0, 255).endVertex();
left.setTextureSize(64, 32); t.end();
left.mirror = true; }
clearRotation(left); }
right = new ModelRenderer(this, 30, 10);
right.addBox(0F, 0F, 0F, 1, 1, 7);
right.setRotationPoint(15F, 0F, 4.5F);
right.setTextureSize(64, 32);
right.mirror = true;
clearRotation(right);
}
public final void render(float f5) {
base.render(f5);
left.render(f5);
right.render(f5);
}
private void clearRotation(ModelPart model) {
model.rotateAngleX = 0.0f;
model.rotateAngleY = 0.0f;
model.rotateAngleZ = 0.0f;
}
@Override
public void renderToBuffer(PoseStack poseStack, VertexConsumer buffer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha) {
}
}*/

View File

@ -35,9 +35,10 @@ public class CommonConfig {
@Comment("Options for the browsers (both the minePad and the screens)") @Comment("Options for the browsers (both the minePad and the screens)")
@CFGSegment("browser_options") @CFGSegment("browser_options")
public static class Browser { public static class Browser {
@Name("home_page") @Name("blacklist")
@Comment("The page which screens should open up to when turning on") @Comment("The page which screens should open up to when turning on")
@Translation("config.webdisplays.blacklist") @Translation("config.webdisplays.blacklist")
@Default(valueStr = "")
public static String[] blacklist = new String[0]; public static String[] blacklist = new String[0];
@Name("home_page") @Name("home_page")

View File

@ -138,10 +138,13 @@ public class AnnoCFG {
case OTHER -> { case OTHER -> {
Class<?> fieldType = field.getType(); Class<?> fieldType = field.getType();
if (fieldType.equals(String[].class)) { if (fieldType.equals(String[].class)) {
value = builder.define(nameStr, new String[0]); Supplier<String> sup = builder.define(nameStr, defaultValue.valueStr());
value = () -> {
String v = sup.get();
return v.split(",");
};
} else if (fieldType.equals(String.class)) { } else if (fieldType.equals(String.class)) {
String def = defaultValue.valueStr(); value = builder.define(nameStr, defaultValue.valueStr());
value = builder.define(nameStr, def);
} else } else
throw new RuntimeException("NYI " + field.getType()); throw new RuntimeException("NYI " + field.getType());
} }
@ -149,7 +152,8 @@ public class AnnoCFG {
} }
} catch (NullPointerException npe) { } catch (NullPointerException npe) {
String inf = ""; String inf = "";
if (npe.getMessage().contains("\"value.Default\"")) inf = " this is likely due to a missing default."; if (npe.getMessage().contains("\"value.Default\""))
inf = " this is likely due to a missing default.";
throw new RuntimeException("A null pointer occurred on " + field.getName() + inf, npe); throw new RuntimeException("A null pointer occurred on " + field.getName() + inf, npe);
} }

View File

@ -224,7 +224,7 @@ public class TileEntityScreen extends BlockEntity {
public void createBrowser(boolean doAnim) { public void createBrowser(boolean doAnim) {
if (WebDisplays.PROXY instanceof ClientProxy clientProxy) { if (WebDisplays.PROXY instanceof ClientProxy clientProxy) {
browser = clientProxy.getMCEF().createBrowser(WebDisplays.applyBlacklist(url != null ? url : "https://www.google.com")); browser = clientProxy.getMCEF().createBrowser(WebDisplays.applyBlacklist(url != null ? url : "https://www.google.com"));
if (rotation.isVertical) if (rotation.isVertical)
browser.resize(resolution.y, resolution.x); browser.resize(resolution.y, resolution.x);
else else

View File

@ -30,13 +30,40 @@ public class C2SMinepadUrl extends Packet {
buf.writeUtf(url); buf.writeUtf(url);
} }
protected void merge(ItemStack stack) {
if (url.equals("")) {
stack.getOrCreateTag().remove("PadID");
stack.getOrCreateTag().remove("PadURL");
} else {
stack.getOrCreateTag().putUUID("PadID", id);
stack.getOrCreateTag().putString("PadURL", url);
}
}
@Override @Override
public void handle(NetworkEvent.Context ctx) { public void handle(NetworkEvent.Context ctx) {
// check if the player is holding a minePad with the requested id
// if the player is, then update that pad
for (InteractionHand value : InteractionHand.values()) { for (InteractionHand value : InteractionHand.values()) {
ItemStack stack = ctx.getSender().getItemInHand(value); ItemStack stack = ctx.getSender().getItemInHand(value);
if (stack.getItem() instanceof ItemMinePad2 pad) { if (stack.getItem() instanceof ItemMinePad2 && stack.getOrCreateTag().contains("PadID")) {
stack.getOrCreateTag().putUUID("PadID", id); UUID padId = stack.getTag().getUUID("PadID");
stack.getOrCreateTag().putString("PadURL", url); if (padId.equals(id)) {
merge(stack);
return;
}
}
}
// if the player is not holding the requested minePad, update the first one that does not already have an ID
for (InteractionHand value : InteractionHand.values()) {
ItemStack stack = ctx.getSender().getItemInHand(value);
if (stack.getItem() instanceof ItemMinePad2 && stack.getOrCreateTag().contains("PadID")) {
if (stack.getOrCreateTag().contains("PadID"))
continue;
merge(stack);
return;
} }
} }
} }

View File

@ -45,10 +45,3 @@ mandatory=true
versionRange="[1.0.0, )" versionRange="[1.0.0, )"
ordering="NONE" ordering="NONE"
side="BOTH" side="BOTH"
[[dependencies.webdisplays]]
modId="cloth_config"
mandatory=true
versionRange="[8.2.88, )"
ordering="NONE"
side="BOTH"