fix load distance
This commit is contained in:
parent
9452482254
commit
2e30446281
|
|
@ -14,18 +14,21 @@ import net.minecraft.world.entity.player.Player;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
import net.minecraft.world.level.BlockGetter;
|
import net.minecraft.world.level.BlockGetter;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
|
import net.minecraft.world.phys.Vec3;
|
||||||
import net.minecraftforge.network.NetworkEvent;
|
import net.minecraftforge.network.NetworkEvent;
|
||||||
import net.minecraftforge.server.ServerLifecycleHooks;
|
import net.minecraftforge.server.ServerLifecycleHooks;
|
||||||
import net.montoyo.wd.core.HasAdvancement;
|
import net.montoyo.wd.core.HasAdvancement;
|
||||||
import net.montoyo.wd.core.JSServerRequest;
|
import net.montoyo.wd.core.JSServerRequest;
|
||||||
import net.montoyo.wd.data.GuiData;
|
import net.montoyo.wd.data.GuiData;
|
||||||
import net.montoyo.wd.entity.ScreenBlockEntity;
|
import net.montoyo.wd.entity.ScreenBlockEntity;
|
||||||
|
import net.montoyo.wd.entity.ScreenData;
|
||||||
import net.montoyo.wd.utilities.*;
|
import net.montoyo.wd.utilities.*;
|
||||||
import net.montoyo.wd.utilities.math.Vector2i;
|
import net.montoyo.wd.utilities.math.Vector2i;
|
||||||
import net.montoyo.wd.utilities.math.Vector3i;
|
import net.montoyo.wd.utilities.math.Vector3i;
|
||||||
import net.montoyo.wd.utilities.data.BlockSide;
|
import net.montoyo.wd.utilities.data.BlockSide;
|
||||||
import net.montoyo.wd.utilities.data.Rotation;
|
import net.montoyo.wd.utilities.data.Rotation;
|
||||||
import net.montoyo.wd.utilities.serialization.NameUUIDPair;
|
import net.montoyo.wd.utilities.serialization.NameUUIDPair;
|
||||||
|
import org.joml.Vector3d;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
@ -125,4 +128,21 @@ public class SharedProxy {
|
||||||
public boolean isShiftDown() {
|
public boolean isShiftDown() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public double distanceTo(ScreenBlockEntity tes, Vec3 position) {
|
||||||
|
double dist = Double.POSITIVE_INFINITY;
|
||||||
|
for (int i = 0; i < tes.screenCount(); i++) {
|
||||||
|
ScreenData scrn = tes.getScreen(i);
|
||||||
|
|
||||||
|
Vector3d pos = new Vector3d(
|
||||||
|
scrn.side.right.x * scrn.size.x / 2d + scrn.size.y * scrn.side.up.x / 2d,
|
||||||
|
scrn.side.right.y * scrn.size.x / 2d + scrn.size.y * scrn.side.up.y / 2d,
|
||||||
|
scrn.side.right.z * scrn.size.x / 2d + scrn.size.y * scrn.side.up.z / 2d
|
||||||
|
).add(tes.getBlockPos().getX(), tes.getBlockPos().getY(), tes.getBlockPos().getZ());
|
||||||
|
|
||||||
|
double dist2 = position.distanceToSqr(pos.x, pos.y, pos.z);
|
||||||
|
dist = Math.min(dist, dist2);
|
||||||
|
}
|
||||||
|
return dist;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -61,6 +61,7 @@ import net.montoyo.wd.WebDisplays;
|
||||||
import net.montoyo.wd.block.ScreenBlock;
|
import net.montoyo.wd.block.ScreenBlock;
|
||||||
import net.montoyo.wd.client.gui.*;
|
import net.montoyo.wd.client.gui.*;
|
||||||
import net.montoyo.wd.client.gui.loading.GuiLoader;
|
import net.montoyo.wd.client.gui.loading.GuiLoader;
|
||||||
|
import net.montoyo.wd.utilities.browser.WDBrowser;
|
||||||
import net.montoyo.wd.utilities.browser.handlers.DisplayHandler;
|
import net.montoyo.wd.utilities.browser.handlers.DisplayHandler;
|
||||||
import net.montoyo.wd.utilities.browser.handlers.WDRouter;
|
import net.montoyo.wd.utilities.browser.handlers.WDRouter;
|
||||||
import net.montoyo.wd.client.renderers.*;
|
import net.montoyo.wd.client.renderers.*;
|
||||||
|
|
@ -207,7 +208,7 @@ public class ClientProxy extends SharedProxy implements ResourceManagerReloadLis
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
view = MCEF.createBrowser(WebDisplays.applyBlacklist(webUrl), false);
|
view = WDBrowser.createBrowser(WebDisplays.applyBlacklist(webUrl), false);
|
||||||
if (view instanceof MCEFBrowser browser) {
|
if (view instanceof MCEFBrowser browser) {
|
||||||
browser.resize((int) WebDisplays.INSTANCE.padResX, (int) WebDisplays.INSTANCE.padResY);
|
browser.resize((int) WebDisplays.INSTANCE.padResX, (int) WebDisplays.INSTANCE.padResY);
|
||||||
browser.setCursorChangeListener((cursor) -> {
|
browser.setCursorChangeListener((cursor) -> {
|
||||||
|
|
@ -229,7 +230,6 @@ public class ClientProxy extends SharedProxy implements ResourceManagerReloadLis
|
||||||
|
|
||||||
private Minecraft mc;
|
private Minecraft mc;
|
||||||
private MinePadRenderer minePadRenderer;
|
private MinePadRenderer minePadRenderer;
|
||||||
// private JSQueryDispatcher jsDispatcher;
|
|
||||||
private LaserPointerRenderer laserPointerRenderer;
|
private LaserPointerRenderer laserPointerRenderer;
|
||||||
private Screen nextScreen;
|
private Screen nextScreen;
|
||||||
private boolean isF1Down;
|
private boolean isF1Down;
|
||||||
|
|
@ -263,10 +263,6 @@ public class ClientProxy extends SharedProxy implements ResourceManagerReloadLis
|
||||||
event.register(ScreenModelLoader.SCREEN_LOADER.getPath(), new ScreenModelLoader());
|
event.register(ScreenModelLoader.SCREEN_LOADER.getPath(), new ScreenModelLoader());
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void registerBlockRenderLayers(RenderType layer, Block... blocks) {
|
|
||||||
Stream.of(blocks).forEach(block -> ItemBlockRenderTypes.setRenderLayer(block, layer));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void preInit() {
|
public void preInit() {
|
||||||
super.preInit();
|
super.preInit();
|
||||||
|
|
@ -274,11 +270,6 @@ public class ClientProxy extends SharedProxy implements ResourceManagerReloadLis
|
||||||
MinecraftForge.EVENT_BUS.register(this);
|
MinecraftForge.EVENT_BUS.register(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void init() {
|
|
||||||
super.init();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCefInit() {
|
public void onCefInit() {
|
||||||
minePadRenderer = new MinePadRenderer();
|
minePadRenderer = new MinePadRenderer();
|
||||||
|
|
@ -580,7 +571,7 @@ public class ClientProxy extends SharedProxy implements ResourceManagerReloadLis
|
||||||
if (ev.phase != TickEvent.Phase.END) return;
|
if (ev.phase != TickEvent.Phase.END) return;
|
||||||
|
|
||||||
//Unload/load screens depending on client player distance
|
//Unload/load screens depending on client player distance
|
||||||
if (mc.player != null || !screenTracking.isEmpty())
|
if (mc.player == null || screenTracking.isEmpty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
int id = lastTracked % screenTracking.size();
|
int id = lastTracked % screenTracking.size();
|
||||||
|
|
@ -597,27 +588,15 @@ public class ClientProxy extends SharedProxy implements ResourceManagerReloadLis
|
||||||
if (!tes.isLoaded())
|
if (!tes.isLoaded())
|
||||||
tes.load();
|
tes.load();
|
||||||
} else {
|
} else {
|
||||||
double dist = Double.POSITIVE_INFINITY;
|
double dist = distanceTo(tes, mc.getEntityRenderDispatcher().camera.getPosition());
|
||||||
for (int i = 0; i < tes.screenCount(); i++) {
|
|
||||||
ScreenData scrn = tes.getScreen(i);
|
|
||||||
|
|
||||||
Vector3d pos = new Vector3d(
|
|
||||||
scrn.side.right.x * scrn.size.x + scrn.size.y * scrn.side.up.x,
|
|
||||||
scrn.side.right.y * scrn.size.x + scrn.size.y * scrn.side.up.y,
|
|
||||||
scrn.side.right.z * scrn.size.x + scrn.size.y * scrn.side.up.z
|
|
||||||
);
|
|
||||||
|
|
||||||
double dist2 = mc.player.distanceToSqr(pos.x, pos.y, pos.z);
|
|
||||||
dist = Math.min(dist, dist2);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tes.isLoaded()) {
|
if (tes.isLoaded()) {
|
||||||
if (dist > WebDisplays.INSTANCE.unloadDistance2)
|
if (dist > WebDisplays.INSTANCE.unloadDistance2 * 16)
|
||||||
tes.unload();
|
tes.deactivate();
|
||||||
// else if (ClientConfig.AutoVolumeControl.enableAutoVolume)
|
// else if (ClientConfig.AutoVolumeControl.enableAutoVolume)
|
||||||
// tes.updateTrackDistance(dist, 80); //ToDo find master volume
|
// tes.updateTrackDistance(dist, 80); //ToDo find master volume
|
||||||
} else if (dist <= WebDisplays.INSTANCE.loadDistance2)
|
} else if (dist <= WebDisplays.INSTANCE.loadDistance2 * 16)
|
||||||
tes.load();
|
tes.activate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
package net.montoyo.wd.client.gui.camera;
|
package net.montoyo.wd.client.gui.camera;
|
||||||
|
|
||||||
import com.google.gson.JsonObject;
|
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.commands.arguments.EntityAnchorArgument;
|
import net.minecraft.commands.arguments.EntityAnchorArgument;
|
||||||
import net.minecraft.util.Mth;
|
import net.minecraft.util.Mth;
|
||||||
|
|
@ -10,7 +9,6 @@ import net.minecraft.world.phys.Vec3;
|
||||||
import net.minecraftforge.client.event.ViewportEvent;
|
import net.minecraftforge.client.event.ViewportEvent;
|
||||||
import net.minecraftforge.event.TickEvent;
|
import net.minecraftforge.event.TickEvent;
|
||||||
import net.montoyo.wd.utilities.browser.handlers.js.queries.ElementCenterQuery;
|
import net.montoyo.wd.utilities.browser.handlers.js.queries.ElementCenterQuery;
|
||||||
import net.montoyo.wd.utilities.browser.handlers.WDRouter;
|
|
||||||
import net.montoyo.wd.entity.ScreenBlockEntity;
|
import net.montoyo.wd.entity.ScreenBlockEntity;
|
||||||
import net.montoyo.wd.entity.ScreenData;
|
import net.montoyo.wd.entity.ScreenData;
|
||||||
import net.montoyo.wd.utilities.browser.WDBrowser;
|
import net.montoyo.wd.utilities.browser.WDBrowser;
|
||||||
|
|
@ -117,8 +115,8 @@ public class KeyboardCamera {
|
||||||
ScreenData scr = teTmp.getScreen(sdTmp);
|
ScreenData scr = teTmp.getScreen(sdTmp);
|
||||||
if (scr != null) {
|
if (scr != null) {
|
||||||
if (scr.browser instanceof WDBrowser wdBrowser) {
|
if (scr.browser instanceof WDBrowser wdBrowser) {
|
||||||
wdBrowser.pointerLock().dispatch(scr.browser);
|
wdBrowser.focusedElement().dispatch(scr.browser);
|
||||||
updateCrd(((WDBrowser) scr.browser).pointerLock());
|
updateCrd(((WDBrowser) scr.browser).focusedElement());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,10 +7,12 @@ package net.montoyo.wd.client.renderers;
|
||||||
import com.cinemamod.mcef.MCEFBrowser;
|
import com.cinemamod.mcef.MCEFBrowser;
|
||||||
import com.mojang.blaze3d.systems.RenderSystem;
|
import com.mojang.blaze3d.systems.RenderSystem;
|
||||||
import com.mojang.blaze3d.vertex.*;
|
import com.mojang.blaze3d.vertex.*;
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.renderer.GameRenderer;
|
import net.minecraft.client.renderer.GameRenderer;
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
import net.minecraft.client.renderer.MultiBufferSource;
|
||||||
import net.minecraft.client.renderer.blockentity.BlockEntityRenderer;
|
import net.minecraft.client.renderer.blockentity.BlockEntityRenderer;
|
||||||
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
|
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
|
||||||
|
import net.montoyo.wd.WebDisplays;
|
||||||
import net.montoyo.wd.entity.ScreenData;
|
import net.montoyo.wd.entity.ScreenData;
|
||||||
import net.montoyo.wd.entity.ScreenBlockEntity;
|
import net.montoyo.wd.entity.ScreenBlockEntity;
|
||||||
import net.montoyo.wd.utilities.math.Vector3f;
|
import net.montoyo.wd.utilities.math.Vector3f;
|
||||||
|
|
@ -41,13 +43,16 @@ public class ScreenRenderer implements BlockEntityRenderer<ScreenBlockEntity> {
|
||||||
|
|
||||||
//Disable lighting
|
//Disable lighting
|
||||||
// RenderSystem.enableTexture();
|
// RenderSystem.enableTexture();
|
||||||
// RenderSystem.disableCull();
|
// RenderSystem.disableCull();
|
||||||
RenderSystem.disableBlend();
|
RenderSystem.disableBlend();
|
||||||
|
|
||||||
for (int i = 0; i < te.screenCount(); i++) {
|
for (int i = 0; i < te.screenCount(); i++) {
|
||||||
ScreenData scr = te.getScreen(i);
|
ScreenData scr = te.getScreen(i);
|
||||||
if (scr.browser == null) {
|
if (scr.browser == null) {
|
||||||
scr.createBrowser(true);
|
double dist = WebDisplays.PROXY.distanceTo(te, Minecraft.getInstance().getEntityRenderDispatcher().camera.getPosition());
|
||||||
|
if (dist <= WebDisplays.INSTANCE.loadDistance2 * 16)
|
||||||
|
scr.createBrowser(true);
|
||||||
|
else continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: manually backface cull the screens
|
// TODO: manually backface cull the screens
|
||||||
|
|
|
||||||
|
|
@ -1073,6 +1073,21 @@ public class ScreenBlockEntity extends BlockEntity {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void deactivate() {
|
||||||
|
for (ScreenData screen : screens) {
|
||||||
|
if (screen.browser != null) {
|
||||||
|
screen.browser.close(true);
|
||||||
|
screen.browser = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void activate() {
|
||||||
|
for (ScreenData screen : screens) {
|
||||||
|
if (screen.browser == null)
|
||||||
|
screen.createBrowser(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// @Override
|
// @Override
|
||||||
// public boolean shouldRefresh(Level world, BlockPos pos, @Nonnull BlockState oldState, @Nonnull BlockState newState) {
|
// public boolean shouldRefresh(Level world, BlockPos pos, @Nonnull BlockState oldState, @Nonnull BlockState newState) {
|
||||||
|
|
|
||||||
|
|
@ -20,10 +20,10 @@ public interface WDBrowser {
|
||||||
static void registerQueries(WDBrowser browser) {
|
static void registerQueries(WDBrowser browser) {
|
||||||
Map<String, JSQueryHandler> handlerMap = browser.queryHandlers();
|
Map<String, JSQueryHandler> handlerMap = browser.queryHandlers();
|
||||||
|
|
||||||
JSQueryHandler handler = browser.pointerLock();
|
JSQueryHandler handler = browser.focusedElement();
|
||||||
handlerMap.put(handler.getName(), handler);
|
handlerMap.put(handler.getName(), handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
HashMap<String, JSQueryHandler> queryHandlers();
|
HashMap<String, JSQueryHandler> queryHandlers();
|
||||||
ElementCenterQuery pointerLock();
|
ElementCenterQuery focusedElement();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ import net.montoyo.wd.utilities.browser.handlers.js.JSQueryHandler;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
|
||||||
public class WDClientBrowser extends MCEFBrowser implements WDBrowser {
|
public class WDClientBrowser extends MCEFBrowser implements WDBrowser {
|
||||||
ElementCenterQuery lock = new ElementCenterQuery("ActiveElement","document.activeElement");
|
ElementCenterQuery focusedEl = new ElementCenterQuery("ActiveElement", "document.activeElement");
|
||||||
HashMap<String, JSQueryHandler> handlerHashMap = new HashMap<>();
|
HashMap<String, JSQueryHandler> handlerHashMap = new HashMap<>();
|
||||||
|
|
||||||
public WDClientBrowser(MCEFClient client, String url, boolean transparent) {
|
public WDClientBrowser(MCEFClient client, String url, boolean transparent) {
|
||||||
|
|
@ -21,7 +21,7 @@ public class WDClientBrowser extends MCEFBrowser implements WDBrowser {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ElementCenterQuery pointerLock() {
|
public ElementCenterQuery focusedElement() {
|
||||||
return lock;
|
return focusedEl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user