Skip to content

Smoke particles on blocked pipe pistons - #1381

Open
RasmusKD wants to merge 2 commits into
EngineHub:masterfrom
RasmusKD:pipe-blocked-smoke
Open

Smoke particles on blocked pipe pistons#1381
RasmusKD wants to merge 2 commits into
EngineHub:masterfrom
RasmusKD:pipe-blocked-smoke

Conversation

@RasmusKD

Copy link
Copy Markdown
Contributor

A blocked pipe system is invisible from the outside: pulses arrive, nothing moves, and finding the stuck piston means watching every piston at the exact moment a pulse happens.

A pull that is refused everywhere now marks the piston blocked, and a repeating task (every 12 ticks) keeps it visibly smoking. The next pull that delivers anything clears the flag, and the flag is also dropped when the piston or its source container is removed. The pulse-time puff is throttled per piston so fast clocks read as a steady chimney rather than a particle storm.

Gated by 'full-pipe-smoke' (default on). Same pull-loop area as #1376/#1378/#1380, happy to rebase whichever lands last.

A blocked pipe system is invisible from the outside: pulses arrive,
nothing moves, and finding the stuck piston means watching every one of
them at the moment a pulse happens. A pull that is refused everywhere
now marks the piston blocked and a repeating task keeps it smoking, so
a stuck system can be found by looking at it. The next pull that
delivers clears the flag, and the flag is dropped when the piston or
its source container is removed. Gated by 'full-pipe-smoke' (default
on).
@me4502

Copy link
Copy Markdown
Member

How does this interact with the round robin PR? My assumption is that doing this round-robin would alleviate "stuck" pipes for the most part – so what "defines" stuck in those cases?

@RasmusKD

Copy link
Copy Markdown
ContributorAuthor

They compose pretty well. Blocked here means a pull happened and every item came back, and any delivering pull clears it. With round robin an unroutable stack only causes one refused pulse per rotation, so at most you get a short puff before the next delivery clears it. Steady smoke only happens when nothing in the container can go anywhere, outputs full or everything filtered out, which is exactly the case round robin can't help with.

If both land I can gate the persistent smoke on a full unproductive rotation instead of a single refused pull, so the one-slot case doesn't puff at all.

Emptying the container by hand left the piston smoking forever, since
the flag only cleared on a delivering pull. A pulse that finds nothing
to pull now clears it too, a pipe with nothing to move is not stuck.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@RasmusKD@me4502
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Smoke particles on blocked pipe pistons by RasmusKD · Pull Request #1381 · EngineHub/CraftBook · GitHub
Skip to content

Smoke particles on blocked pipe pistons - #1381

Open
RasmusKD wants to merge 2 commits into
EngineHub:masterfrom
RasmusKD:pipe-blocked-smoke
Open

Smoke particles on blocked pipe pistons#1381
RasmusKD wants to merge 2 commits into
EngineHub:masterfrom
RasmusKD:pipe-blocked-smoke

Conversation

@RasmusKD

Copy link
Copy Markdown
Contributor

A blocked pipe system is invisible from the outside: pulses arrive, nothing moves, and finding the stuck piston means watching every piston at the exact moment a pulse happens.

A pull that is refused everywhere now marks the piston blocked, and a repeating task (every 12 ticks) keeps it visibly smoking. The next pull that delivers anything clears the flag, and the flag is also dropped when the piston or its source container is removed. The pulse-time puff is throttled per piston so fast clocks read as a steady chimney rather than a particle storm.

Gated by 'full-pipe-smoke' (default on). Same pull-loop area as #1376/#1378/#1380, happy to rebase whichever lands last.

A blocked pipe system is invisible from the outside: pulses arrive,
nothing moves, and finding the stuck piston means watching every one of
them at the moment a pulse happens. A pull that is refused everywhere
now marks the piston blocked and a repeating task keeps it smoking, so
a stuck system can be found by looking at it. The next pull that
delivers clears the flag, and the flag is dropped when the piston or
its source container is removed. Gated by 'full-pipe-smoke' (default
on).
@me4502

Copy link
Copy Markdown
Member

How does this interact with the round robin PR? My assumption is that doing this round-robin would alleviate "stuck" pipes for the most part – so what "defines" stuck in those cases?

@RasmusKD

Copy link
Copy Markdown
ContributorAuthor

They compose pretty well. Blocked here means a pull happened and every item came back, and any delivering pull clears it. With round robin an unroutable stack only causes one refused pulse per rotation, so at most you get a short puff before the next delivery clears it. Steady smoke only happens when nothing in the container can go anywhere, outputs full or everything filtered out, which is exactly the case round robin can't help with.

If both land I can gate the persistent smoke on a full unproductive rotation instead of a single refused pull, so the one-slot case doesn't puff at all.

Emptying the container by hand left the piston smoking forever, since
the flag only cleared on a delivering pull. A pulse that finds nothing
to pull now clears it too, a pipe with nothing to move is not stuck.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@RasmusKD@me4502
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Smoke particles on blocked pipe pistons by RasmusKD · Pull Request #1381 · EngineHub/CraftBook · GitHub
Skip to content

Smoke particles on blocked pipe pistons - #1381

Open
RasmusKD wants to merge 2 commits into
EngineHub:masterfrom
RasmusKD:pipe-blocked-smoke
Open

Smoke particles on blocked pipe pistons#1381
RasmusKD wants to merge 2 commits into
EngineHub:masterfrom
RasmusKD:pipe-blocked-smoke

Conversation

@RasmusKD

Copy link
Copy Markdown
Contributor

A blocked pipe system is invisible from the outside: pulses arrive, nothing moves, and finding the stuck piston means watching every piston at the exact moment a pulse happens.

A pull that is refused everywhere now marks the piston blocked, and a repeating task (every 12 ticks) keeps it visibly smoking. The next pull that delivers anything clears the flag, and the flag is also dropped when the piston or its source container is removed. The pulse-time puff is throttled per piston so fast clocks read as a steady chimney rather than a particle storm.

Gated by 'full-pipe-smoke' (default on). Same pull-loop area as #1376/#1378/#1380, happy to rebase whichever lands last.

A blocked pipe system is invisible from the outside: pulses arrive,
nothing moves, and finding the stuck piston means watching every one of
them at the moment a pulse happens. A pull that is refused everywhere
now marks the piston blocked and a repeating task keeps it smoking, so
a stuck system can be found by looking at it. The next pull that
delivers clears the flag, and the flag is dropped when the piston or
its source container is removed. Gated by 'full-pipe-smoke' (default
on).
@me4502

Copy link
Copy Markdown
Member

How does this interact with the round robin PR? My assumption is that doing this round-robin would alleviate "stuck" pipes for the most part – so what "defines" stuck in those cases?

@RasmusKD

Copy link
Copy Markdown
ContributorAuthor

They compose pretty well. Blocked here means a pull happened and every item came back, and any delivering pull clears it. With round robin an unroutable stack only causes one refused pulse per rotation, so at most you get a short puff before the next delivery clears it. Steady smoke only happens when nothing in the container can go anywhere, outputs full or everything filtered out, which is exactly the case round robin can't help with.

If both land I can gate the persistent smoke on a full unproductive rotation instead of a single refused pull, so the one-slot case doesn't puff at all.

Emptying the container by hand left the piston smoking forever, since
the flag only cleared on a delivering pull. A pulse that finds nothing
to pull now clears it too, a pipe with nothing to move is not stuck.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@RasmusKD@me4502
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Smoke particles on blocked pipe pistons by RasmusKD · Pull Request #1381 · EngineHub/CraftBook · GitHub
Skip to content

Smoke particles on blocked pipe pistons - #1381

Open
RasmusKD wants to merge 2 commits into
EngineHub:masterfrom
RasmusKD:pipe-blocked-smoke
Open

Smoke particles on blocked pipe pistons#1381
RasmusKD wants to merge 2 commits into
EngineHub:masterfrom
RasmusKD:pipe-blocked-smoke

Conversation

@RasmusKD

Copy link
Copy Markdown
Contributor

A blocked pipe system is invisible from the outside: pulses arrive, nothing moves, and finding the stuck piston means watching every piston at the exact moment a pulse happens.

A pull that is refused everywhere now marks the piston blocked, and a repeating task (every 12 ticks) keeps it visibly smoking. The next pull that delivers anything clears the flag, and the flag is also dropped when the piston or its source container is removed. The pulse-time puff is throttled per piston so fast clocks read as a steady chimney rather than a particle storm.

Gated by 'full-pipe-smoke' (default on). Same pull-loop area as #1376/#1378/#1380, happy to rebase whichever lands last.

A blocked pipe system is invisible from the outside: pulses arrive,
nothing moves, and finding the stuck piston means watching every one of
them at the moment a pulse happens. A pull that is refused everywhere
now marks the piston blocked and a repeating task keeps it smoking, so
a stuck system can be found by looking at it. The next pull that
delivers clears the flag, and the flag is dropped when the piston or
its source container is removed. Gated by 'full-pipe-smoke' (default
on).
@me4502

Copy link
Copy Markdown
Member

How does this interact with the round robin PR? My assumption is that doing this round-robin would alleviate "stuck" pipes for the most part – so what "defines" stuck in those cases?

@RasmusKD

Copy link
Copy Markdown
ContributorAuthor

They compose pretty well. Blocked here means a pull happened and every item came back, and any delivering pull clears it. With round robin an unroutable stack only causes one refused pulse per rotation, so at most you get a short puff before the next delivery clears it. Steady smoke only happens when nothing in the container can go anywhere, outputs full or everything filtered out, which is exactly the case round robin can't help with.

If both land I can gate the persistent smoke on a full unproductive rotation instead of a single refused pull, so the one-slot case doesn't puff at all.

Emptying the container by hand left the piston smoking forever, since
the flag only cleared on a delivering pull. A pulse that finds nothing
to pull now clears it too, a pipe with nothing to move is not stuck.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@RasmusKD@me4502
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' Smoke particles on blocked pipe pistons by RasmusKD · Pull Request #1381 · EngineHub/CraftBook · GitHub
Skip to content

Smoke particles on blocked pipe pistons - #1381

Open
RasmusKD wants to merge 2 commits into
EngineHub:masterfrom
RasmusKD:pipe-blocked-smoke
Open

Smoke particles on blocked pipe pistons#1381
RasmusKD wants to merge 2 commits into
EngineHub:masterfrom
RasmusKD:pipe-blocked-smoke

Conversation

@RasmusKD

Copy link
Copy Markdown
Contributor

A blocked pipe system is invisible from the outside: pulses arrive, nothing moves, and finding the stuck piston means watching every piston at the exact moment a pulse happens.

A pull that is refused everywhere now marks the piston blocked, and a repeating task (every 12 ticks) keeps it visibly smoking. The next pull that delivers anything clears the flag, and the flag is also dropped when the piston or its source container is removed. The pulse-time puff is throttled per piston so fast clocks read as a steady chimney rather than a particle storm.

Gated by 'full-pipe-smoke' (default on). Same pull-loop area as #1376/#1378/#1380, happy to rebase whichever lands last.

A blocked pipe system is invisible from the outside: pulses arrive,
nothing moves, and finding the stuck piston means watching every one of
them at the moment a pulse happens. A pull that is refused everywhere
now marks the piston blocked and a repeating task keeps it smoking, so
a stuck system can be found by looking at it. The next pull that
delivers clears the flag, and the flag is dropped when the piston or
its source container is removed. Gated by 'full-pipe-smoke' (default
on).
@me4502

Copy link
Copy Markdown
Member

How does this interact with the round robin PR? My assumption is that doing this round-robin would alleviate "stuck" pipes for the most part – so what "defines" stuck in those cases?

@RasmusKD

Copy link
Copy Markdown
ContributorAuthor

They compose pretty well. Blocked here means a pull happened and every item came back, and any delivering pull clears it. With round robin an unroutable stack only causes one refused pulse per rotation, so at most you get a short puff before the next delivery clears it. Steady smoke only happens when nothing in the container can go anywhere, outputs full or everything filtered out, which is exactly the case round robin can't help with.

If both land I can gate the persistent smoke on a full unproductive rotation instead of a single refused pull, so the one-slot case doesn't puff at all.

Emptying the container by hand left the piston smoking forever, since
the flag only cleared on a delivering pull. A pulse that finds nothing
to pull now clears it too, a pipe with nothing to move is not stuck.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@RasmusKD@me4502
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Smoke particles on blocked pipe pistons by RasmusKD · Pull Request #1381 · EngineHub/CraftBook · GitHub
Skip to content

Smoke particles on blocked pipe pistons - #1381

Open
RasmusKD wants to merge 2 commits into
EngineHub:masterfrom
RasmusKD:pipe-blocked-smoke
Open

Smoke particles on blocked pipe pistons#1381
RasmusKD wants to merge 2 commits into
EngineHub:masterfrom
RasmusKD:pipe-blocked-smoke

Conversation

@RasmusKD

Copy link
Copy Markdown
Contributor

A blocked pipe system is invisible from the outside: pulses arrive, nothing moves, and finding the stuck piston means watching every piston at the exact moment a pulse happens.

A pull that is refused everywhere now marks the piston blocked, and a repeating task (every 12 ticks) keeps it visibly smoking. The next pull that delivers anything clears the flag, and the flag is also dropped when the piston or its source container is removed. The pulse-time puff is throttled per piston so fast clocks read as a steady chimney rather than a particle storm.

Gated by 'full-pipe-smoke' (default on). Same pull-loop area as #1376/#1378/#1380, happy to rebase whichever lands last.

A blocked pipe system is invisible from the outside: pulses arrive,
nothing moves, and finding the stuck piston means watching every one of
them at the moment a pulse happens. A pull that is refused everywhere
now marks the piston blocked and a repeating task keeps it smoking, so
a stuck system can be found by looking at it. The next pull that
delivers clears the flag, and the flag is dropped when the piston or
its source container is removed. Gated by 'full-pipe-smoke' (default
on).
@me4502

Copy link
Copy Markdown
Member

How does this interact with the round robin PR? My assumption is that doing this round-robin would alleviate "stuck" pipes for the most part – so what "defines" stuck in those cases?

@RasmusKD

Copy link
Copy Markdown
ContributorAuthor

They compose pretty well. Blocked here means a pull happened and every item came back, and any delivering pull clears it. With round robin an unroutable stack only causes one refused pulse per rotation, so at most you get a short puff before the next delivery clears it. Steady smoke only happens when nothing in the container can go anywhere, outputs full or everything filtered out, which is exactly the case round robin can't help with.

If both land I can gate the persistent smoke on a full unproductive rotation instead of a single refused pull, so the one-slot case doesn't puff at all.

Emptying the container by hand left the piston smoking forever, since
the flag only cleared on a delivering pull. A pulse that finds nothing
to pull now clears it too, a pipe with nothing to move is not stuck.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@RasmusKD@me4502
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Smoke particles on blocked pipe pistons by RasmusKD · Pull Request #1381 · EngineHub/CraftBook · GitHub
Skip to content

Smoke particles on blocked pipe pistons - #1381

Open
RasmusKD wants to merge 2 commits into
EngineHub:masterfrom
RasmusKD:pipe-blocked-smoke
Open

Smoke particles on blocked pipe pistons#1381
RasmusKD wants to merge 2 commits into
EngineHub:masterfrom
RasmusKD:pipe-blocked-smoke

Conversation

@RasmusKD

Copy link
Copy Markdown
Contributor

A blocked pipe system is invisible from the outside: pulses arrive, nothing moves, and finding the stuck piston means watching every piston at the exact moment a pulse happens.

A pull that is refused everywhere now marks the piston blocked, and a repeating task (every 12 ticks) keeps it visibly smoking. The next pull that delivers anything clears the flag, and the flag is also dropped when the piston or its source container is removed. The pulse-time puff is throttled per piston so fast clocks read as a steady chimney rather than a particle storm.

Gated by 'full-pipe-smoke' (default on). Same pull-loop area as #1376/#1378/#1380, happy to rebase whichever lands last.

A blocked pipe system is invisible from the outside: pulses arrive,
nothing moves, and finding the stuck piston means watching every one of
them at the moment a pulse happens. A pull that is refused everywhere
now marks the piston blocked and a repeating task keeps it smoking, so
a stuck system can be found by looking at it. The next pull that
delivers clears the flag, and the flag is dropped when the piston or
its source container is removed. Gated by 'full-pipe-smoke' (default
on).
@me4502

Copy link
Copy Markdown
Member

How does this interact with the round robin PR? My assumption is that doing this round-robin would alleviate "stuck" pipes for the most part – so what "defines" stuck in those cases?

@RasmusKD

Copy link
Copy Markdown
ContributorAuthor

They compose pretty well. Blocked here means a pull happened and every item came back, and any delivering pull clears it. With round robin an unroutable stack only causes one refused pulse per rotation, so at most you get a short puff before the next delivery clears it. Steady smoke only happens when nothing in the container can go anywhere, outputs full or everything filtered out, which is exactly the case round robin can't help with.

If both land I can gate the persistent smoke on a full unproductive rotation instead of a single refused pull, so the one-slot case doesn't puff at all.

Emptying the container by hand left the piston smoking forever, since
the flag only cleared on a delivering pull. A pulse that finds nothing
to pull now clears it too, a pipe with nothing to move is not stuck.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@RasmusKD@me4502
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); Smoke particles on blocked pipe pistons by RasmusKD · Pull Request #1381 · EngineHub/CraftBook · GitHub
Skip to content

Smoke particles on blocked pipe pistons - #1381

Open
RasmusKD wants to merge 2 commits into
EngineHub:masterfrom
RasmusKD:pipe-blocked-smoke
Open

Smoke particles on blocked pipe pistons#1381
RasmusKD wants to merge 2 commits into
EngineHub:masterfrom
RasmusKD:pipe-blocked-smoke

Conversation

@RasmusKD

Copy link
Copy Markdown
Contributor

A blocked pipe system is invisible from the outside: pulses arrive, nothing moves, and finding the stuck piston means watching every piston at the exact moment a pulse happens.

A pull that is refused everywhere now marks the piston blocked, and a repeating task (every 12 ticks) keeps it visibly smoking. The next pull that delivers anything clears the flag, and the flag is also dropped when the piston or its source container is removed. The pulse-time puff is throttled per piston so fast clocks read as a steady chimney rather than a particle storm.

Gated by 'full-pipe-smoke' (default on). Same pull-loop area as #1376/#1378/#1380, happy to rebase whichever lands last.

A blocked pipe system is invisible from the outside: pulses arrive,
nothing moves, and finding the stuck piston means watching every one of
them at the moment a pulse happens. A pull that is refused everywhere
now marks the piston blocked and a repeating task keeps it smoking, so
a stuck system can be found by looking at it. The next pull that
delivers clears the flag, and the flag is dropped when the piston or
its source container is removed. Gated by 'full-pipe-smoke' (default
on).
@me4502

Copy link
Copy Markdown
Member

How does this interact with the round robin PR? My assumption is that doing this round-robin would alleviate "stuck" pipes for the most part – so what "defines" stuck in those cases?

@RasmusKD

Copy link
Copy Markdown
ContributorAuthor

They compose pretty well. Blocked here means a pull happened and every item came back, and any delivering pull clears it. With round robin an unroutable stack only causes one refused pulse per rotation, so at most you get a short puff before the next delivery clears it. Steady smoke only happens when nothing in the container can go anywhere, outputs full or everything filtered out, which is exactly the case round robin can't help with.

If both land I can gate the persistent smoke on a full unproductive rotation instead of a single refused pull, so the one-slot case doesn't puff at all.

Emptying the container by hand left the piston smoking forever, since
the flag only cleared on a delivering pull. A pulse that finds nothing
to pull now clears it too, a pipe with nothing to move is not stuck.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@RasmusKD@me4502