Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions common/src/main/java/com/evandev/fieldguide/ModTags.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ private static TagKey<Block> tag(String name) {

public static class Items {
public static final TagKey<Item> SPYGLASSES = tag("spyglasses");
public static final TagKey<Item> LENSES = tag("lenses");
public static final TagKey<Item> BLACKLISTED = tag("blacklisted");

private static TagKey<Item> tag(String name) {
Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@
public class ScanOverlayRenderer {
private static final float VERTICAL_BUFFER = 1.3f;

private static final VertexConsumer DUMMY_CONSUMER = new VertexConsumer() {
protected static final VertexConsumer DUMMY_CONSUMER = new VertexConsumer() {
@Override
public @NotNull VertexConsumer addVertex(float x, float y, float z) {
return this;
Expand Down Expand Up @@ -123,7 +123,7 @@ public static void render(PoseStack poseStack, float partialTick, Camera camera,
}
}

private static Entity resolveEntity(Entity entity) {
protected static Entity resolveEntity(Entity entity) {
if (entity == null) return null;
if (entity instanceof EnderDragonPart dragonPart) {
return dragonPart.parentMob;
Expand All @@ -139,7 +139,7 @@ private static Entity resolveEntity(Entity entity) {
return entity;
}

private static VertexConsumer createTintedConsumer(VertexConsumer delegate, MultiBufferSource provider, float r, float g, float b, float a) {
protected static VertexConsumer createTintedConsumer(VertexConsumer delegate, MultiBufferSource provider, float r, float g, float b, float a) {
if (Services.PLATFORM.isModLoaded("entity_texture_features")) {
return EtfCompat.createTintedConsumer(delegate, provider, r, g, b, a);
}
Expand Down Expand Up @@ -413,7 +413,7 @@ private static Set<BlockPos> gatherTreeBlocks(Minecraft mc, BlockPos startPos) {
return blocks;
}

private static void renderBlockModelAsShell(Minecraft mc, BlockState state, BlockPos pos, PoseStack poseStack, VertexConsumer consumer, Set<BlockPos> blocksToRender) {
protected static void renderBlockModelAsShell(Minecraft mc, BlockState state, BlockPos pos, PoseStack poseStack, VertexConsumer consumer, Set<BlockPos> blocksToRender) {
BakedModel model = mc.getBlockRenderer().getBlockModel(state);
RandomSource random = RandomSource.create();
long seed = state.getSeed(pos);
Expand Down Expand Up @@ -486,7 +486,7 @@ private static void renderEntityOverlay(PoseStack poseStack, float partialTick,
poseStack.popPose();
}

private static class ScanBufferSourceWrapper implements MultiBufferSource {
protected static class ScanBufferSourceWrapper implements MultiBufferSource {
private final MultiBufferSource.BufferSource delegate;
private final float r, g, b, a;
private final boolean isDepth;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import com.evandev.fieldguide.client.ClientFieldGuideManager;
import com.evandev.fieldguide.client.FieldGuideClient;
import com.evandev.fieldguide.client.progress.ProgressManager;
import com.evandev.fieldguide.item.ModItems;
import com.evandev.fieldguide.compat.cobblemon.FieldGuideCobblemonCompat;
import com.evandev.fieldguide.config.ClientConfig;
import com.evandev.fieldguide.config.ServerConfig;
Expand Down Expand Up @@ -68,8 +69,7 @@ public void onClientTick(Minecraft minecraft) {

FieldGuideScanState state = FieldGuideScanState.getInstance();

boolean hasSpyglass = isUsingSpyglass(minecraft.player);
boolean canScan = (hasSpyglass && ServerConfig.get().enableSpyglassScanning) || ServerConfig.get().enableNakedEyeScanning;
boolean canScan = getScanDistance(minecraft) > 0;
boolean isScanningActive = canScan && !ServerConfig.get().disableScanning;

if (FieldGuideClient.SCAN_KEY != null && !FieldGuideClient.SCAN_KEY.isUnbound()) {
Expand All @@ -95,6 +95,53 @@ private boolean isUsingSpyglass(Player player) {
return player.isScoping() || (player.isUsingItem() && player.getUseItem().is(ModTags.Items.SPYGLASSES));
}

private boolean holdsFieldGuide(Player player) {
if (ModItems.FIELD_GUIDE == null) return false;
return player.getMainHandItem().is(ModItems.FIELD_GUIDE.get()) || player.getOffhandItem().is(ModItems.FIELD_GUIDE.get());
}

private boolean holdsLens(Player player) {
return player.getMainHandItem().is(ModTags.Items.LENSES) || player.getOffhandItem().is(ModTags.Items.LENSES);
}

private boolean isRightClickHeld() {
return Minecraft.getInstance().options.keyUse.isDown();
}

public double getScanDistance(Minecraft minecraft) {
Player player = minecraft.player;
if (player == null) return 0;
if (isUsingSpyglass(player) && ServerConfig.get().enableSpyglassScanning) {
return ServerConfig.get().spyglassScanDistance;
}
if (holdsLens(player) && isRightClickHeld()) {
return ServerConfig.get().lensScanDistance;
}
if (ServerConfig.get().enableFieldGuideScanning && holdsFieldGuide(player) && isRightClickHeld()) {
return ServerConfig.get().fieldGuideScanDistance;
}
if (ServerConfig.get().enableNakedEyeScanning) {
return ServerConfig.get().nakedEyeScanDistance;
}
return 0;
}

public double getDiscoveryDistance(Minecraft minecraft) {
Player player = minecraft.player;
if (player == null) return 0;
double distance = 0;
if (isUsingSpyglass(player) && ServerConfig.get().enableSpyglassDiscovery) {
distance = Math.max(distance, ServerConfig.get().spyglassScanDistance);
}
if (holdsLens(player) && ServerConfig.get().enableLensDiscovery) {
distance = Math.max(distance, ServerConfig.get().lensDiscoveryDistance);
}
if (ServerConfig.get().enableNakedEyeDiscovery) {
distance = Math.max(distance, ServerConfig.get().nakedEyeDiscoveryDistance);
}
return distance;
}

public void handleTargetAcquisition(Minecraft minecraft, Object foundTarget, Object resolvedEntry, double hitDistSq, BlockHitResult blockHit) {
FieldGuideScanState state = FieldGuideScanState.getInstance();
if (foundTarget == null) {
Expand All @@ -110,9 +157,7 @@ public void handleTargetAcquisition(Minecraft minecraft, Object foundTarget, Obj
return;
}

double activeScanDist = (minecraft.player != null && isUsingSpyglass(minecraft.player) && ServerConfig.get().enableSpyglassScanning)
? ServerConfig.get().spyglassScanDistance
: (ServerConfig.get().enableNakedEyeScanning ? ServerConfig.get().nakedEyeScanDistance : 0);
double activeScanDist = getScanDistance(minecraft);

if (hitDistSq > (activeScanDist * activeScanDist)) {
state.setOutOfRangeTarget(foundTarget);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,12 @@ public static Screen createScreen(Screen parent) {
.setSaveConsumer(newValue -> serverConfig.enableFieldGuideItem = newValue)
.build());

general.addEntry(entryBuilder.startBooleanToggle(Component.translatable("option.fieldguide.enable_lens_item"), serverConfig.enableLensItem)
.setDefaultValue(false)
.setTooltip(Component.translatable("option.fieldguide.enable_lens_item.tooltip"))
.setSaveConsumer(newValue -> serverConfig.enableLensItem = newValue)
.build());

general.addEntry(entryBuilder.startBooleanToggle(Component.translatable("option.fieldguide.require_item_to_open"), serverConfig.requireItemToOpen)
.setDefaultValue(false)
.setTooltip(Component.translatable("option.fieldguide.require_item_to_open.tooltip"))
Expand Down Expand Up @@ -115,6 +121,12 @@ public static Screen createScreen(Screen parent) {
.setSaveConsumer(newValue -> serverConfig.spyglassScanDistance = newValue)
.build());

general.addEntry(entryBuilder.startBooleanToggle(Component.translatable("option.fieldguide.enable_spyglass_discovery"), serverConfig.enableSpyglassDiscovery)
.setDefaultValue(true)
.setTooltip(Component.translatable("option.fieldguide.enable_spyglass_discovery.tooltip"))
.setSaveConsumer(newValue -> serverConfig.enableSpyglassDiscovery = newValue)
.build());

general.addEntry(entryBuilder.startDoubleField(Component.translatable("option.fieldguide.naked_eye_scan_distance"), serverConfig.nakedEyeScanDistance)
.setDefaultValue(10.0D)
.setMin(1.0D)
Expand All @@ -123,6 +135,56 @@ public static Screen createScreen(Screen parent) {
.setSaveConsumer(newValue -> serverConfig.nakedEyeScanDistance = newValue)
.build());

general.addEntry(entryBuilder.startBooleanToggle(Component.translatable("option.fieldguide.enable_naked_eye_discovery"), serverConfig.enableNakedEyeDiscovery)
.setDefaultValue(false)
.setTooltip(Component.translatable("option.fieldguide.enable_naked_eye_discovery.tooltip"))
.setSaveConsumer(newValue -> serverConfig.enableNakedEyeDiscovery = newValue)
.build());

general.addEntry(entryBuilder.startDoubleField(Component.translatable("option.fieldguide.naked_eye_discovery_distance"), serverConfig.nakedEyeDiscoveryDistance)
.setDefaultValue(8.0D)
.setMin(1.0D)
.setMax(256.0D)
.setTooltip(Component.translatable("option.fieldguide.naked_eye_discovery_distance.tooltip"))
.setSaveConsumer(newValue -> serverConfig.nakedEyeDiscoveryDistance = newValue)
.build());

general.addEntry(entryBuilder.startBooleanToggle(Component.translatable("option.fieldguide.enable_field_guide_scanning"), serverConfig.enableFieldGuideScanning)
.setDefaultValue(false)
.setTooltip(Component.translatable("option.fieldguide.enable_field_guide_scanning.tooltip"))
.setSaveConsumer(newValue -> serverConfig.enableFieldGuideScanning = newValue)
.build());

general.addEntry(entryBuilder.startDoubleField(Component.translatable("option.fieldguide.field_guide_scan_distance"), serverConfig.fieldGuideScanDistance)
.setDefaultValue(4.0D)
.setMin(1.0D)
.setMax(256.0D)
.setTooltip(Component.translatable("option.fieldguide.field_guide_scan_distance.tooltip"))
.setSaveConsumer(newValue -> serverConfig.fieldGuideScanDistance = newValue)
.build());

general.addEntry(entryBuilder.startDoubleField(Component.translatable("option.fieldguide.lens_scan_distance"), serverConfig.lensScanDistance)
.setDefaultValue(6.0D)
.setMin(1.0D)
.setMax(256.0D)
.setTooltip(Component.translatable("option.fieldguide.lens_scan_distance.tooltip"))
.setSaveConsumer(newValue -> serverConfig.lensScanDistance = newValue)
.build());

general.addEntry(entryBuilder.startBooleanToggle(Component.translatable("option.fieldguide.enable_lens_discovery"), serverConfig.enableLensDiscovery)
.setDefaultValue(true)
.setTooltip(Component.translatable("option.fieldguide.enable_lens_discovery.tooltip"))
.setSaveConsumer(newValue -> serverConfig.enableLensDiscovery = newValue)
.build());

general.addEntry(entryBuilder.startDoubleField(Component.translatable("option.fieldguide.lens_discovery_distance"), serverConfig.lensDiscoveryDistance)
.setDefaultValue(24.0D)
.setMin(1.0D)
.setMax(256.0D)
.setTooltip(Component.translatable("option.fieldguide.lens_discovery_distance.tooltip"))
.setSaveConsumer(newValue -> serverConfig.lensDiscoveryDistance = newValue)
.build());

general.addEntry(entryBuilder.startBooleanToggle(Component.translatable("option.fieldguide.grant_xp_on_scan"), serverConfig.grantXpOnScan)
.setDefaultValue(true)
.setTooltip(Component.translatable("option.fieldguide.grant_xp_on_scan.tooltip"))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,12 +71,21 @@ private static void migrate() {
if (json.has("keepSilhouetteWhenUnlocked")) server.keepSilhouetteWhenUnlocked = json.get("keepSilhouetteWhenUnlocked").getAsBoolean();
if (json.has("unlockAllVariants")) server.unlockAllVariants = json.get("unlockAllVariants").getAsBoolean();
if (json.has("enableFieldGuideItem")) server.enableFieldGuideItem = json.get("enableFieldGuideItem").getAsBoolean();
if (json.has("enableLensItem")) server.enableLensItem = json.get("enableLensItem").getAsBoolean();
if (json.has("enableCopyingPages")) server.enableCopyingPages = json.get("enableCopyingPages").getAsBoolean();
if (json.has("hideTabsUntilUnlocked")) server.hideTabsUntilUnlocked = json.get("hideTabsUntilUnlocked").getAsBoolean();
if (json.has("enableSpyglassScanning")) server.enableSpyglassScanning = json.get("enableSpyglassScanning").getAsBoolean();
if (json.has("spyglassScanDistance")) server.spyglassScanDistance = json.get("spyglassScanDistance").getAsDouble();
if (json.has("enableSpyglassDiscovery")) server.enableSpyglassDiscovery = json.get("enableSpyglassDiscovery").getAsBoolean();
if (json.has("enableNakedEyeScanning")) server.enableNakedEyeScanning = json.get("enableNakedEyeScanning").getAsBoolean();
if (json.has("nakedEyeScanDistance")) server.nakedEyeScanDistance = json.get("nakedEyeScanDistance").getAsDouble();
if (json.has("enableNakedEyeDiscovery")) server.enableNakedEyeDiscovery = json.get("enableNakedEyeDiscovery").getAsBoolean();
if (json.has("nakedEyeDiscoveryDistance")) server.nakedEyeDiscoveryDistance = json.get("nakedEyeDiscoveryDistance").getAsDouble();
if (json.has("enableFieldGuideScanning")) server.enableFieldGuideScanning = json.get("enableFieldGuideScanning").getAsBoolean();
if (json.has("fieldGuideScanDistance")) server.fieldGuideScanDistance = json.get("fieldGuideScanDistance").getAsDouble();
if (json.has("lensScanDistance")) server.lensScanDistance = json.get("lensScanDistance").getAsDouble();
if (json.has("enableLensDiscovery")) server.enableLensDiscovery = json.get("enableLensDiscovery").getAsBoolean();
if (json.has("lensDiscoveryDistance")) server.lensDiscoveryDistance = json.get("lensDiscoveryDistance").getAsDouble();
if (json.has("showUndiscoveredNames")) server.showUndiscoveredNames = json.get("showUndiscoveredNames").getAsBoolean();
if (json.has("hideUndiscoveredFromSearch")) server.hideUndiscoveredFromSearch = json.get("hideUndiscoveredFromSearch").getAsBoolean();
if (json.has("scanSpeed")) server.scanSpeed = json.get("scanSpeed").getAsDouble();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,17 +30,29 @@ public class ServerConfig {
public boolean keepSilhouetteWhenUnlocked = false;
public boolean unlockAllVariants = false;
public boolean enableFieldGuideItem = false;
public boolean enableLensItem = false;
public boolean requireItemToOpen = false;
public boolean enableCopyingPages = true;

public boolean hideTabsUntilUnlocked = false;

public boolean enableSpyglassScanning = true;
public double spyglassScanDistance = 64.0D;
public boolean enableSpyglassDiscovery = true;

public boolean enableNakedEyeScanning = false;
public double nakedEyeScanDistance = 10.0D;

public boolean enableNakedEyeDiscovery = false;
public double nakedEyeDiscoveryDistance = 8.0D;

public boolean enableFieldGuideScanning = false;
public double fieldGuideScanDistance = 4.0D;

public double lensScanDistance = 6.0D;
public boolean enableLensDiscovery = true;
public double lensDiscoveryDistance = 24.0D;

public boolean showUndiscoveredNames = false;
public boolean hideUndiscoveredFromSearch = false;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,18 @@
public class ModItems {

public static Supplier<FieldGuideItem> FIELD_GUIDE;
public static Supplier<Item> LENS;
public static Supplier<PageItem> PAGE;

public static void init() {
FIELD_GUIDE = Services.REGISTRY.registerItem("field_guide", () -> new FieldGuideItem(new Item.Properties().stacksTo(1)));
if (ServerConfig.get().enableFieldGuideItem) {
Services.REGISTRY.registerToTab(ResourceKey.create(Registries.CREATIVE_MODE_TAB, ResourceLocation.withDefaultNamespace("tools_and_utilities")), FIELD_GUIDE);
}
LENS = Services.REGISTRY.registerItem("lens", () -> new Item(new Item.Properties().stacksTo(1)));
if (ServerConfig.get().enableLensItem) {
Services.REGISTRY.registerToTab(ResourceKey.create(Registries.CREATIVE_MODE_TAB, ResourceLocation.withDefaultNamespace("tools_and_utilities")), LENS);
}
PAGE = Services.REGISTRY.registerItem("page", () -> new PageItem(new Item.Properties().stacksTo(64)));
Services.REGISTRY.registerToTab(ResourceKey.create(Registries.CREATIVE_MODE_TAB, ResourceLocation.withDefaultNamespace("tools_and_utilities")), PAGE);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.evandev.fieldguide.mixin.client;

import com.evandev.fieldguide.client.render.DiscoveryOverlayRenderer;
import com.evandev.fieldguide.client.render.ScanOverlayRenderer;
import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.client.Camera;
Expand All @@ -8,6 +9,8 @@
import net.minecraft.client.renderer.GameRenderer;
import net.minecraft.client.renderer.LevelRenderer;
import net.minecraft.client.renderer.LightTexture;
import net.minecraft.client.renderer.culling.Frustum;
import net.minecraft.world.phys.Vec3;
import org.joml.Matrix4f;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
Expand Down Expand Up @@ -42,5 +45,17 @@ private void renderScanOverlays(
camera,
Minecraft.getInstance().renderBuffers().bufferSource()
);

Frustum frustum = new Frustum(frustumMatrix, projectionMatrix);
Vec3 camPos = camera.getPosition();
frustum.prepare(camPos.x, camPos.y, camPos.z);

DiscoveryOverlayRenderer.render(
poseStack,
partialTick,
camera,
frustum,
Minecraft.getInstance().renderBuffers().bufferSource()
);
}
}
Loading
Loading