kinda fix screen configurator, tweak some code

This commit is contained in:
GiantLuigi4 2023-05-31 23:12:22 -04:00
parent 64cfb61a27
commit 52f7695c1c
17 changed files with 108 additions and 124 deletions

View File

@ -11,8 +11,6 @@ import me.shedaniel.autoconfig.serializer.Toml4jConfigSerializer;
import net.minecraft.ChatFormatting;
import net.minecraft.advancements.Advancement;
import net.minecraft.advancements.CriteriaTriggers;
import net.minecraft.client.Minecraft;
import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
@ -25,11 +23,7 @@ import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.BlockHitResult;
import net.minecraftforge.client.event.ClientChatEvent;
import net.minecraftforge.client.event.RenderHighlightEvent;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.AttachCapabilitiesEvent;
import net.minecraftforge.event.ServerChatEvent;
@ -46,18 +40,19 @@ import net.minecraftforge.fml.loading.FMLEnvironment;
import net.minecraftforge.network.PacketDistributor;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import net.montoyo.wd.block.BlockScreen;
import net.montoyo.wd.client.ClientProxy;
import net.montoyo.wd.config.ModConfig;
import net.montoyo.wd.controls.ScreenControlRegistry;
import net.montoyo.wd.core.*;
import net.montoyo.wd.entity.TileEntityScreen;
import net.montoyo.wd.init.BlockInit;
import net.montoyo.wd.init.ItemInit;
import net.montoyo.wd.init.TileInit;
import net.montoyo.wd.miniserv.server.Server;
import net.montoyo.wd.net.WDNetworkRegistry;
import net.montoyo.wd.net.client_bound.S2CMessageServerInfo;
import net.montoyo.wd.utilities.*;
import net.montoyo.wd.utilities.DistSafety;
import net.montoyo.wd.utilities.Log;
import net.montoyo.wd.utilities.Util;
import java.io.*;
import java.net.MalformedURLException;
@ -172,7 +167,10 @@ public class WebDisplays {
ItemInit.registerComponents();
TileInit.init(bus);
MinecraftForge.EVENT_BUS.addListener(WebDisplays::onDrawSelection);
if (FMLEnvironment.dist.isClient()) {
// proxies are annoying, so from now on, I'mma be just registering stuff in here
MinecraftForge.EVENT_BUS.addListener(ClientProxy::onDrawSelection);
}
PROXY.preInit();
@ -199,30 +197,6 @@ public class WebDisplays {
ScreenControlRegistry.init();
}
}
private static void onDrawSelection(RenderHighlightEvent event) {
if (event.getTarget() instanceof BlockHitResult bhr) {
BlockState state = Minecraft.getInstance().level.getBlockState(bhr.getBlockPos());
if (state.getBlock() instanceof BlockScreen screen) {
Vector3i vec = new Vector3i(bhr.getBlockPos().getX(), bhr.getBlockPos().getY(), bhr.getBlockPos().getZ());
BlockSide side = BlockSide.fromInt(bhr.getDirection().ordinal());
Multiblock.findOrigin(
Minecraft.getInstance().level, vec,
side, null
);
BlockPos pos = new BlockPos(vec.x, vec.y, vec.z);
BlockEntity be = Minecraft.getInstance().level.getBlockEntity(
pos
);
if (be instanceof TileEntityScreen tes) {
if (tes.getScreen(side) != null) {
event.setCanceled(true);
}
}
}
}
}
@SubscribeEvent
public static void onAttachPlayerCap(AttachCapabilitiesEvent<Entity> event) {

View File

@ -34,6 +34,8 @@ import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.ClipContext;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.BlockHitResult;
import net.minecraft.world.phys.HitResult;
import net.minecraft.world.phys.Vec3;
@ -41,6 +43,7 @@ import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.client.event.ModelEvent;
import net.minecraftforge.client.event.RenderHandEvent;
import net.minecraftforge.client.event.RenderHighlightEvent;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.TickEvent;
import net.minecraftforge.event.level.LevelEvent;
@ -80,7 +83,7 @@ import java.util.stream.Stream;
@Mod.EventBusSubscriber(modid = "webdisplays", value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.MOD)
public class ClientProxy extends SharedProxy implements IDisplayHandler, IJSQueryHandler, ResourceManagerReloadListener {
public class PadData {
public IBrowser view;
@ -608,7 +611,7 @@ public class ClientProxy extends SharedProxy implements IDisplayHandler, IJSQuer
//Laser pointer raycast
if(mc.player != null && mc.level != null && ItemInit.itemLaserPointer.isPresent() && mc.player.getItemInHand(InteractionHand.MAIN_HAND).getItem().equals(ItemInit.itemLaserPointer.get())
&& mc.options.keyUse.isDown()
&& (mc.hitResult == null || mc.hitResult.getType() == HitResult.Type.BLOCK)) {
&& (mc.hitResult == null || mc.hitResult.getType() == HitResult.Type.BLOCK || mc.hitResult.getType() == HitResult.Type.MISS)) {
laserPointerRenderer.isOn = true;
BlockHitResult result = raycast(64.0); //TODO: Make that distance configurable
@ -669,8 +672,9 @@ public class ClientProxy extends SharedProxy implements IDisplayHandler, IJSQuer
if (ev.getHand() == InteractionHand.OFF_HAND)
handSide = handSide.getOpposite();
renderer.render(ev.getPoseStack(), ev.getItemStack(), (handSide == HumanoidArm.RIGHT) ? 1.0f : -1.0f, ev.getSwingProgress(), ev.getEquipProgress(), ev.getMultiBufferSource(), ev.getPackedLight());
ev.setCanceled(true);
if (renderer.render(ev.getPoseStack(), ev.getItemStack(), (handSide == HumanoidArm.RIGHT) ? 1.0f : -1.0f, ev.getSwingProgress(), ev.getEquipProgress(), ev.getMultiBufferSource(), ev.getPackedLight())) {
ev.setCanceled(true);
}
}
}
@ -806,4 +810,28 @@ public class ClientProxy extends SharedProxy implements IDisplayHandler, IJSQuer
if (senderLevel == null) return Minecraft.getInstance().level;
return senderLevel;
}
public static void onDrawSelection(RenderHighlightEvent event) {
if (event.getTarget() instanceof BlockHitResult bhr) {
BlockState state = Minecraft.getInstance().level.getBlockState(bhr.getBlockPos());
if (state.getBlock() instanceof BlockScreen screen) {
Vector3i vec = new Vector3i(bhr.getBlockPos().getX(), bhr.getBlockPos().getY(), bhr.getBlockPos().getZ());
BlockSide side = BlockSide.fromInt(bhr.getDirection().ordinal());
Multiblock.findOrigin(
Minecraft.getInstance().level, vec,
side, null
);
BlockPos pos = new BlockPos(vec.x, vec.y, vec.z);
BlockEntity be = Minecraft.getInstance().level.getBlockEntity(
pos
);
if (be instanceof TileEntityScreen tes) {
if (tes.getScreen(side) != null) {
event.setCanceled(true);
}
}
}
}
}
}

View File

@ -184,7 +184,6 @@ public class GuiMinePad extends WDScreen {
pad.view.injectMouseMove(sx, sy, 0, sy < 0);
else
pad.view.injectMouseButton(sx, sy, 0, btn + 1, pressed, 1);
}
}

View File

@ -20,6 +20,7 @@ import net.montoyo.wd.item.WDItem;
import net.montoyo.wd.net.WDNetworkRegistry;
import net.montoyo.wd.net.server_bound.C2SMessageScreenCtrl;
import net.montoyo.wd.utilities.*;
import org.lwjgl.glfw.GLFW;
import javax.annotation.Nullable;
import java.util.ArrayList;
@ -502,5 +503,16 @@ public class GuiScreenConfig extends WDScreen {
return "Screen_Configurator";
}
// reason: allow closing the UI, lol
@Override
public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
if (keyCode == GLFW.GLFW_KEY_ESCAPE) {
Minecraft.getInstance().setScreen(null);
return true;
}
return super.keyPressed(keyCode, scanCode, modifiers);
}
}

View File

@ -136,8 +136,13 @@ public abstract class WDScreen extends Screen {
public boolean mouseClicked(double mouseX, double mouseY, int button) {
boolean clicked = false;
for(Control ctrl: controls)
clicked = clicked || ctrl.mouseClicked(mouseX, mouseY, button);
for(Control ctrl: controls) {
clicked = ctrl.mouseClicked(mouseX, mouseY, button);
if (clicked) {
System.out.println(ctrl);
}
if (clicked) break; // don't assume the compiler will optimize stuff
}
return clicked;
}

View File

@ -66,9 +66,9 @@ public class CheckBox extends BasicControl {
checked = !checked;
mc.getSoundManager().play(SimpleSoundInstance.forUI(SoundEvents.UI_BUTTON_CLICK, 1.0F));
parent.actionPerformed(new CheckedEvent(this));
return true;
}
return true;
}
return false;

View File

@ -8,7 +8,6 @@ import com.mojang.blaze3d.vertex.PoseStack;
import net.montoyo.wd.client.gui.loading.GuiLoader;
import net.montoyo.wd.client.gui.loading.JsonAWrapper;
import net.montoyo.wd.client.gui.loading.JsonOWrapper;
import org.lwjgl.opengl.GL11;
import java.util.ArrayList;
@ -67,8 +66,10 @@ public abstract class Container extends BasicControl {
mouseX -= x + paddingX;
mouseY -= y + paddingY;
for(Control ctrl : childs)
clicked = clicked || ctrl.mouseClicked(mouseX, mouseY, mouseButton);
for(Control ctrl : childs) {
clicked = ctrl.mouseClicked(mouseX, mouseY, mouseButton);
if (clicked) break; // don't assume compiler optimizations
}
}
return clicked;

View File

@ -13,7 +13,8 @@ import net.montoyo.wd.client.gui.loading.JsonOWrapper;
import java.util.ArrayList;
import static org.lwjgl.opengl.GL11.*;
import static org.lwjgl.opengl.GL11.GL_COLOR_BUFFER_BIT;
import static org.lwjgl.opengl.GL11.GL_NEAREST;
public class List extends BasicControl {
@ -240,13 +241,16 @@ public class List extends BasicControl {
if(isInScrollbar(mouseX, mouseY)) {
scrolling = true;
scrollGrab = mouseY - (y + 1 + scrollPos);
} else if(selected >= 0)
parent.actionPerformed(new EntryClick(this));
return true;
} else if(selected >= 0) {
System.out.println(parent.actionPerformed(new EntryClick(this)));
return true;
}
return true;
return false;
}
return true;
return false;
}
@Override

View File

@ -8,7 +8,6 @@ import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.entity.ItemRenderer;
import net.minecraft.world.item.ItemStack;
import net.minecraftforge.eventbus.api.IEventBus;
import net.montoyo.wd.client.gui.loading.JsonOWrapper;
import java.util.ArrayList;
@ -103,9 +102,15 @@ public class UpgradeGroup extends BasicControl {
@Override
public boolean mouseClicked(double mouseX, double mouseY, int mouseButton) {
if(mouseButton == 0) {
clickStack = overStack;
return true;
// don't process the click if it's not inbounds, lol
if (
mouseX >= x && mouseX <= x + width &&
mouseY >= y && mouseX <= y + height
) {
clickStack = overStack;
return true;
}
}
return false;

View File

@ -9,7 +9,17 @@ import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.world.item.ItemStack;
public interface IItemRenderer {
void render(PoseStack stack, ItemStack is, float handSideSign, float swingProgress, float equipProgress, MultiBufferSource multiBufferSource, int packedLight);
/**
* @param pose the pose stack
* @param stack the item stack
* @param handSideSign TODO:
* @param swingProgress TODO:
* @param equipProgress TODO:
* @param multiBufferSource the buffer source
* @param packedLight packed light
* @return whether or not to cancel vanilla rendering
*/
boolean render(PoseStack pose, ItemStack stack, float handSideSign, float swingProgress, float equipProgress, MultiBufferSource multiBufferSource, int packedLight);
}

View File

@ -23,7 +23,7 @@ public final class LaserPointerRenderer implements IItemRenderer {
public LaserPointerRenderer() {}
@Override
public void render(PoseStack poseStack, ItemStack is, float handSideSign, float swingProgress, float equipProgress, MultiBufferSource multiBufferSource, int packedLight) {
public boolean render(PoseStack poseStack, ItemStack is, float handSideSign, float swingProgress, float equipProgress, MultiBufferSource multiBufferSource, int packedLight) {
RenderSystem.disableCull();
RenderSystem.disableTexture();
RenderSystem.enableDepthTest();
@ -78,6 +78,8 @@ public final class LaserPointerRenderer implements IItemRenderer {
RenderSystem.enableTexture(); //Fix for shitty minecraft fire
RenderSystem.enableCull();
poseStack.popPose();
return true;
}
private static void drawLineBetween(BufferBuilder bb, Matrix4f matrix, Vec3 local, Vec3 target)

View File

@ -45,7 +45,7 @@ public final class MinePadRenderer implements IItemRenderer {
// }
@Override
public final void render(PoseStack stack, ItemStack is, float handSideSign, float swingProgress, float equipProgress, MultiBufferSource multiBufferSource, int packedLight) {
public final boolean render(PoseStack stack, ItemStack is, float handSideSign, float swingProgress, float equipProgress, MultiBufferSource multiBufferSource, int packedLight) {
//Pre-compute values
float sqrtSwingProg = (float) Math.sqrt(swingProgress);
sinSqrtSwingProg1 = (float) Math.sin(sqrtSwingProg * PI);
@ -97,6 +97,8 @@ public final class MinePadRenderer implements IItemRenderer {
stack.popPose();
RenderSystem.enableCull();
return false;
}
private void renderArmFirstPerson(PoseStack stack, MultiBufferSource buffer, int combinedLight, float equipProgress, float handSideSign) {

View File

@ -18,7 +18,7 @@ import java.util.function.Function;
public class LaserControl extends ScreenControl {
public static final ResourceLocation id = new ResourceLocation("webdisplays:laser");
public static enum ControlType {
public enum ControlType {
MOVE, DOWN, UP
}

View File

@ -23,7 +23,7 @@ import java.util.function.Function;
public class ManageRightsAndUpdgradesControl extends ScreenControl {
public static final ResourceLocation id = new ResourceLocation("webdisplays:mod_rights_upgrades");
public static enum ControlType {
public enum ControlType {
RIGHTS, UPGRADES
}
@ -41,6 +41,7 @@ public class ManageRightsAndUpdgradesControl extends ScreenControl {
public ManageRightsAndUpdgradesControl(int friendRights, int otherRights) {
super(id);
type = ControlType.RIGHTS;
this.friendRights = friendRights;
this.otherRights = otherRights;
}

View File

@ -19,7 +19,7 @@ import java.util.function.Function;
public class ScreenModifyControl extends ScreenControl {
public static final ResourceLocation id = new ResourceLocation("webdisplays:mod_screen");
public static enum ControlType {
public enum ControlType {
RESOLUTION, ROTATION
}

View File

@ -6,7 +6,6 @@ package net.montoyo.wd.item;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.context.UseOnContext;
@ -20,9 +19,6 @@ import net.montoyo.wd.utilities.Multiblock;
import net.montoyo.wd.utilities.Util;
import net.montoyo.wd.utilities.Vector3i;
import org.jetbrains.annotations.NotNull;
import org.lwjgl.system.CallbackI;
import javax.annotation.Nonnull;
public class ItemScreenConfigurator extends Item implements WDItem {
@ -42,7 +38,7 @@ public class ItemScreenConfigurator extends Item implements WDItem {
return InteractionResult.SUCCESS;
Vector3i origin = new Vector3i(context.getClickedPos());
BlockSide side = BlockSide.values()[context.getHorizontalDirection().ordinal()];
BlockSide side = BlockSide.values()[context.getHorizontalDirection().getOpposite().ordinal()];
Multiblock.findOrigin(context.getLevel(), origin, side, null);
BlockEntity te = context.getLevel().getBlockEntity(origin.toBlock());

View File

@ -1,56 +1 @@
{
"credit": "Made with Blockbench",
"texture_size": [64, 32],
"textures": {
"0": "webdisplays:models/minepad"
},
"elements": [
{
"from": [1, 0, 0],
"to": [15, 1, 9],
"rotation": {"angle": 0, "axis": "y", "origin": [1, 0, 3.5]},
"faces": {
"north": {"uv": [2.25, 4.5, 5.75, 5], "texture": "#0"},
"east": {"uv": [0, 4.5, 2.25, 5], "texture": "#0"},
"south": {"uv": [8, 4.5, 11.5, 5], "texture": "#0"},
"west": {"uv": [5.75, 4.5, 8, 5], "texture": "#0"},
"up": {"uv": [5.75, 4.5, 2.25, 0], "texture": "#0"},
"down": {"uv": [9.25, 0, 5.75, 4.5], "texture": "#0"}
}
},
{
"from": [0, 0, 1],
"to": [1, 1, 8],
"rotation": {"angle": 0, "axis": "y", "origin": [0, 0, 4.5]},
"faces": {
"north": {"uv": [1.75, 8.5, 2, 9], "texture": "#0"},
"east": {"uv": [0, 8.5, 1.75, 9], "texture": "#0"},
"south": {"uv": [3.75, 8.5, 4, 9], "texture": "#0"},
"west": {"uv": [2, 8.5, 3.75, 9], "texture": "#0"},
"up": {"uv": [2, 8.5, 1.75, 5], "texture": "#0"},
"down": {"uv": [2.25, 5, 2, 8.5], "texture": "#0"}
}
},
{
"from": [15, 0, 1],
"to": [16, 1, 8],
"rotation": {"angle": 0, "axis": "y", "origin": [15, 0, 4.5]},
"faces": {
"north": {"uv": [9.25, 8.5, 9.5, 9], "texture": "#0"},
"east": {"uv": [7.5, 8.5, 9.25, 9], "texture": "#0"},
"south": {"uv": [11.25, 8.5, 11.5, 9], "texture": "#0"},
"west": {"uv": [9.5, 8.5, 11.25, 9], "texture": "#0"},
"up": {"uv": [9.5, 8.5, 9.25, 5], "texture": "#0"},
"down": {"uv": [9.75, 5, 9.5, 8.5], "texture": "#0"}
}
}
],
"groups": [
{
"name": "bone",
"origin": [0, 0, 0],
"color": 0,
"children": [0, 1, 2]
}
]
}
{"credit":"Made with Blockbench","texture_size":[64,32],"textures":{"0":"webdisplays:models/minepad"},"elements":[{"from":[1,0,0],"to":[15,1,9],"rotation":{"angle":0,"axis":"y","origin":[1,0,3.5]},"faces":{"north":{"uv":[2.25,4.5,5.75,5],"texture":"#0"},"east":{"uv":[0,4.5,2.25,5],"texture":"#0"},"south":{"uv":[8,4.5,11.5,5],"texture":"#0"},"west":{"uv":[5.75,4.5,8,5],"texture":"#0"},"up":{"uv":[5.75,4.5,2.25,0],"texture":"#0"},"down":{"uv":[9.25,0,5.75,4.5],"texture":"#0"}}},{"from":[0,0,1],"to":[1,1,8],"rotation":{"angle":0,"axis":"y","origin":[0,0,4.5]},"faces":{"north":{"uv":[1.75,8.5,2,9],"texture":"#0"},"east":{"uv":[0,8.5,1.75,9],"texture":"#0"},"south":{"uv":[3.75,8.5,4,9],"texture":"#0"},"west":{"uv":[2,8.5,3.75,9],"texture":"#0"},"up":{"uv":[2,8.5,1.75,5],"texture":"#0"},"down":{"uv":[2.25,5,2,8.5],"texture":"#0"}}},{"from":[15,0,1],"to":[16,1,8],"rotation":{"angle":0,"axis":"y","origin":[15,0,4.5]},"faces":{"north":{"uv":[9.25,8.5,9.5,9],"texture":"#0"},"east":{"uv":[7.5,8.5,9.25,9],"texture":"#0"},"south":{"uv":[11.25,8.5,11.5,9],"texture":"#0"},"west":{"uv":[9.5,8.5,11.25,9],"texture":"#0"},"up":{"uv":[9.5,8.5,9.25,5],"texture":"#0"},"down":{"uv":[9.75,5,9.5,8.5],"texture":"#0"}}}],"display":{"thirdperson_righthand":{"rotation":[95.5,-180,0],"translation":[0,6.75,9]},"thirdperson_lefthand":{"rotation":[95.5,-180,0],"translation":[0,6.75,9]},"ground":{"rotation":[-90,0,0],"translation":[0,11.5,-7.6]},"gui":{"rotation":[90,0,0],"translation":[0,-3.5,0]},"head":{"rotation":[-90,0,0],"translation":[0,14.25,-0.75]},"fixed":{"rotation":[-90,0,0],"translation":[0,0,-7.5]}},"groups":[{"name":"bone","origin":[0,0,0],"color":0,"children":[0,1,2]}]}