Skip to content

Commit 4bf5eef

Browse files
committed
Formatting
1 parent a2a183f commit 4bf5eef

File tree

24 files changed

+226
-340
lines changed

24 files changed

+226
-340
lines changed
Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
{
22
"variants": {
3-
"": {
3+
"top=false": {
44
"model": "moderndynamics:block/machine_extender"
5+
},
6+
"top=true": {
7+
"model": "moderndynamics:block/machine_extender_top"
58
}
69
}
710
}
Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
{
2-
"parent": "minecraft:block/cube_all",
2+
"parent": "minecraft:block/cube_column",
33
"textures": {
4-
"all": "moderndynamics:block/machine_extender"
4+
"end": "moderndynamics:block/machine_extender_column",
5+
"side": "moderndynamics:block/machine_extender_side"
56
}
67
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"parent": "minecraft:block/cube_bottom_top",
3+
"textures": {
4+
"bottom": "moderndynamics:block/machine_extender_column",
5+
"side": "moderndynamics:block/machine_extender_side_top",
6+
"top": "moderndynamics:block/machine_extender_end"
7+
}
8+
}

src/generated/resources/assets/moderndynamics/models/item/debug_tool.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"parent": "minecraft:item/generated",
2+
"parent": "minecraft:item/handheld",
33
"textures": {
44
"layer0": "moderndynamics:item/debug_tool"
55
}

src/generated/resources/assets/moderndynamics/models/item/wrench.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"parent": "minecraft:item/generated",
2+
"parent": "minecraft:item/handheld",
33
"textures": {
44
"layer0": "moderndynamics:item/wrench"
55
}

src/main/java/dev/technici4n/moderndynamics/MdBlockEntity.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,8 @@ protected void loadAdditional(ValueInput input) {
100100
@Override
101101
protected void saveAdditional(ValueOutput output) {
102102
super.saveAdditional(output);
103+
104+
toTag(output);
103105
}
104106

105107
public final void remesh() {

src/main/java/dev/technici4n/moderndynamics/attachment/attached/FluidAttachedIo.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040

4141
// TODO: also allow nbt filtering
4242
public class FluidAttachedIo extends AttachedIo {
43-
private static final Codec<List<FluidResource>> FILTER_LIST_CODEC = FluidResource.CODEC.listOf(0, Constants.Upgrades.MAX_FILTER);
43+
private static final Codec<List<FluidResource>> FILTER_LIST_CODEC = FluidResource.OPTIONAL_CODEC.listOf(0, Constants.Upgrades.MAX_FILTER);
4444

4545
private final NonNullList<FluidResource> filters;
4646
@Nullable

src/main/java/dev/technici4n/moderndynamics/attachment/attached/ItemAttachedIo.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@
5858

5959
public class ItemAttachedIo extends AttachedIo {
6060

61-
private static final Codec<List<ItemResource>> FILTER_LIST_CODEC = ItemResource.CODEC.listOf(0, Constants.Upgrades.MAX_FILTER);
61+
private static final Codec<List<ItemResource>> FILTER_LIST_CODEC = ItemResource.OPTIONAL_CODEC.listOf(0, Constants.Upgrades.MAX_FILTER);
6262

6363
private final Map<ItemResource, Integer> stuffedItems = new LinkedHashMap<>();
6464
private int roundRobinIndex;
@@ -90,16 +90,21 @@ public class ItemAttachedIo extends AttachedIo {
9090

9191
record StuffedEntry(ItemResource item, int amount) {
9292
public static final Codec<StuffedEntry> CODEC = RecordCodecBuilder.create(builder -> builder.group(
93-
ItemResource.CODEC.fieldOf("v").forGetter(StuffedEntry::item),
93+
ItemResource.OPTIONAL_CODEC.fieldOf("r").forGetter(StuffedEntry::item),
9494
Codec.INT.fieldOf("a").forGetter(StuffedEntry::amount)).apply(builder, StuffedEntry::new));
9595
}
9696

9797
public ItemAttachedIo(IoAttachmentItem item, ValueInput configData, Runnable setChangedCallback) {
9898
super(item, configData, setChangedCallback);
9999

100100
this.filters = NonNullList.withSize(Constants.Upgrades.MAX_FILTER, ItemResource.EMPTY);
101-
var filterTags = configData.read("filters", FILTER_LIST_CODEC);
102-
filterTags.ifPresent(filters::addAll);
101+
configData.read("filters", FILTER_LIST_CODEC).ifPresent(filterList -> {
102+
for (int i = 0; i < filterList.size(); i++) {
103+
if (i < filters.size()) {
104+
filters.set(i, filterList.get(i));
105+
}
106+
}
107+
});
103108

104109
this.filterDamage = readEnum(FilterDamageMode.values(), configData, "filterDamage", FilterDamageMode.RESPECT_DAMAGE);
105110
this.filterNbt = readEnum(FilterNbtMode.values(), configData, "filterNbt", FilterNbtMode.RESPECT_NBT);

src/main/java/dev/technici4n/moderndynamics/client/ModernDynamicsClient.java

Lines changed: 61 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
*/
1919
package dev.technici4n.moderndynamics.client;
2020

21+
import com.mojang.blaze3d.vertex.PoseStack;
2122
import dev.technici4n.moderndynamics.attachment.RenderedAttachment;
2223
import dev.technici4n.moderndynamics.client.ber.PipeBlockEntityRenderer;
2324
import dev.technici4n.moderndynamics.client.model.PipeBlockstateModel;
@@ -31,14 +32,26 @@
3132
import dev.technici4n.moderndynamics.packets.SetAttachmentUpgrades;
3233
import dev.technici4n.moderndynamics.packets.SetFluidVariant;
3334
import dev.technici4n.moderndynamics.packets.SetItemVariant;
35+
import dev.technici4n.moderndynamics.pipe.PipeBlock;
36+
import dev.technici4n.moderndynamics.pipe.PipeBlockEntity;
37+
import dev.technici4n.moderndynamics.pipe.PipeBoundingBoxes;
3438
import dev.technici4n.moderndynamics.util.MdId;
3539
import java.util.HashMap;
3640
import java.util.Map;
3741
import net.minecraft.client.Minecraft;
42+
import net.minecraft.client.renderer.MultiBufferSource;
43+
import net.minecraft.client.renderer.ShapeRenderer;
44+
import net.minecraft.client.renderer.rendertype.RenderTypes;
45+
import net.minecraft.client.renderer.state.BlockOutlineRenderState;
46+
import net.minecraft.client.renderer.state.LevelRenderState;
47+
import net.minecraft.core.Direction;
3848
import net.minecraft.resources.Identifier;
49+
import net.minecraft.util.ARGB;
50+
import net.minecraft.world.phys.HitResult;
3951
import net.neoforged.api.distmarker.Dist;
4052
import net.neoforged.bus.api.IEventBus;
4153
import net.neoforged.fml.common.Mod;
54+
import net.neoforged.neoforge.client.CustomBlockOutlineRenderer;
4255
import net.neoforged.neoforge.client.event.ClientTickEvent;
4356
import net.neoforged.neoforge.client.event.EntityRenderersEvent;
4457
import net.neoforged.neoforge.client.event.ExtractBlockOutlineRenderStateEvent;
@@ -118,43 +131,53 @@ private void registerRenderers(EntityRenderersEvent.RegisterRenderers evt) {
118131
* Highlights only the pipe attachment when it's under the mouse cursor to indicate it has special interactions.
119132
*/
120133
private static void renderPipeAttachmentOutline(ExtractBlockOutlineRenderStateEvent evt) {
121-
// TODO 26.1var level = Minecraft.getInstance().level;
122-
// TODO 26.1var poseStack = evt.getPoseStack();
123-
// TODO 26.1var buffers = evt.getMultiBufferSource();
124-
// TODO 26.1var camera = evt.getCamera();
125-
// TODO 26.1if (level == null) {
126-
// TODO 26.1 return;
127-
// TODO 26.1}
128-
// TODO 26.1
129-
// TODO 26.1var blockHitResult = evt.getTarget();
130-
// TODO 26.1if (blockHitResult.getType() != HitResult.Type.BLOCK) {
131-
// TODO 26.1 return;
132-
// TODO 26.1}
133-
// TODO 26.1
134-
// TODO 26.1var pos = blockHitResult.getBlockPos();
135-
// TODO 26.1var blockState = level.getBlockState(pos);
136-
// TODO 26.1if (blockState.getBlock() instanceof PipeBlock) {
137-
// TODO 26.1
138-
// TODO 26.1 var be = level.getBlockEntity(pos);
139-
// TODO 26.1 if (be instanceof PipeBlockEntity pipe) {
140-
// TODO 26.1 var hitPosInBlock = Minecraft.getInstance().hitResult.getLocation();
141-
// TODO 26.1 hitPosInBlock = hitPosInBlock.subtract(pos.getX(), pos.getY(), pos.getZ());
142-
// TODO 26.1
143-
// TODO 26.1 var hitSide = pipe.hitTestAttachments(hitPosInBlock);
144-
// TODO 26.1 if (hitSide != null) {
145-
// TODO 26.1 LevelRenderer.renderShape(
146-
// TODO 26.1 poseStack,
147-
// TODO 26.1 buffers.getBuffer(RenderType.lines()),
148-
// TODO 26.1 PipeBoundingBoxes.CONNECTOR_SHAPES[hitSide.ordinal()],
149-
// TODO 26.1 (double) pos.getX() - camera.getPosition().x,
150-
// TODO 26.1 (double) pos.getY() - camera.getPosition().y,
151-
// TODO 26.1 (double) pos.getZ() - camera.getPosition().z,
152-
// TODO 26.1 0.0F,
153-
// TODO 26.1 0.0F,
154-
// TODO 26.1 0.0F,
155-
// TODO 26.1 0.4F);
156-
// TODO 26.1 evt.setCanceled(true);
157-
// TODO 26.1 }
158-
// TODO 26.1 }
134+
var level = Minecraft.getInstance().level;
135+
var camera = evt.getCamera();
136+
if (level == null) {
137+
return;
138+
}
139+
140+
var blockHitResult = evt.getHitResult();
141+
if (blockHitResult.getType() != HitResult.Type.BLOCK) {
142+
return;
143+
}
144+
145+
if (evt.getBlockState().getBlock() instanceof PipeBlock) {
146+
var pos = evt.getBlockPos();
147+
var be = level.getBlockEntity(pos);
148+
if (be instanceof PipeBlockEntity pipe) {
149+
var hitPosInBlock = Minecraft.getInstance().hitResult.getLocation();
150+
hitPosInBlock = hitPosInBlock.subtract(pos.getX(), pos.getY(), pos.getZ());
151+
152+
var hitSide = pipe.hitTestAttachments(hitPosInBlock);
153+
if (hitSide != null) {
154+
evt.getCustomRenderers().add(new OutlineRenderer(
155+
hitSide,
156+
(pos.getX() - camera.position().x),
157+
(pos.getY() - camera.position().y),
158+
(pos.getZ() - camera.position().z)));
159+
}
160+
}
161+
}
162+
}
163+
164+
record OutlineRenderer(Direction hitSide, double x, double y, double z) implements CustomBlockOutlineRenderer {
165+
@Override
166+
public boolean render(BlockOutlineRenderState renderState,
167+
MultiBufferSource.BufferSource buffer,
168+
PoseStack poseStack,
169+
boolean translucentPass,
170+
LevelRenderState levelRenderState) {
171+
ShapeRenderer.renderShape(
172+
poseStack,
173+
buffer.getBuffer(RenderTypes.lines()),
174+
PipeBoundingBoxes.CONNECTOR_SHAPES[hitSide.ordinal()],
175+
x,
176+
y,
177+
z,
178+
ARGB.black(0.4F),
179+
7);
180+
return true;
181+
}
159182
}
160183
}

src/main/java/dev/technici4n/moderndynamics/client/screen/AttachedIoScreen.java

Lines changed: 21 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import net.minecraft.client.gui.components.events.GuiEventListener;
3838
import net.minecraft.client.gui.narration.NarratableEntry;
3939
import net.minecraft.client.gui.narration.NarrationElementOutput;
40+
import net.minecraft.client.gui.navigation.ScreenRectangle;
4041
import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen;
4142
import net.minecraft.client.input.MouseButtonEvent;
4243
import net.minecraft.client.renderer.Rect2i;
@@ -61,10 +62,10 @@ public class AttachedIoScreen<T extends AttachedIoMenu<?>> extends AbstractConta
6162
*/
6263
private static final int TAB_BORDER = 4;
6364

64-
private static final float TAB_OPEN_PER_TICK = 0.20f;
65+
private static final float TAB_OPEN_PER_TICK = 0.25f;
6566

6667
public static final Identifier TEXTURE = MdId.of("textures/gui/attachment.png");
67-
public static final Identifier TAB_RIGHT_TEXTURE = MdId.of("textures/gui/tab_right.png");
68+
public static final Identifier TAB_RIGHT_TEXTURE = MdId.of("tab_right");
6869

6970
private boolean redstoneTabOpen;
7071
private float redstoneTabCurrentOpen;
@@ -209,45 +210,17 @@ private void renderRedstoneTabBg(GuiGraphics guiGraphics, float partialTicks) {
209210

210211
updateRedstoneTabRect(partialTicks);
211212

212-
// The background image is treated as a border image,
213-
// for context see https://developer.mozilla.org/en-US/docs/Web/CSS/border-image
214-
// The border is assumed to be 4 PX
215-
216213
var tabX = redstoneTabRect.getX();
217214
var tabY = redstoneTabRect.getY();
218215
var tabWidth = redstoneTabRect.getWidth();
219216
var tabHeight = redstoneTabRect.getHeight();
220217

221-
var tabRight = tabX + tabWidth;
222-
var tabBottom = tabY + tabHeight;
223-
224218
var color = ARGB.colorFromFloat(1.0f, 0.81f, 0.14f, 0.04f);
225219

226-
// Draw all four corners clock-wise starting from top-left
227-
guiGraphics.blit(RenderPipelines.GUI_TEXTURED, TAB_RIGHT_TEXTURE, tabX, tabY, 0, 0, TAB_BORDER, TAB_BORDER, 256, 256, color);
228-
guiGraphics.blit(RenderPipelines.GUI_TEXTURED, TAB_RIGHT_TEXTURE, tabRight - TAB_BORDER, tabY, 256 - TAB_BORDER, 0, TAB_BORDER, TAB_BORDER,
229-
256, 256, color);
230-
guiGraphics.blit(RenderPipelines.GUI_TEXTURED, TAB_RIGHT_TEXTURE, tabRight - TAB_BORDER, tabBottom - TAB_BORDER, 256 - TAB_BORDER,
231-
256 - TAB_BORDER, TAB_BORDER, TAB_BORDER, 256, 256, color);
232-
guiGraphics.blit(RenderPipelines.GUI_TEXTURED, TAB_RIGHT_TEXTURE, tabX, tabBottom - TAB_BORDER, 0, 256 - TAB_BORDER, TAB_BORDER, TAB_BORDER,
233-
256, 256, color);
234-
235-
// Draw the borders between the corners in the same order
236-
guiGraphics.blit(RenderPipelines.GUI_TEXTURED, TAB_RIGHT_TEXTURE, tabX + TAB_BORDER, tabY, tabWidth - 2 * TAB_BORDER, TAB_BORDER, TAB_BORDER,
237-
0, 256 - 2 * TAB_BORDER, TAB_BORDER, 256, 256, color);
238-
guiGraphics.blit(RenderPipelines.GUI_TEXTURED, TAB_RIGHT_TEXTURE, tabRight - TAB_BORDER, tabY + TAB_BORDER, TAB_BORDER,
239-
tabHeight - 2 * TAB_BORDER, 256 - TAB_BORDER, TAB_BORDER, TAB_BORDER, 256 - 2 * TAB_BORDER, 256, 256, color);
240-
guiGraphics.blit(RenderPipelines.GUI_TEXTURED, TAB_RIGHT_TEXTURE, tabX + TAB_BORDER, tabBottom - TAB_BORDER, tabWidth - 2 * TAB_BORDER,
241-
TAB_BORDER, TAB_BORDER, 256 - TAB_BORDER, 256 - 2 * TAB_BORDER, TAB_BORDER, 256, 256, color);
242-
guiGraphics.blit(RenderPipelines.GUI_TEXTURED, TAB_RIGHT_TEXTURE, tabX, tabY + TAB_BORDER, TAB_BORDER, tabHeight - 2 * TAB_BORDER, 0,
243-
TAB_BORDER, TAB_BORDER, 256 - 2 * TAB_BORDER, 256, 256, color);
244-
245-
// Center
246-
guiGraphics.blit(RenderPipelines.GUI_TEXTURED, TAB_RIGHT_TEXTURE, tabX + TAB_BORDER, tabY + TAB_BORDER, TAB_BORDER, TAB_BORDER,
247-
tabWidth - 2 * TAB_BORDER, tabHeight - 2 * TAB_BORDER, 256, 256, color);
220+
guiGraphics.blitSprite(RenderPipelines.GUI_TEXTURED, TAB_RIGHT_TEXTURE, tabX, tabY, tabWidth, tabHeight, color);
248221

249222
var scissorRect = getRedstoneTabScissorRect();
250-
guiGraphics.enableScissor(scissorRect.getX(), scissorRect.getY(), scissorRect.getWidth(), scissorRect.getHeight());
223+
guiGraphics.enableScissor(scissorRect.left(), scissorRect.top(), scissorRect.right(), scissorRect.bottom());
251224
// Tell the buttons the scissor rect since they need to be cut off too
252225
redstoneModeIgnored.setScissorRect(scissorRect);
253226
redstoneModeLow.setScissorRect(scissorRect);
@@ -268,23 +241,23 @@ private void renderRedstoneTabBg(GuiGraphics guiGraphics, float partialTicks) {
268241
tabY + 3);
269242

270243
var header = Component.translatable("gui.moderndynamics.setting.redstone_control.header");
271-
guiGraphics.drawString(font, header, tabX + TAB_BORDER + 16, tabY + TAB_BORDER + 4, 0xe1c92f);
244+
guiGraphics.drawString(font, header, tabX + TAB_BORDER + 16, tabY + TAB_BORDER + 4, 0xffe1c92f);
272245

273246
/* Draw a sub-header that indicates whether the attachment is currently operating based on the status or not */
274247
var subHeaderStatus = Component.translatable("gui.moderndynamics.setting.redstone_control.status_header");
275-
guiGraphics.drawString(font, subHeaderStatus, tabX + TAB_BORDER + 4, tabY + TAB_BORDER + 42, 0xaaafb8);
248+
guiGraphics.drawString(font, subHeaderStatus, tabX + TAB_BORDER + 4, tabY + TAB_BORDER + 42, 0xffaaafb8);
276249
Component enabledStatusText;
277250
if (menu.isEnabledViaRedstone()) {
278251
enabledStatusText = Component.translatable("gui.moderndynamics.setting.redstone_control.enabled");
279252
} else {
280253
enabledStatusText = Component.translatable("gui.moderndynamics.setting.redstone_control.disabled");
281254
}
282-
guiGraphics.drawString(font, enabledStatusText, tabX + TAB_BORDER + 12, tabY + TAB_BORDER + 54, 0, false);
255+
guiGraphics.drawString(font, enabledStatusText, tabX + TAB_BORDER + 12, tabY + TAB_BORDER + 54, 0xff000000, false);
283256

284257
/* Draw a sub-header that simply spells out the currently chosen redstone mode again */
285258
var subHeaderSetting = Component.translatable("gui.moderndynamics.setting.redstone_control.signal_required_header");
286-
guiGraphics.drawString(font, subHeaderSetting, tabX + TAB_BORDER + 4, tabY + TAB_BORDER + 66, 0xaaafb8);
287-
guiGraphics.drawString(font, menu.getRedstoneMode().getTranslation(), tabX + TAB_BORDER + 12, tabY + TAB_BORDER + 78, 0, false);
259+
guiGraphics.drawString(font, subHeaderSetting, tabX + TAB_BORDER + 4, tabY + TAB_BORDER + 66, 0xffaaafb8);
260+
guiGraphics.drawString(font, menu.getRedstoneMode().getTranslation(), tabX + TAB_BORDER + 12, tabY + TAB_BORDER + 78, 0xff000000, false);
288261

289262
guiGraphics.disableScissor();
290263
}
@@ -316,17 +289,14 @@ private void updateRedstoneTabRect(float partialTicks) {
316289
}
317290
}
318291

319-
private Rect2i getRedstoneTabScissorRect() {
292+
private ScreenRectangle getRedstoneTabScissorRect() {
320293
var tabRect = redstoneTabRect;
321294

322-
// Scissor rect is in physical window coordinates not the rescaled UI space
323-
double scale = this.minecraft.getWindow().getGuiScale();
324-
return new Rect2i(
325-
(int) ((tabRect.getX() + TAB_BORDER) * scale),
326-
// glScissor has y=0 at the bottom of the screen
327-
(int) ((height - (tabRect.getY() + tabRect.getHeight() - TAB_BORDER)) * scale),
328-
(int) ((tabRect.getWidth() - 2 * TAB_BORDER) * scale),
329-
(int) ((tabRect.getHeight() - 2 * TAB_BORDER) * scale));
295+
return new ScreenRectangle(
296+
tabRect.getX() + TAB_BORDER,
297+
tabRect.getY() + TAB_BORDER,
298+
tabRect.getWidth() - 2 * TAB_BORDER,
299+
tabRect.getHeight() - 2 * TAB_BORDER);
330300
}
331301

332302
private float getCurrentRedstoneTabOpen(float partialTicks) {
@@ -387,6 +357,11 @@ public boolean mouseClicked(MouseButtonEvent event, boolean doubleClick) {
387357
return false;
388358
}
389359

360+
@Override
361+
public boolean isMouseOver(double mouseX, double mouseY) {
362+
return isInRedstoneTabRect(mouseX, mouseY);
363+
}
364+
390365
@Override
391366
public NarrationPriority narrationPriority() {
392367
return NarrationPriority.NONE;

0 commit comments

Comments
 (0)