Number client input, energy counter io limit
This commit is contained in:
parent
dc535dd01a
commit
dd6d30e011
@ -1,65 +0,0 @@
|
|||||||
package ru.dbotthepony.mc.otm.client.render;
|
|
||||||
|
|
||||||
import com.mojang.blaze3d.systems.RenderSystem;
|
|
||||||
|
|
||||||
public record RGBAColor(float r, float g, float b, float a) {
|
|
||||||
public static final RGBAColor BLACK = new RGBAColor(0, 0, 0, 1f);
|
|
||||||
public static final RGBAColor WHITE = new RGBAColor(1f, 1f, 1f, 1f);
|
|
||||||
public static final RGBAColor SLATE_GRAY = new RGBAColor(64, 64, 64);
|
|
||||||
|
|
||||||
public int whole() {
|
|
||||||
return
|
|
||||||
Math.min(255, Math.max(0, Math.round(r * 255))) << 16 |
|
|
||||||
Math.min(255, Math.max(0, Math.round(g * 255))) << 8 |
|
|
||||||
Math.min(255, Math.max(0, Math.round(b * 255)));
|
|
||||||
}
|
|
||||||
|
|
||||||
public int wholeinv() {
|
|
||||||
return
|
|
||||||
Math.min(255, Math.max(0, Math.round(b * 255))) << 16 |
|
|
||||||
Math.min(255, Math.max(0, Math.round(g * 255))) << 8 |
|
|
||||||
Math.min(255, Math.max(0, Math.round(r * 255)));
|
|
||||||
}
|
|
||||||
|
|
||||||
public RGBAColor(int r, int g, int b) {
|
|
||||||
this(r / 255F, g / 255F, b / 255F, 1F);
|
|
||||||
}
|
|
||||||
|
|
||||||
public RGBAColor(int r, int g, int b, int a) {
|
|
||||||
this(r / 255F, g / 255F, b / 255F, a / 255F);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static RGBAColor inv(int color) {
|
|
||||||
var r = ((color & 0xFF000000) >>> 24) / 255F;
|
|
||||||
var g = ((color & 0xFF0000) >>> 16) / 255F;
|
|
||||||
var b = ((color & 0xFF00) >>> 8) / 255F;
|
|
||||||
var a = (color & 0xFF) / 255F;
|
|
||||||
|
|
||||||
return new RGBAColor(a, b, g, r);
|
|
||||||
}
|
|
||||||
|
|
||||||
public RGBAColor(int color) {
|
|
||||||
this(((color & 0xFF000000) >>> 24) / 255F, ((color & 0xFF0000) >>> 16) / 255F, ((color & 0xFF00) >>> 8) / 255F, (color & 0xFF) / 255F);
|
|
||||||
}
|
|
||||||
|
|
||||||
public int toInt() {
|
|
||||||
var r = (int) this.r;
|
|
||||||
var g = (int) this.g;
|
|
||||||
var b = (int) this.b;
|
|
||||||
|
|
||||||
return r << 16 | g << 8 | b;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setSystemColor() {
|
|
||||||
setShaderColor();
|
|
||||||
setDrawColor();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setShaderColor() {
|
|
||||||
RenderSystem.setShaderColor(r, g, b, a);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDrawColor() {
|
|
||||||
RenderHelper.setDrawColor(this);
|
|
||||||
}
|
|
||||||
}
|
|
@ -7,6 +7,7 @@ import net.minecraft.client.Minecraft;
|
|||||||
import net.minecraft.client.renderer.GameRenderer;
|
import net.minecraft.client.renderer.GameRenderer;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import ru.dbotthepony.mc.otm.OverdriveThatMatters;
|
import ru.dbotthepony.mc.otm.OverdriveThatMatters;
|
||||||
|
import ru.dbotthepony.mc.otm.core.RGBAColor;
|
||||||
|
|
||||||
import java.util.Stack;
|
import java.util.Stack;
|
||||||
|
|
||||||
@ -121,19 +122,19 @@ public class RenderHelper {
|
|||||||
final float y_post = (float) (Math.sin(tilt_post) + 0.5) * radius;
|
final float y_post = (float) (Math.sin(tilt_post) + 0.5) * radius;
|
||||||
|
|
||||||
builder.vertex(matrix, x_pre * (float) Math.cos(tilt_post), y_post, z_pre * (float) Math.cos(tilt_post))
|
builder.vertex(matrix, x_pre * (float) Math.cos(tilt_post), y_post, z_pre * (float) Math.cos(tilt_post))
|
||||||
.color(draw_color.r(), draw_color.g(), draw_color.b(), draw_color.a())
|
.color(draw_color.getRed(), draw_color.getGreen(), draw_color.getBlue(), draw_color.getAlpha())
|
||||||
.endVertex();
|
.endVertex();
|
||||||
|
|
||||||
builder.vertex(matrix, x_post * (float) Math.cos(tilt_post), y_post, z_post * (float) Math.cos(tilt_post))
|
builder.vertex(matrix, x_post * (float) Math.cos(tilt_post), y_post, z_post * (float) Math.cos(tilt_post))
|
||||||
.color(draw_color.r(), draw_color.g(), draw_color.b(), draw_color.a())
|
.color(draw_color.getRed(), draw_color.getGreen(), draw_color.getBlue(), draw_color.getAlpha())
|
||||||
.endVertex();
|
.endVertex();
|
||||||
|
|
||||||
builder.vertex(matrix, x_post * (float) Math.cos(tilt_pre), y_pre, z_post * (float) Math.cos(tilt_pre))
|
builder.vertex(matrix, x_post * (float) Math.cos(tilt_pre), y_pre, z_post * (float) Math.cos(tilt_pre))
|
||||||
.color(draw_color.r(), draw_color.g(), draw_color.b(), draw_color.a())
|
.color(draw_color.getRed(), draw_color.getGreen(), draw_color.getBlue(), draw_color.getAlpha())
|
||||||
.endVertex();
|
.endVertex();
|
||||||
|
|
||||||
builder.vertex(matrix, x_pre * (float) Math.cos(tilt_pre), y_pre, z_pre * (float) Math.cos(tilt_pre))
|
builder.vertex(matrix, x_pre * (float) Math.cos(tilt_pre), y_pre, z_pre * (float) Math.cos(tilt_pre))
|
||||||
.color(draw_color.r(), draw_color.g(), draw_color.b(), draw_color.a())
|
.color(draw_color.getRed(), draw_color.getGreen(), draw_color.getBlue(), draw_color.getAlpha())
|
||||||
.endVertex();
|
.endVertex();
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -334,7 +335,7 @@ public class RenderHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void setShaderColor(RGBAColor rect_color) {
|
public static void setShaderColor(RGBAColor rect_color) {
|
||||||
RenderSystem.setShaderColor(rect_color.r(), rect_color.g(), rect_color.b(), rect_color.a());
|
RenderSystem.setShaderColor(rect_color.getRed(), rect_color.getGreen(), rect_color.getBlue(), rect_color.getAlpha());
|
||||||
}
|
}
|
||||||
|
|
||||||
private static RGBAColor draw_color = new RGBAColor(255, 255, 255, 255);
|
private static RGBAColor draw_color = new RGBAColor(255, 255, 255, 255);
|
||||||
@ -367,10 +368,10 @@ public class RenderHelper {
|
|||||||
|
|
||||||
builder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR);
|
builder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR);
|
||||||
|
|
||||||
builder.vertex(matrix, x, y + height, depth_z).color(draw_color.r(), draw_color.g(), draw_color.b(), draw_color.a()).endVertex();
|
builder.vertex(matrix, x, y + height, depth_z).color(draw_color.getRed(), draw_color.getGreen(), draw_color.getBlue(), draw_color.getAlpha()).endVertex();
|
||||||
builder.vertex(matrix, x + width, y + height, depth_z).color(draw_color.r(), draw_color.g(), draw_color.b(), draw_color.a()).endVertex();
|
builder.vertex(matrix, x + width, y + height, depth_z).color(draw_color.getRed(), draw_color.getGreen(), draw_color.getBlue(), draw_color.getAlpha()).endVertex();
|
||||||
builder.vertex(matrix, x + width, y, depth_z).color(draw_color.r(), draw_color.g(), draw_color.b(), draw_color.a()).endVertex();
|
builder.vertex(matrix, x + width, y, depth_z).color(draw_color.getRed(), draw_color.getGreen(), draw_color.getBlue(), draw_color.getAlpha()).endVertex();
|
||||||
builder.vertex(matrix, x, y, depth_z).color(draw_color.r(), draw_color.g(), draw_color.b(), draw_color.a()).endVertex();
|
builder.vertex(matrix, x, y, depth_z).color(draw_color.getRed(), draw_color.getGreen(), draw_color.getBlue(), draw_color.getAlpha()).endVertex();
|
||||||
|
|
||||||
tess.end();
|
tess.end();
|
||||||
|
|
||||||
|
@ -53,7 +53,7 @@ public class MatterPanelScreen extends MatteryScreen<MenuMatterPanel> {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
var patterns_tab = frame.addTab(FramePanel.FrameTabPosition.TOP, () -> {
|
var patterns_tab = frame.addTab(FramePanel.Position.TOP, () -> {
|
||||||
for (var slot : pattern_slots) {
|
for (var slot : pattern_slots) {
|
||||||
slot.setVisible(true);
|
slot.setVisible(true);
|
||||||
}
|
}
|
||||||
@ -63,7 +63,7 @@ public class MatterPanelScreen extends MatteryScreen<MenuMatterPanel> {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var tasks_tab = frame.addTab(FramePanel.FrameTabPosition.TOP, () -> {
|
var tasks_tab = frame.addTab(FramePanel.Position.TOP, () -> {
|
||||||
for (var slot : task_slots) {
|
for (var slot : task_slots) {
|
||||||
slot.setVisible(true);
|
slot.setVisible(true);
|
||||||
}
|
}
|
||||||
|
@ -15,6 +15,7 @@ import ru.dbotthepony.mc.otm.matter.RegistryPacketUpdate;
|
|||||||
import ru.dbotthepony.mc.otm.menu.MenuDriveViewer;
|
import ru.dbotthepony.mc.otm.menu.MenuDriveViewer;
|
||||||
import ru.dbotthepony.mc.otm.menu.data.*;
|
import ru.dbotthepony.mc.otm.menu.data.*;
|
||||||
import ru.dbotthepony.mc.otm.menu.widget.BooleanPlayerInputPacket;
|
import ru.dbotthepony.mc.otm.menu.widget.BooleanPlayerInputPacket;
|
||||||
|
import ru.dbotthepony.mc.otm.menu.widget.NumberPlayerInputPacket;
|
||||||
import ru.dbotthepony.mc.otm.menu.widget.OneWayPlayerInputPacket;
|
import ru.dbotthepony.mc.otm.menu.widget.OneWayPlayerInputPacket;
|
||||||
import ru.dbotthepony.mc.otm.network.android.*;
|
import ru.dbotthepony.mc.otm.network.android.*;
|
||||||
|
|
||||||
@ -274,6 +275,15 @@ public class MatteryNetworking {
|
|||||||
Optional.of(NetworkDirection.PLAY_TO_SERVER)
|
Optional.of(NetworkDirection.PLAY_TO_SERVER)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
CHANNEL.registerMessage(
|
||||||
|
next_network_id++,
|
||||||
|
NumberPlayerInputPacket.class,
|
||||||
|
NumberPlayerInputPacket::write,
|
||||||
|
NumberPlayerInputPacket.Companion::read,
|
||||||
|
NumberPlayerInputPacket::play,
|
||||||
|
Optional.of(NetworkDirection.PLAY_TO_SERVER)
|
||||||
|
);
|
||||||
|
|
||||||
CHANNEL.registerMessage(
|
CHANNEL.registerMessage(
|
||||||
next_network_id++,
|
next_network_id++,
|
||||||
MultiByteDataContainerPacket.class,
|
MultiByteDataContainerPacket.class,
|
||||||
|
@ -9,6 +9,7 @@ import net.minecraft.core.Direction
|
|||||||
import net.minecraft.network.chat.TranslatableComponent
|
import net.minecraft.network.chat.TranslatableComponent
|
||||||
import ru.dbotthepony.mc.otm.block.BlockEnergyCounter
|
import ru.dbotthepony.mc.otm.block.BlockEnergyCounter
|
||||||
import ru.dbotthepony.mc.otm.block.entity.BlockEntityEnergyCounter
|
import ru.dbotthepony.mc.otm.block.entity.BlockEntityEnergyCounter
|
||||||
|
import ru.dbotthepony.mc.otm.core.RGBAColor
|
||||||
import ru.dbotthepony.mc.otm.core.asAngle
|
import ru.dbotthepony.mc.otm.core.asAngle
|
||||||
import ru.dbotthepony.mc.otm.core.times
|
import ru.dbotthepony.mc.otm.core.times
|
||||||
import ru.dbotthepony.mc.otm.menu.FormattingHelper
|
import ru.dbotthepony.mc.otm.menu.FormattingHelper
|
||||||
@ -44,21 +45,21 @@ class EnergyCounterRenderer(private val context: BlockEntityRendererProvider.Con
|
|||||||
|
|
||||||
var y = -16f
|
var y = -16f
|
||||||
|
|
||||||
val finalX = font.drawAligned(poseStack, "00000000", TextAlign.CENTER_CENTER, -4f, y, 0x2C2C2C)
|
val finalX = font.drawAligned(poseStack, "00000000", TextAlign.CENTER_CENTER, -4f, y, RGBAColor.GRAY)
|
||||||
font.drawAligned(poseStack, "00000000", TextAlign.CENTER_CENTER, -4f, y + font.lineHeight, 0x2C2C2C)
|
font.drawAligned(poseStack, "00000000", TextAlign.CENTER_CENTER, -4f, y + font.lineHeight, RGBAColor.GRAY)
|
||||||
font.drawAligned(poseStack, "/t", TextAlign.CENTER_LEFT, finalX.toFloat(), y, 0x2C2C2C)
|
font.drawAligned(poseStack, "/t", TextAlign.CENTER_LEFT, finalX.toFloat(), y, RGBAColor.GRAY)
|
||||||
font.drawAligned(poseStack, "/s", TextAlign.CENTER_LEFT, finalX.toFloat(), y + font.lineHeight, 0x2C2C2C)
|
font.drawAligned(poseStack, "/s", TextAlign.CENTER_LEFT, finalX.toFloat(), y + font.lineHeight, RGBAColor.GRAY)
|
||||||
|
|
||||||
poseStack.pushPose()
|
poseStack.pushPose()
|
||||||
poseStack.translate(-0.1, -0.1, -0.1)
|
poseStack.translate(-0.1, -0.1, -0.1)
|
||||||
font.drawAligned(poseStack, tile.lastTick.toString(0), TextAlign.CENTER_RIGHT, finalX.toFloat(), y, 0xFFFFFF)
|
font.drawAligned(poseStack, tile.lastTick.toString(0), TextAlign.CENTER_RIGHT, finalX.toFloat(), y, RGBAColor.WHITE)
|
||||||
font.drawAligned(poseStack, tile.sumHistory(20).toString(0), TextAlign.CENTER_RIGHT, finalX.toFloat(), y + font.lineHeight, 0xFFFFFF)
|
font.drawAligned(poseStack, tile.sumHistory(20).toString(0), TextAlign.CENTER_RIGHT, finalX.toFloat(), y + font.lineHeight, RGBAColor.WHITE)
|
||||||
poseStack.popPose()
|
poseStack.popPose()
|
||||||
|
|
||||||
y += font.lineHeight * 3
|
y += font.lineHeight * 3
|
||||||
|
|
||||||
font.drawAligned(poseStack, TOTAL, TextAlign.CENTER_CENTER, 0f, y, 0xFFFFFF)
|
font.drawAligned(poseStack, TOTAL, TextAlign.CENTER_CENTER, 0f, y, RGBAColor.WHITE)
|
||||||
font.drawAligned(poseStack, FormattingHelper.formatPower(tile.passed), TextAlign.CENTER_CENTER, 0f, y + font.lineHeight, 0xFFFFFF)
|
font.drawAligned(poseStack, FormattingHelper.formatPower(tile.passed), TextAlign.CENTER_CENTER, 0f, y + font.lineHeight, RGBAColor.WHITE)
|
||||||
|
|
||||||
poseStack.popPose()
|
poseStack.popPose()
|
||||||
}
|
}
|
||||||
|
@ -12,7 +12,7 @@ import ru.dbotthepony.mc.otm.core.*
|
|||||||
|
|
||||||
fun VertexConsumer.normal(vector: Vector) = normal(vector.x.toFloat(), vector.y.toFloat(), vector.z.toFloat())
|
fun VertexConsumer.normal(vector: Vector) = normal(vector.x.toFloat(), vector.y.toFloat(), vector.z.toFloat())
|
||||||
fun VertexConsumer.vertex(matrix4f: Matrix4f, vector: Vector) = vertex(matrix4f, vector.x.toFloat(), vector.y.toFloat(), vector.z.toFloat())
|
fun VertexConsumer.vertex(matrix4f: Matrix4f, vector: Vector) = vertex(matrix4f, vector.x.toFloat(), vector.y.toFloat(), vector.z.toFloat())
|
||||||
fun VertexConsumer.color(color: RGBAColor) = color(color.r, color.g, color.b, color.a)
|
fun VertexConsumer.color(color: RGBAColor) = color(color.red, color.green, color.blue, color.alpha)
|
||||||
|
|
||||||
fun PoseStack.translate(vector: Vector) = translate(vector.x, vector.y, vector.z)
|
fun PoseStack.translate(vector: Vector) = translate(vector.x, vector.y, vector.z)
|
||||||
fun PoseStack.translate(vector: Vec3i) = translate(vector.x.toDouble(), vector.y.toDouble(), vector.z.toDouble())
|
fun PoseStack.translate(vector: Vec3i) = translate(vector.x.toDouble(), vector.y.toDouble(), vector.z.toDouble())
|
||||||
|
@ -11,7 +11,6 @@ import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider
|
|||||||
import net.minecraft.client.renderer.texture.OverlayTexture
|
import net.minecraft.client.renderer.texture.OverlayTexture
|
||||||
import net.minecraft.core.Direction
|
import net.minecraft.core.Direction
|
||||||
import net.minecraft.network.chat.TranslatableComponent
|
import net.minecraft.network.chat.TranslatableComponent
|
||||||
import net.minecraft.world.level.block.BeaconBeamBlock
|
|
||||||
import ru.dbotthepony.mc.otm.block.BlockBlackHole
|
import ru.dbotthepony.mc.otm.block.BlockBlackHole
|
||||||
import ru.dbotthepony.mc.otm.block.BlockMatteryRotatable
|
import ru.dbotthepony.mc.otm.block.BlockMatteryRotatable
|
||||||
import ru.dbotthepony.mc.otm.block.entity.BlockEntityGravitationStabilizer
|
import ru.dbotthepony.mc.otm.block.entity.BlockEntityGravitationStabilizer
|
||||||
|
@ -12,7 +12,7 @@ import ru.dbotthepony.mc.otm.android.AndroidResearchType
|
|||||||
import ru.dbotthepony.mc.otm.capability.MatteryCapability
|
import ru.dbotthepony.mc.otm.capability.MatteryCapability
|
||||||
import ru.dbotthepony.mc.otm.capability.android.AndroidCapabilityPlayer
|
import ru.dbotthepony.mc.otm.capability.android.AndroidCapabilityPlayer
|
||||||
import ru.dbotthepony.mc.otm.capability.android.IAndroidCapability
|
import ru.dbotthepony.mc.otm.capability.android.IAndroidCapability
|
||||||
import ru.dbotthepony.mc.otm.client.render.RGBAColor
|
import ru.dbotthepony.mc.otm.core.RGBAColor
|
||||||
import ru.dbotthepony.mc.otm.client.render.RenderHelper
|
import ru.dbotthepony.mc.otm.client.render.RenderHelper
|
||||||
import ru.dbotthepony.mc.otm.client.screen.panels.*
|
import ru.dbotthepony.mc.otm.client.screen.panels.*
|
||||||
import ru.dbotthepony.mc.otm.client.screen.widget.PowerGaugePanel
|
import ru.dbotthepony.mc.otm.client.screen.widget.PowerGaugePanel
|
||||||
|
@ -20,8 +20,8 @@ class ScreenDriveViewer(menu: MenuDriveViewer, inventory: Inventory, title: Comp
|
|||||||
|
|
||||||
val views = ArrayList<EditablePanel>()
|
val views = ArrayList<EditablePanel>()
|
||||||
val settings = ArrayList<EditablePanel>()
|
val settings = ArrayList<EditablePanel>()
|
||||||
val viewButton = frame.addTab(FramePanel.FrameTabPosition.TOP)
|
val viewButton = frame.addTab(FramePanel.Position.TOP)
|
||||||
val settingsButton = frame.addTab(FramePanel.FrameTabPosition.TOP)
|
val settingsButton = frame.addTab(FramePanel.Position.TOP)
|
||||||
|
|
||||||
viewButton.bindOnOpen {
|
viewButton.bindOnOpen {
|
||||||
for (panel in views) {
|
for (panel in views) {
|
||||||
|
@ -3,10 +3,7 @@ package ru.dbotthepony.mc.otm.client.screen
|
|||||||
import net.minecraft.network.chat.Component
|
import net.minecraft.network.chat.Component
|
||||||
import net.minecraft.network.chat.TranslatableComponent
|
import net.minecraft.network.chat.TranslatableComponent
|
||||||
import net.minecraft.world.entity.player.Inventory
|
import net.minecraft.world.entity.player.Inventory
|
||||||
import ru.dbotthepony.mc.otm.client.screen.panels.ButtonPanel
|
import ru.dbotthepony.mc.otm.client.screen.panels.*
|
||||||
import ru.dbotthepony.mc.otm.client.screen.panels.Dock
|
|
||||||
import ru.dbotthepony.mc.otm.client.screen.panels.FramePanel
|
|
||||||
import ru.dbotthepony.mc.otm.client.screen.panels.Label
|
|
||||||
import ru.dbotthepony.mc.otm.menu.MenuEnergyCounter
|
import ru.dbotthepony.mc.otm.menu.MenuEnergyCounter
|
||||||
import ru.dbotthepony.mc.otm.menu.FormattingHelper
|
import ru.dbotthepony.mc.otm.menu.FormattingHelper
|
||||||
|
|
||||||
@ -85,6 +82,26 @@ class ScreenEnergyCounter(menu: MenuEnergyCounter, inventory: Inventory, title:
|
|||||||
button.setDockMargin(4f, 0f, 4f, 0f)
|
button.setDockMargin(4f, 0f, 4f, 0f)
|
||||||
button.bind { menu.switchDirection.userInput() }
|
button.bind { menu.switchDirection.userInput() }
|
||||||
|
|
||||||
|
val infoPanels = frame.fetchChildren()
|
||||||
|
|
||||||
|
label = Label(this, frame, TranslatableComponent("block.overdrive_that_matters.energy_counter.limit"))
|
||||||
|
label.dock = Dock.TOP
|
||||||
|
label.setDockMargin(4f, 0f, 0f, 0f)
|
||||||
|
|
||||||
|
val inputPanel = NumberInputPanel(this, frame, menu.maxIO)
|
||||||
|
inputPanel.dock = Dock.TOP
|
||||||
|
inputPanel.setDockMargin(4f, 0f, 4f, 0f)
|
||||||
|
|
||||||
|
val limitsPanels = frame.fetchChildren().filter { !infoPanels.contains(it) }
|
||||||
|
|
||||||
|
val informationTab = frame.addTab(FramePanel.Position.TOP)
|
||||||
|
val limitsTab = frame.addTab(FramePanel.Position.TOP)
|
||||||
|
|
||||||
|
informationTab.showHidePanels(infoPanels)
|
||||||
|
limitsTab.showHidePanels(limitsPanels)
|
||||||
|
|
||||||
|
limitsTab.onClose!!.run()
|
||||||
|
|
||||||
return frame
|
return frame
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -8,7 +8,7 @@ import net.minecraft.network.chat.Component
|
|||||||
import net.minecraft.world.item.ItemStack
|
import net.minecraft.world.item.ItemStack
|
||||||
import net.minecraftforge.client.RenderProperties
|
import net.minecraftforge.client.RenderProperties
|
||||||
import org.lwjgl.opengl.GL11
|
import org.lwjgl.opengl.GL11
|
||||||
import ru.dbotthepony.mc.otm.client.render.RGBAColor
|
import ru.dbotthepony.mc.otm.core.RGBAColor
|
||||||
import ru.dbotthepony.mc.otm.client.render.RenderHelper
|
import ru.dbotthepony.mc.otm.client.render.RenderHelper
|
||||||
import ru.dbotthepony.mc.otm.client.screen.MatteryScreen
|
import ru.dbotthepony.mc.otm.client.screen.MatteryScreen
|
||||||
|
|
||||||
|
@ -2,16 +2,17 @@ package ru.dbotthepony.mc.otm.client.screen.panels
|
|||||||
|
|
||||||
import net.minecraft.client.gui.components.EditBox
|
import net.minecraft.client.gui.components.EditBox
|
||||||
import net.minecraft.network.chat.Component
|
import net.minecraft.network.chat.Component
|
||||||
|
import net.minecraft.network.chat.TextComponent
|
||||||
import ru.dbotthepony.mc.otm.client.screen.MatteryScreen
|
import ru.dbotthepony.mc.otm.client.screen.MatteryScreen
|
||||||
|
|
||||||
open class EditBoxPanel(
|
open class EditBoxPanel(
|
||||||
screen: MatteryScreen<*>,
|
screen: MatteryScreen<*>,
|
||||||
parent: EditablePanel?,
|
parent: EditablePanel?,
|
||||||
x: Float,
|
x: Float = 0f,
|
||||||
y: Float,
|
y: Float = 0f,
|
||||||
width: Float,
|
width: Float = 0f,
|
||||||
height: Float,
|
height: Float = 20f,
|
||||||
val defaultText: Component
|
val defaultText: Component = TextComponent("")
|
||||||
) : MinecraftWidgetPanel<EditBox>(screen, parent, x, y, width, height) {
|
) : MinecraftWidgetPanel<EditBox>(screen, parent, x, y, width, height) {
|
||||||
override fun makeNew(): EditBox {
|
override fun makeNew(): EditBox {
|
||||||
return object : EditBox(font, 0, 0, width.toInt(), height.toInt().coerceAtMost(20), defaultText) {
|
return object : EditBox(font, 0, 0, width.toInt(), height.toInt().coerceAtMost(20), defaultText) {
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package ru.dbotthepony.mc.otm.client.screen.panels
|
package ru.dbotthepony.mc.otm.client.screen.panels
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableList
|
||||||
import com.mojang.blaze3d.systems.RenderSystem
|
import com.mojang.blaze3d.systems.RenderSystem
|
||||||
import com.mojang.blaze3d.vertex.PoseStack
|
import com.mojang.blaze3d.vertex.PoseStack
|
||||||
import net.minecraft.client.Minecraft
|
import net.minecraft.client.Minecraft
|
||||||
@ -625,7 +626,7 @@ open class EditablePanel @JvmOverloads constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun fetchChildren(): List<EditablePanel> {
|
fun fetchChildren(): List<EditablePanel> {
|
||||||
return java.util.List.copyOf(children)
|
return ImmutableList.copyOf(children)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getUndockedChildren(): List<EditablePanel> {
|
fun getUndockedChildren(): List<EditablePanel> {
|
||||||
|
@ -9,7 +9,6 @@ import net.minecraft.client.gui.narration.NarrationElementOutput
|
|||||||
import net.minecraft.client.resources.sounds.SimpleSoundInstance
|
import net.minecraft.client.resources.sounds.SimpleSoundInstance
|
||||||
import net.minecraft.network.chat.Component
|
import net.minecraft.network.chat.Component
|
||||||
import net.minecraft.sounds.SoundEvents
|
import net.minecraft.sounds.SoundEvents
|
||||||
import org.lwjgl.opengl.GL11
|
|
||||||
import org.lwjgl.opengl.GL30
|
import org.lwjgl.opengl.GL30
|
||||||
import ru.dbotthepony.mc.otm.client.render.*
|
import ru.dbotthepony.mc.otm.client.render.*
|
||||||
import ru.dbotthepony.mc.otm.client.screen.MatteryScreen
|
import ru.dbotthepony.mc.otm.client.screen.MatteryScreen
|
||||||
@ -23,7 +22,7 @@ open class FramePanel(
|
|||||||
height: Float,
|
height: Float,
|
||||||
protected var title: Component
|
protected var title: Component
|
||||||
) : EditablePanel(screen, parent, x, y, width, height), NarratableEntry {
|
) : EditablePanel(screen, parent, x, y, width, height), NarratableEntry {
|
||||||
enum class FrameTabPosition(val width: Float, val height: Float, val active_width: Float, val active_height: Float) {
|
enum class Position(val width: Float, val height: Float, val active_width: Float, val active_height: Float) {
|
||||||
TOP(28f, 28f, 28f, 32f),
|
TOP(28f, 28f, 28f, 32f),
|
||||||
// TODO: а оно вообще нужно?
|
// TODO: а оно вообще нужно?
|
||||||
LEFT(28f, 28f, 32f, 28f),
|
LEFT(28f, 28f, 32f, 28f),
|
||||||
@ -31,7 +30,7 @@ open class FramePanel(
|
|||||||
BOTTOM(28f, 28f, 28f, 32f);
|
BOTTOM(28f, 28f, 28f, 32f);
|
||||||
}
|
}
|
||||||
|
|
||||||
open inner class FrameTabPanel(position: FrameTabPosition, on_open: Runnable? = null, on_close: Runnable? = null) :
|
open inner class FrameTabPanel(position: Position, on_open: Runnable? = null, on_close: Runnable? = null) :
|
||||||
EditablePanel(
|
EditablePanel(
|
||||||
this@FramePanel.screen,
|
this@FramePanel.screen,
|
||||||
this@FramePanel,
|
this@FramePanel,
|
||||||
@ -41,7 +40,7 @@ open class FramePanel(
|
|||||||
position.height
|
position.height
|
||||||
) {
|
) {
|
||||||
|
|
||||||
val frameTabPosition: FrameTabPosition = position
|
val frameTabPosition: Position = position
|
||||||
var isActive = false
|
var isActive = false
|
||||||
var initial = false
|
var initial = false
|
||||||
|
|
||||||
@ -56,8 +55,22 @@ open class FramePanel(
|
|||||||
onClose = value
|
onClose = value
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun showHidePanels(input: List<EditablePanel>) {
|
||||||
|
onOpen = Runnable {
|
||||||
|
for (child in input) {
|
||||||
|
child.visible = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onClose = Runnable {
|
||||||
|
for (child in input) {
|
||||||
|
child.visible = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun innerRender(stack: PoseStack, mouse_x: Float, mouse_y: Float, flag: Float) {
|
override fun innerRender(stack: PoseStack, mouse_x: Float, mouse_y: Float, flag: Float) {
|
||||||
if (frameTabPosition == FrameTabPosition.TOP) {
|
if (frameTabPosition == Position.TOP) {
|
||||||
val width: Float
|
val width: Float
|
||||||
val height: Float
|
val height: Float
|
||||||
|
|
||||||
@ -156,7 +169,7 @@ open class FramePanel(
|
|||||||
protected val tabsBottom = ArrayList<FrameTabPanel>()
|
protected val tabsBottom = ArrayList<FrameTabPanel>()
|
||||||
|
|
||||||
@JvmOverloads
|
@JvmOverloads
|
||||||
fun addTab(position: FrameTabPosition, on_open: Runnable? = null, on_close: Runnable? = null): FrameTabPanel {
|
fun addTab(position: Position, on_open: Runnable? = null, on_close: Runnable? = null): FrameTabPanel {
|
||||||
val tab = FrameTabPanel(position, on_open, on_close)
|
val tab = FrameTabPanel(position, on_open, on_close)
|
||||||
doAddTab(tab)
|
doAddTab(tab)
|
||||||
return tab
|
return tab
|
||||||
@ -168,17 +181,17 @@ open class FramePanel(
|
|||||||
}
|
}
|
||||||
|
|
||||||
when (tab.frameTabPosition) {
|
when (tab.frameTabPosition) {
|
||||||
FrameTabPosition.TOP -> tabsTop.add(tab)
|
Position.TOP -> tabsTop.add(tab)
|
||||||
FrameTabPosition.LEFT -> tabsLeft.add(tab)
|
Position.LEFT -> tabsLeft.add(tab)
|
||||||
FrameTabPosition.RIGHT -> tabsRight.add(tab)
|
Position.RIGHT -> tabsRight.add(tab)
|
||||||
FrameTabPosition.BOTTOM -> tabsBottom.add(tab)
|
Position.BOTTOM -> tabsBottom.add(tab)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun performLayout() {
|
override fun performLayout() {
|
||||||
for (i in tabsTop.indices) {
|
for (i in tabsTop.indices) {
|
||||||
val tab = tabsTop[i]
|
val tab = tabsTop[i]
|
||||||
tab.setPos(i * FrameTabPosition.TOP.width, -FrameTabPosition.TOP.height)
|
tab.setPos(i * Position.TOP.width, -Position.TOP.height)
|
||||||
tab.initial = i == 0
|
tab.initial = i == 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@ package ru.dbotthepony.mc.otm.client.screen.panels
|
|||||||
import com.mojang.blaze3d.vertex.PoseStack
|
import com.mojang.blaze3d.vertex.PoseStack
|
||||||
import net.minecraft.network.chat.Component
|
import net.minecraft.network.chat.Component
|
||||||
import net.minecraft.network.chat.TextComponent
|
import net.minecraft.network.chat.TextComponent
|
||||||
import ru.dbotthepony.mc.otm.client.render.RGBAColor
|
import ru.dbotthepony.mc.otm.core.RGBAColor
|
||||||
import ru.dbotthepony.mc.otm.client.screen.MatteryScreen
|
import ru.dbotthepony.mc.otm.client.screen.MatteryScreen
|
||||||
|
|
||||||
open class Label @JvmOverloads constructor(
|
open class Label @JvmOverloads constructor(
|
||||||
@ -24,6 +24,6 @@ open class Label @JvmOverloads constructor(
|
|||||||
var color = RGBAColor.SLATE_GRAY
|
var color = RGBAColor.SLATE_GRAY
|
||||||
|
|
||||||
override fun innerRender(stack: PoseStack, mouse_x: Float, mouse_y: Float, flag: Float) {
|
override fun innerRender(stack: PoseStack, mouse_x: Float, mouse_y: Float, flag: Float) {
|
||||||
font.draw(stack, text, 0f, 0f, color.wholeinv())
|
font.draw(stack, text, 0f, 0f, color.toInt())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,42 @@
|
|||||||
|
package ru.dbotthepony.mc.otm.client.screen.panels
|
||||||
|
|
||||||
|
import net.minecraft.network.chat.Component
|
||||||
|
import net.minecraft.network.chat.TextComponent
|
||||||
|
import ru.dbotthepony.mc.otm.client.screen.MatteryScreen
|
||||||
|
import ru.dbotthepony.mc.otm.menu.widget.NumberPlayerInputWidget
|
||||||
|
import java.math.BigDecimal
|
||||||
|
|
||||||
|
open class NumberInputPanel(
|
||||||
|
screen: MatteryScreen<*>,
|
||||||
|
parent: EditablePanel?,
|
||||||
|
val inputWidget: NumberPlayerInputWidget,
|
||||||
|
x: Float = 0f,
|
||||||
|
y: Float = 0f,
|
||||||
|
width: Float = 0f,
|
||||||
|
height: Float = 20f,
|
||||||
|
defaultText: Component = TextComponent("")
|
||||||
|
) : EditBoxPanel(screen, parent, x, y, width, height, defaultText) {
|
||||||
|
protected var nextUpdateFromServer = 0L
|
||||||
|
protected var inputStr = ""
|
||||||
|
|
||||||
|
override fun tick() {
|
||||||
|
super.tick()
|
||||||
|
|
||||||
|
if (isFocused) {
|
||||||
|
nextUpdateFromServer = System.currentTimeMillis() + 2000L
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nextUpdateFromServer < System.currentTimeMillis()) {
|
||||||
|
getOrCreateWidget().value = inputWidget.value.toPlainString()
|
||||||
|
inputStr = getOrCreateWidget().value
|
||||||
|
} else {
|
||||||
|
if (inputStr != getOrCreateWidget().value) {
|
||||||
|
inputStr = getOrCreateWidget().value
|
||||||
|
|
||||||
|
try {
|
||||||
|
inputWidget.userInput(BigDecimal(inputStr))
|
||||||
|
} catch (_: Throwable) { }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
58
src/main/kotlin/ru/dbotthepony/mc/otm/core/RGBAColor.kt
Normal file
58
src/main/kotlin/ru/dbotthepony/mc/otm/core/RGBAColor.kt
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
package ru.dbotthepony.mc.otm.core
|
||||||
|
|
||||||
|
import com.mojang.blaze3d.systems.RenderSystem
|
||||||
|
import ru.dbotthepony.mc.otm.client.render.RenderHelper
|
||||||
|
|
||||||
|
data class RGBAColor(val red: Float, val green: Float, val blue: Float, val alpha: Float = 1f) {
|
||||||
|
constructor(r: Int, g: Int, b: Int) : this((r / 255f), (g / 255f), (b / 255f), 1f)
|
||||||
|
constructor(r: Int, g: Int, b: Int, a: Int) : this((r / 255f), (g / 255f), (b / 255f), (a / 255f))
|
||||||
|
|
||||||
|
constructor(color: Long) : this(
|
||||||
|
(((color and -0x1000000) ushr 24) / 255f),
|
||||||
|
(((color and 0xFF0000) ushr 16) / 255f),
|
||||||
|
(((color and 0xFF00) ushr 8) / 255f),
|
||||||
|
(((color and 0xFF)) / 255f)
|
||||||
|
)
|
||||||
|
|
||||||
|
fun toInt(): Int {
|
||||||
|
val r = (this.red * 255).toInt()
|
||||||
|
val g = (this.green * 255).toInt()
|
||||||
|
val b = (this.blue * 255).toInt()
|
||||||
|
return (r shl 16) or (g shl 8) or b
|
||||||
|
}
|
||||||
|
|
||||||
|
fun toIntInv(): Int {
|
||||||
|
val r = (this.red * 255).toInt()
|
||||||
|
val g = (this.green * 255).toInt()
|
||||||
|
val b = (this.blue * 255).toInt()
|
||||||
|
return (b shl 16) or (g shl 8) or r
|
||||||
|
}
|
||||||
|
|
||||||
|
fun setSystemColor() {
|
||||||
|
setShaderColor()
|
||||||
|
setDrawColor()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun setShaderColor() {
|
||||||
|
RenderSystem.setShaderColor(red, green, blue, alpha)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun setDrawColor() {
|
||||||
|
RenderHelper.setDrawColor(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
val BLACK = RGBAColor(0f, 0f, 0f, 1f)
|
||||||
|
val WHITE = RGBAColor(1f, 1f, 1f, 1f)
|
||||||
|
val SLATE_GRAY = RGBAColor(64, 64, 64)
|
||||||
|
val GRAY = RGBAColor(0x2C2C2CFFL)
|
||||||
|
|
||||||
|
fun inv(color: Int): RGBAColor {
|
||||||
|
val r = (color and -0x1000000 ushr 24) / 255f
|
||||||
|
val g = (color and 0xFF0000 ushr 16) / 255f
|
||||||
|
val b = (color and 0xFF00 ushr 8) / 255f
|
||||||
|
val a = (color and 0xFF) / 255f
|
||||||
|
return RGBAColor(a, b, g, r)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -6,10 +6,13 @@ import net.minecraft.world.entity.player.Inventory
|
|||||||
import net.minecraft.world.level.block.Block
|
import net.minecraft.world.level.block.Block
|
||||||
import ru.dbotthepony.mc.otm.block.BlockEnergyCounter
|
import ru.dbotthepony.mc.otm.block.BlockEnergyCounter
|
||||||
import ru.dbotthepony.mc.otm.block.entity.BlockEntityEnergyCounter
|
import ru.dbotthepony.mc.otm.block.entity.BlockEntityEnergyCounter
|
||||||
|
import ru.dbotthepony.mc.otm.core.ImpreciseFraction
|
||||||
import ru.dbotthepony.mc.otm.menu.data.EnumDataContainer
|
import ru.dbotthepony.mc.otm.menu.data.EnumDataContainer
|
||||||
import ru.dbotthepony.mc.otm.menu.data.ImpreciseFractionDataContainer
|
import ru.dbotthepony.mc.otm.menu.data.ImpreciseFractionDataContainer
|
||||||
|
import ru.dbotthepony.mc.otm.menu.widget.NumberPlayerInputWidget
|
||||||
import ru.dbotthepony.mc.otm.menu.widget.OneWayPlayerInputWidget
|
import ru.dbotthepony.mc.otm.menu.widget.OneWayPlayerInputWidget
|
||||||
import ru.dbotthepony.mc.otm.registry.MMenus
|
import ru.dbotthepony.mc.otm.registry.MMenus
|
||||||
|
import java.math.BigDecimal
|
||||||
|
|
||||||
class MenuEnergyCounter @JvmOverloads constructor(
|
class MenuEnergyCounter @JvmOverloads constructor(
|
||||||
p_38852_: Int,
|
p_38852_: Int,
|
||||||
@ -24,16 +27,29 @@ class MenuEnergyCounter @JvmOverloads constructor(
|
|||||||
val switchDirection: OneWayPlayerInputWidget
|
val switchDirection: OneWayPlayerInputWidget
|
||||||
val inputDirection = EnumDataContainer(Direction::class.java)
|
val inputDirection = EnumDataContainer(Direction::class.java)
|
||||||
|
|
||||||
|
val maxIO = NumberPlayerInputWidget(this)
|
||||||
|
|
||||||
// TODO: Graph and proper networking for it
|
// TODO: Graph and proper networking for it
|
||||||
private var ticksPassed = 0
|
private var ticksPassed = 0
|
||||||
|
|
||||||
init {
|
init {
|
||||||
if (tile == null) {
|
if (tile == null) {
|
||||||
switchDirection = OneWayPlayerInputWidget(this)
|
switchDirection = OneWayPlayerInputWidget(this)
|
||||||
|
maxIO.asClient()
|
||||||
} else {
|
} else {
|
||||||
switchDirection = OneWayPlayerInputWidget(this) {
|
switchDirection = OneWayPlayerInputWidget(this) {
|
||||||
tile.level?.setBlock(tile.blockPos, tile.blockState.setValue(BlockEnergyCounter.INPUT_DIRECTION, tile.blockState.getValue(BlockEnergyCounter.INPUT_DIRECTION).opposite), Block.UPDATE_ALL)
|
tile.level?.setBlock(tile.blockPos, tile.blockState.setValue(BlockEnergyCounter.INPUT_DIRECTION, tile.blockState.getValue(BlockEnergyCounter.INPUT_DIRECTION).opposite), Block.UPDATE_ALL)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
maxIO.withSupplier {
|
||||||
|
return@withSupplier if (tile.ioLimit == null) MINUS_ONE else tile.ioLimit!!.toBigDecmial()
|
||||||
|
}.withConsumer {
|
||||||
|
if (it.signum() < 0) {
|
||||||
|
tile.ioLimit = null
|
||||||
|
} else {
|
||||||
|
tile.ioLimit = ImpreciseFraction(it)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
addDataContainer(passed)
|
addDataContainer(passed)
|
||||||
@ -67,4 +83,8 @@ class MenuEnergyCounter @JvmOverloads constructor(
|
|||||||
override fun getWorkingSlotEnd(): Int {
|
override fun getWorkingSlotEnd(): Int {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
private val MINUS_ONE = -BigDecimal.ONE
|
||||||
|
}
|
||||||
}
|
}
|
@ -0,0 +1,93 @@
|
|||||||
|
package ru.dbotthepony.mc.otm.menu.widget
|
||||||
|
|
||||||
|
import net.minecraft.network.FriendlyByteBuf
|
||||||
|
import net.minecraftforge.network.NetworkEvent
|
||||||
|
import ru.dbotthepony.mc.otm.menu.MatteryMenu
|
||||||
|
import ru.dbotthepony.mc.otm.menu.data.BigDecimalDataContainer
|
||||||
|
import ru.dbotthepony.mc.otm.network.MatteryNetworking
|
||||||
|
import ru.dbotthepony.mc.otm.network.NetworkHelper
|
||||||
|
import java.math.BigDecimal
|
||||||
|
import java.util.function.Supplier
|
||||||
|
|
||||||
|
class NumberPlayerInputPacket(val id: Int, val value: BigDecimal) {
|
||||||
|
fun play(context: Supplier<NetworkEvent.Context>) {
|
||||||
|
context.get().packetHandled = true
|
||||||
|
|
||||||
|
context.get().enqueueWork {
|
||||||
|
((context.get().sender?.containerMenu as? MatteryMenu)?.getWidget(id) as? NumberPlayerInputWidget)?.userInput(value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun write(buff: FriendlyByteBuf) {
|
||||||
|
buff.writeInt(id)
|
||||||
|
NetworkHelper.writeDecimal(buff, value)
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
fun read(buff: FriendlyByteBuf): NumberPlayerInputPacket {
|
||||||
|
return NumberPlayerInputPacket(buff.readInt(), NetworkHelper.readDecimal(buff))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class NumberPlayerInputWidget(menu: MatteryMenu) : AbstractWidget(menu) {
|
||||||
|
private val container = BigDecimalDataContainer()
|
||||||
|
val value by container::value
|
||||||
|
|
||||||
|
var supplier: (() -> BigDecimal)? = null
|
||||||
|
var consumer: ((BigDecimal) -> Unit)? = null
|
||||||
|
var minValue: BigDecimal? = null
|
||||||
|
var maxValue: BigDecimal? = null
|
||||||
|
|
||||||
|
init {
|
||||||
|
addDataContainer(container)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun withSupplier(func: () -> BigDecimal): NumberPlayerInputWidget {
|
||||||
|
supplier = func
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
fun withConsumer(func: (BigDecimal) -> Unit): NumberPlayerInputWidget {
|
||||||
|
consumer = func
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
fun asClient(): NumberPlayerInputWidget {
|
||||||
|
supplier = null
|
||||||
|
|
||||||
|
consumer = {
|
||||||
|
MatteryNetworking.CHANNEL.sendToServer(NumberPlayerInputPacket(slotID, it))
|
||||||
|
}
|
||||||
|
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
fun userInput(newValue: BigDecimal) {
|
||||||
|
val consumer = consumer
|
||||||
|
|
||||||
|
if (consumer != null) {
|
||||||
|
@Suppress("name_shadowing")
|
||||||
|
var newValue = newValue
|
||||||
|
|
||||||
|
if (minValue != null) {
|
||||||
|
newValue = newValue.max(minValue!!)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (maxValue != null) {
|
||||||
|
newValue = newValue.min(maxValue!!)
|
||||||
|
}
|
||||||
|
|
||||||
|
consumer.invoke(newValue)
|
||||||
|
updateServer()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun updateServer() {
|
||||||
|
val supplier = supplier
|
||||||
|
|
||||||
|
if (supplier != null) {
|
||||||
|
container.value = supplier.invoke()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -190,6 +190,7 @@
|
|||||||
"block.overdrive_that_matters.energy_counter": "Energy Counter",
|
"block.overdrive_that_matters.energy_counter": "Energy Counter",
|
||||||
"block.overdrive_that_matters.energy_counter.facing": "Input facing: %s",
|
"block.overdrive_that_matters.energy_counter.facing": "Input facing: %s",
|
||||||
"block.overdrive_that_matters.energy_counter.switch": "Switch input facing",
|
"block.overdrive_that_matters.energy_counter.switch": "Switch input facing",
|
||||||
|
"block.overdrive_that_matters.energy_counter.limit": "I/O Limit. -1 means no limit",
|
||||||
|
|
||||||
"block.overdrive_that_matters.chemical_generator": "Chemical Generator",
|
"block.overdrive_that_matters.chemical_generator": "Chemical Generator",
|
||||||
"block.overdrive_that_matters.drive_rack": "Condensation Drive Rack",
|
"block.overdrive_that_matters.drive_rack": "Condensation Drive Rack",
|
||||||
|
Loading…
Reference in New Issue
Block a user