Skip to content
Open
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
4 changes: 2 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ minecraft {

repositories {
maven { url "http://dvs1.progwml6.com/files/maven" }
maven { url = "http://maven.ic2.player.to/" }
maven { url = "https://modmaven.dev/" }
maven { url = "http://maven.covers1624.net" }
}

Expand Down Expand Up @@ -144,4 +144,4 @@ idea {
module {
outputDir = file('build/classes/main')
}
}
}
37 changes: 23 additions & 14 deletions src/main/java/li/cil/scannable/client/ScanManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import li.cil.scannable.common.capabilities.CapabilityScanResultProvider;
import li.cil.scannable.common.config.Constants;
import li.cil.scannable.common.config.Settings;
import li.cil.scannable.common.config.ClientSettings;
import li.cil.scannable.common.init.Items;
import li.cil.scannable.integration.optifine.ProxyOptiFine;
import net.minecraft.client.Minecraft;
Expand Down Expand Up @@ -36,21 +37,23 @@ public enum ScanManager {
// --------------------------------------------------------------------- //

private static int computeTargetRadius() {
return Minecraft.getMinecraft().gameSettings.renderDistanceChunks * Constants.CHUNK_SIZE - Constants.SCAN_INITIAL_RADIUS;
return Minecraft.getMinecraft().gameSettings.renderDistanceChunks * Constants.CHUNK_SIZE
- Constants.SCAN_INITIAL_RADIUS;
}

public static int computeScanGrowthDuration() {
return Constants.SCAN_GROWTH_DURATION * Minecraft.getMinecraft().gameSettings.renderDistanceChunks / Constants.REFERENCE_RENDER_DISTANCE;
return Constants.SCAN_GROWTH_DURATION * Minecraft.getMinecraft().gameSettings.renderDistanceChunks
/ Constants.REFERENCE_RENDER_DISTANCE;
}

public static float computeRadius(final long start, final float duration) {
// Scan wave speeds up exponentially. To avoid the initial speed being
// near zero due to that we offset the time and adjust the remaining
// parameters accordingly. Base equation is:
// r = a + (t + b)^2 * c
// r = a + (t + b)^2 * c
// with r := 0 and target radius and t := 0 and target time this yields:
// c = r1/((t1 + b)^2 - b*b)
// a = -r1*b*b/((t1 + b)^2 - b*b)
// c = r1/((t1 + b)^2 - b*b)
// a = -r1*b*b/((t1 + b)^2 - b*b)

final float r1 = (float) computeTargetRadius();
final float t1 = duration;
Expand Down Expand Up @@ -91,13 +94,14 @@ public void beginScan(final EntityPlayer player, final List<ItemStack> modules)
float scanRadius = Settings.getBaseScanRadius();

for (final ItemStack module : modules) {
final ScanResultProvider provider = module.getCapability(CapabilityScanResultProvider.SCAN_RESULT_PROVIDER_CAPABILITY, null);
final ScanResultProvider provider = module
.getCapability(CapabilityScanResultProvider.SCAN_RESULT_PROVIDER_CAPABILITY, null);
if (provider != null) {
collectingProviders.add(provider);
}

if (Items.isModuleRange(module)) {
scanRadius += MathHelper.ceil(Settings.getBaseScanRadius() / 2f);
scanRadius += MathHelper.ceil(Settings.getBaseScanRadius() / 2f) * module.getCount();
}
}

Expand All @@ -120,7 +124,8 @@ public void updateScan(final Entity entity, final boolean finish) {
}

for (final ScanResultProvider provider : collectingProviders) {
provider.computeScanResults(result -> collectingResults.computeIfAbsent(provider, p -> new ArrayList<>()).add(result));
provider.computeScanResults(
result -> collectingResults.computeIfAbsent(provider, p -> new ArrayList<>()).add(result));
}

++scanningTicks;
Expand All @@ -130,7 +135,8 @@ public void updateScan(final Entity entity, final boolean finish) {

for (int i = 0; i < remaining; i++) {
for (final ScanResultProvider provider : collectingProviders) {
provider.computeScanResults(result -> collectingResults.computeIfAbsent(provider, p -> new ArrayList<>()).add(result));
provider.computeScanResults(
result -> collectingResults.computeIfAbsent(provider, p -> new ArrayList<>()).add(result));
}
}

Expand All @@ -144,7 +150,8 @@ public void updateScan(final Entity entity, final boolean finish) {
currentStart = System.currentTimeMillis();

pendingResults.putAll(collectingResults);
pendingResults.values().forEach(list -> list.sort(Comparator.comparing(result -> -lastScanCenter.distanceTo(result.getPosition()))));
pendingResults.values().forEach(
list -> list.sort(Comparator.comparing(result -> -lastScanCenter.distanceTo(result.getPosition()))));

ScannerRenderer.INSTANCE.ping(lastScanCenter);

Expand All @@ -166,12 +173,13 @@ public void onClientTick(final TickEvent.ClientTickEvent event) {
if (lastScanCenter == null || currentStart < 0) {
return;
}

if (Constants.SCAN_STAY_DURATION < (int) (System.currentTimeMillis() - currentStart)) {
final int duration = ClientSettings.scanStayDuration;
if (duration < (int) (System.currentTimeMillis() - currentStart) && duration != -1) {
pendingResults.clear();
synchronized (renderingResults) {
if (!renderingResults.isEmpty()) {
for (Iterator<Map.Entry<ScanResultProvider, List<ScanResult>>> iterator = renderingResults.entrySet().iterator(); iterator.hasNext(); ) {
for (Iterator<Map.Entry<ScanResultProvider, List<ScanResult>>> iterator = renderingResults
.entrySet().iterator(); iterator.hasNext();) {
final Map.Entry<ScanResultProvider, List<ScanResult>> entry = iterator.next();
final List<ScanResult> list = entry.getValue();
for (int i = MathHelper.ceil(list.size() / 2f); i > 0; i--) {
Expand Down Expand Up @@ -257,7 +265,8 @@ public void onPreRenderGameOverlay(final RenderGameOverlayEvent.Pre event) {
return;
}

// Using shaders so we render as game overlay; restore matrices as used for world rendering.
// Using shaders so we render as game overlay; restore matrices as used for
// world rendering.
GlStateManager.matrixMode(GL11.GL_PROJECTION);
GlStateManager.pushMatrix();
GlStateManager.matrixMode(GL11.GL_MODELVIEW);
Expand Down
13 changes: 9 additions & 4 deletions src/main/java/li/cil/scannable/client/gui/GuiScanner.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@
import net.minecraft.util.ResourceLocation;

public class GuiScanner extends GuiContainer {
private static final ResourceLocation BACKGROUND = new ResourceLocation(API.MOD_ID, "textures/gui/container/scanner.png");
private static final ResourceLocation BACKGROUND = new ResourceLocation(API.MOD_ID,
"textures/gui/container/scanner.png");

// --------------------------------------------------------------------- //

Expand All @@ -34,13 +35,17 @@ public GuiScanner(final ContainerScanner container) {
public void drawScreen(final int mouseX, final int mouseY, final float partialTicks) {
super.drawScreen(mouseX, mouseY, partialTicks);

if (isPointInRegion(8, 23, fontRenderer.getStringWidth(I18n.format(Constants.GUI_SCANNER_MODULES)), fontRenderer.FONT_HEIGHT, mouseX, mouseY)) {
if (isPointInRegion(8, 23, fontRenderer.getStringWidth(I18n.format(Constants.GUI_SCANNER_MODULES)),
fontRenderer.FONT_HEIGHT, mouseX, mouseY)) {
drawHoveringText(I18n.format(Constants.GUI_SCANNER_MODULES_TOOLTIP), mouseX, mouseY);
}
if (isPointInRegion(8, 49, fontRenderer.getStringWidth(I18n.format(Constants.GUI_SCANNER_MODULES_INACTIVE)), fontRenderer.FONT_HEIGHT, mouseX, mouseY)) {
if (isPointInRegion(8, 49, fontRenderer.getStringWidth(I18n.format(Constants.GUI_SCANNER_MODULES_INACTIVE)),
fontRenderer.FONT_HEIGHT, mouseX, mouseY)) {
drawHoveringText(I18n.format(Constants.GUI_SCANNER_MODULES_INACTIVE_TOOLTIP), mouseX, mouseY);
}

if (isPointInRegion(44 + 6 * 18, 20, 18, 18, mouseX, mouseY)) {
drawHoveringText(I18n.format(Constants.GUI_SCANNER_MODULES_RANGE_TOOLTIP), mouseX, mouseY);
}
this.renderHoveredToolTip(mouseX, mouseY);
}

Expand Down
31 changes: 31 additions & 0 deletions src/main/java/li/cil/scannable/common/config/ClientSettings.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package li.cil.scannable.common.config;

import li.cil.scannable.api.API;
import li.cil.scannable.client.scanning.ScanResultProviderBlock;
import net.minecraft.block.Block;
import net.minecraft.init.Blocks;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.common.config.Config;
import net.minecraftforge.fml.common.registry.ForgeRegistries;

import javax.annotation.Nullable;
import java.util.HashSet;
import java.util.Set;

@Config(modid = API.MOD_ID, category = "client", name = "scannable-Client")
public final class ClientSettings {
@Config.LangKey(Constants.CONFIG_SCAN_STAY_DURATION)
@Config.Comment("How long the results from a scan should remain visible (in milliseconds).")
@Config.RangeInt(min = -1)
public static int scanStayDuration = 10000;

/*
* public static int getScanStayDuration() {
* return serverSettings != null ? serverSettings.scanStayDuration :
* scanStayDuration;
* }
*/

private ClientSettings() {
}
}
7 changes: 6 additions & 1 deletion src/main/java/li/cil/scannable/common/config/Constants.java
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ public final class Constants {
public static final String CONFIG_FLUID_BLACKLIST = "config.scannable.fluidBlacklist";
public static final String CONFIG_FLUID_COLORS = "config.scannable.fluidColors";
public static final String CONFIG_LOG_BLOCK_DROP_LOOKUP_FAILURES = "config.scannable.logBlockDropLookupFailures";
public static final String CONFIG_SCAN_STAY_DURATION = "config.scannable.scanStayDuration";

// --------------------------------------------------------------------- //
// GUI labels
Expand All @@ -61,6 +62,8 @@ public final class Constants {
public static final String GUI_SCANNER_MODULES_TOOLTIP = "gui.scannable.scanner.modules.tooltip";
public static final String GUI_SCANNER_MODULES_INACTIVE = "gui.scannable.scanner.modules_inactive";
public static final String GUI_SCANNER_MODULES_INACTIVE_TOOLTIP = "gui.scannable.scanner.modules_inactive.tooltip";
public static final String GUI_SCANNER_MODULES_RANGE = "gui.scannable.scanner.modules_range";
public static final String GUI_SCANNER_MODULES_RANGE_TOOLTIP = "gui.scannable.scanner.modules_range.tooltip";
public static final String GUI_SCANNER_PROGRESS = "gui.scannable.scanner.progress";
public static final String GUI_OVERLAY_LABEL_DISTANCE = "gui.scannable.overlay.entity_details";

Expand Down Expand Up @@ -116,8 +119,10 @@ public final class Constants {
public static final int SCANNER_ACTIVE_MODULE_COUNT = 3;
// Number of additional modules that can be stored in a scanner.
public static final int SCANNER_INACTIVE_MODULE_COUNT = 6;
// Number of range modules that can be stored in a scanner.
public static final int SCANNER_RANGE_MODULE_COUNT = 1;
// Total number of modules that can be placed in a scanner.
public static final int SCANNER_TOTAL_MODULE_COUNT = SCANNER_ACTIVE_MODULE_COUNT + SCANNER_INACTIVE_MODULE_COUNT;
public static final int SCANNER_TOTAL_MODULE_COUNT = SCANNER_ACTIVE_MODULE_COUNT + SCANNER_INACTIVE_MODULE_COUNT + SCANNER_RANGE_MODULE_COUNT;
// By how much to scale the base scan range when scanning for ores.
public static final float MODULE_ORE_RADIUS_MULTIPLIER = 0.25f;
// By how much to scale the base scan range when scanning for specific blocks.
Expand Down
Loading