Seperate furnace recipes by furnace type, dynamically determine isAFuel for furnaces - #1344

Merged
me4502 merged 1 commit into
EngineHub:masterfrom
ANRAR4:master
Apr 25, 2025
Merged

Seperate furnace recipes by furnace type, dynamically determine isAFuel for furnaces#1344
me4502 merged 1 commit into
EngineHub:masterfrom
ANRAR4:master

Conversation

@ANRAR4

@ANRAR4ANRAR4 commented Mar 14, 2025

Copy link
Copy Markdown
Contributor

The changes replace the switch case statements for determining items smeltable and cookable inside a furnace as well as fuels for furnaces, which are used to check if an item can be put inside a furnace, with comparisons to lists of the available smelting/cooking/blastsmelting recipes or rather a check of the Material.isFuel method for fuels, as the hardcoded lists tend to be outdated (e. g. missing resin_clump in 1.21.4 and the upcoming recipe for leaves (to leaf_litter)).

These changes also add further tests to check the exclusion of items that should not be allowed into the specific type of furnace, although testing seems to be currently disabled.

* Precompute lists of all recipes available for furnace, blast_furnace and smoker/campfire
*
*/
public static void setupSmeltableItemLists() {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We used to do this, but it caused some very major issues. Servers stalling on startup, various versions of Spigot where large numbers of recipes were missing (and therefore things worked very unreliably), etc.

My understanding is the stability of the recipe API has only gotten worse over time, so these issues are likely more of a problem than ever. I'm not sure this is something worth doing due to this.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In my limited testing (on paper and spigot with versions 1.21.3 and 1.21.4) it worked, but i of course don't know if it will work in all cases.
When was a dynamic solution last used?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i don't recall specifically the last time, but it's been tried many times in the past. it works in some instances, but significantly reduces the stability of the plugin, making it really a non-starter

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So is there further testing I could do to check the reliability? (i. e. do you remember configurations that caused problems?)
Or if not has my other pr (#1345) a chance of beeing merged? (which would require it to be rewritten)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry, 1.21.5 has taken priority from reviewing any existing stuff

I'd be much more comfortable if this PR didn't contain the dynamic stuff via the recipe iterator, and then if you wanted to put that through as its own separate PR we could discuss it there

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This pr refering to #1344 and the isFuel check, fixing of isFurnacable spelling and seperation of furnaceable and blastable recipes?
Should this also include the addition of resin_clumb and leaves -> leaf_litter?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, that one- although the spelling change is probably worth skipping. Both are technically valid (unsure if that’s a english variant thing or not), and it’s not really worth the API break for a small change like spelling

isFuel, blastable separation, and those additions all sound like changes that should be pretty easily mergeable- thanks :)

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I updated the pr
Although compiling/merging would require the dependencies in build.gradle to be updated as well which i was unable to do

if (recipe instanceof FurnaceRecipe) {
smeltableItems.put(((FurnaceRecipe)recipe).getInput().getType(), ((FurnaceRecipe)recipe).getResult());
}
else if (recipe instanceof BlastingRecipe) {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please make sure to follow the style standards

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Refering to the line wrapping?
Does the second commit fix this issue?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i was referring to the

if {
}
else

rather than

if {
} else {

we follow the Oracle Java Conventions, https://www.oracle.com/docs/tech/java/codeconventions.pdf

Comment threadsrc/main/java/com/sk89q/craftbook/util/ItemUtil.java
@ANRAR4

ANRAR4 commented Mar 15, 2025

Copy link
Copy Markdown
ContributorAuthor

I forgot to add all choices of smelting recipes with a taglist as input (e. g. #minecraft:logs_that_burn -> charcoal).
Now the lists of accepted items are identical, exept i noticed the switch case was also missing deepslate_coal_ore -> coal.
I also added line wrapping for lines around 120 characters.

@ANRAR4ANRAR4 changed the title Determine smeltable items and fuels dynamically (for pipes inputting items into furnaces)Seperate furnace recipes by furnace type, dynamically determine isAFuel for furnacesMar 30, 2025
@me4502
me4502 merged commit e2a7b40 into EngineHub:masterApr 25, 2025
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

@ANRAR4@me4502
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n 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;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Seperate furnace recipes by furnace type, dynamically determine isAFuel for furnaces - #1344

Merged
me4502 merged 1 commit into
EngineHub:masterfrom
ANRAR4:master
Apr 25, 2025
Merged

Seperate furnace recipes by furnace type, dynamically determine isAFuel for furnaces#1344
me4502 merged 1 commit into
EngineHub:masterfrom
ANRAR4:master

Conversation

@ANRAR4

@ANRAR4ANRAR4 commented Mar 14, 2025

Copy link
Copy Markdown
Contributor

The changes replace the switch case statements for determining items smeltable and cookable inside a furnace as well as fuels for furnaces, which are used to check if an item can be put inside a furnace, with comparisons to lists of the available smelting/cooking/blastsmelting recipes or rather a check of the Material.isFuel method for fuels, as the hardcoded lists tend to be outdated (e. g. missing resin_clump in 1.21.4 and the upcoming recipe for leaves (to leaf_litter)).

These changes also add further tests to check the exclusion of items that should not be allowed into the specific type of furnace, although testing seems to be currently disabled.

* Precompute lists of all recipes available for furnace, blast_furnace and smoker/campfire
*
*/
public static void setupSmeltableItemLists() {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We used to do this, but it caused some very major issues. Servers stalling on startup, various versions of Spigot where large numbers of recipes were missing (and therefore things worked very unreliably), etc.

My understanding is the stability of the recipe API has only gotten worse over time, so these issues are likely more of a problem than ever. I'm not sure this is something worth doing due to this.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In my limited testing (on paper and spigot with versions 1.21.3 and 1.21.4) it worked, but i of course don't know if it will work in all cases.
When was a dynamic solution last used?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i don't recall specifically the last time, but it's been tried many times in the past. it works in some instances, but significantly reduces the stability of the plugin, making it really a non-starter

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So is there further testing I could do to check the reliability? (i. e. do you remember configurations that caused problems?)
Or if not has my other pr (#1345) a chance of beeing merged? (which would require it to be rewritten)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry, 1.21.5 has taken priority from reviewing any existing stuff

I'd be much more comfortable if this PR didn't contain the dynamic stuff via the recipe iterator, and then if you wanted to put that through as its own separate PR we could discuss it there

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This pr refering to #1344 and the isFuel check, fixing of isFurnacable spelling and seperation of furnaceable and blastable recipes?
Should this also include the addition of resin_clumb and leaves -> leaf_litter?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, that one- although the spelling change is probably worth skipping. Both are technically valid (unsure if that’s a english variant thing or not), and it’s not really worth the API break for a small change like spelling

isFuel, blastable separation, and those additions all sound like changes that should be pretty easily mergeable- thanks :)

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I updated the pr
Although compiling/merging would require the dependencies in build.gradle to be updated as well which i was unable to do

if (recipe instanceof FurnaceRecipe) {
smeltableItems.put(((FurnaceRecipe)recipe).getInput().getType(), ((FurnaceRecipe)recipe).getResult());
}
else if (recipe instanceof BlastingRecipe) {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please make sure to follow the style standards

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Refering to the line wrapping?
Does the second commit fix this issue?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i was referring to the

if {
}
else

rather than

if {
} else {

we follow the Oracle Java Conventions, https://www.oracle.com/docs/tech/java/codeconventions.pdf

Comment threadsrc/main/java/com/sk89q/craftbook/util/ItemUtil.java
@ANRAR4

ANRAR4 commented Mar 15, 2025

Copy link
Copy Markdown
ContributorAuthor

I forgot to add all choices of smelting recipes with a taglist as input (e. g. #minecraft:logs_that_burn -> charcoal).
Now the lists of accepted items are identical, exept i noticed the switch case was also missing deepslate_coal_ore -> coal.
I also added line wrapping for lines around 120 characters.

@ANRAR4ANRAR4 changed the title Determine smeltable items and fuels dynamically (for pipes inputting items into furnaces)Seperate furnace recipes by furnace type, dynamically determine isAFuel for furnacesMar 30, 2025
@me4502
me4502 merged commit e2a7b40 into EngineHub:masterApr 25, 2025
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

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

Seperate furnace recipes by furnace type, dynamically determine isAFuel for furnaces - #1344

Merged
me4502 merged 1 commit into
EngineHub:masterfrom
ANRAR4:master
Apr 25, 2025
Merged

Seperate furnace recipes by furnace type, dynamically determine isAFuel for furnaces#1344
me4502 merged 1 commit into
EngineHub:masterfrom
ANRAR4:master

Conversation

@ANRAR4

@ANRAR4ANRAR4 commented Mar 14, 2025

Copy link
Copy Markdown
Contributor

The changes replace the switch case statements for determining items smeltable and cookable inside a furnace as well as fuels for furnaces, which are used to check if an item can be put inside a furnace, with comparisons to lists of the available smelting/cooking/blastsmelting recipes or rather a check of the Material.isFuel method for fuels, as the hardcoded lists tend to be outdated (e. g. missing resin_clump in 1.21.4 and the upcoming recipe for leaves (to leaf_litter)).

These changes also add further tests to check the exclusion of items that should not be allowed into the specific type of furnace, although testing seems to be currently disabled.

* Precompute lists of all recipes available for furnace, blast_furnace and smoker/campfire
*
*/
public static void setupSmeltableItemLists() {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We used to do this, but it caused some very major issues. Servers stalling on startup, various versions of Spigot where large numbers of recipes were missing (and therefore things worked very unreliably), etc.

My understanding is the stability of the recipe API has only gotten worse over time, so these issues are likely more of a problem than ever. I'm not sure this is something worth doing due to this.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In my limited testing (on paper and spigot with versions 1.21.3 and 1.21.4) it worked, but i of course don't know if it will work in all cases.
When was a dynamic solution last used?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i don't recall specifically the last time, but it's been tried many times in the past. it works in some instances, but significantly reduces the stability of the plugin, making it really a non-starter

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So is there further testing I could do to check the reliability? (i. e. do you remember configurations that caused problems?)
Or if not has my other pr (#1345) a chance of beeing merged? (which would require it to be rewritten)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry, 1.21.5 has taken priority from reviewing any existing stuff

I'd be much more comfortable if this PR didn't contain the dynamic stuff via the recipe iterator, and then if you wanted to put that through as its own separate PR we could discuss it there

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This pr refering to #1344 and the isFuel check, fixing of isFurnacable spelling and seperation of furnaceable and blastable recipes?
Should this also include the addition of resin_clumb and leaves -> leaf_litter?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, that one- although the spelling change is probably worth skipping. Both are technically valid (unsure if that’s a english variant thing or not), and it’s not really worth the API break for a small change like spelling

isFuel, blastable separation, and those additions all sound like changes that should be pretty easily mergeable- thanks :)

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I updated the pr
Although compiling/merging would require the dependencies in build.gradle to be updated as well which i was unable to do

if (recipe instanceof FurnaceRecipe) {
smeltableItems.put(((FurnaceRecipe)recipe).getInput().getType(), ((FurnaceRecipe)recipe).getResult());
}
else if (recipe instanceof BlastingRecipe) {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please make sure to follow the style standards

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Refering to the line wrapping?
Does the second commit fix this issue?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i was referring to the

if {
}
else

rather than

if {
} else {

we follow the Oracle Java Conventions, https://www.oracle.com/docs/tech/java/codeconventions.pdf

Comment threadsrc/main/java/com/sk89q/craftbook/util/ItemUtil.java
@ANRAR4

ANRAR4 commented Mar 15, 2025

Copy link
Copy Markdown
ContributorAuthor

I forgot to add all choices of smelting recipes with a taglist as input (e. g. #minecraft:logs_that_burn -> charcoal).
Now the lists of accepted items are identical, exept i noticed the switch case was also missing deepslate_coal_ore -> coal.
I also added line wrapping for lines around 120 characters.

@ANRAR4ANRAR4 changed the title Determine smeltable items and fuels dynamically (for pipes inputting items into furnaces)Seperate furnace recipes by furnace type, dynamically determine isAFuel for furnacesMar 30, 2025
@me4502
me4502 merged commit e2a7b40 into EngineHub:masterApr 25, 2025
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

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

Seperate furnace recipes by furnace type, dynamically determine isAFuel for furnaces - #1344

Merged
me4502 merged 1 commit into
EngineHub:masterfrom
ANRAR4:master
Apr 25, 2025
Merged

Seperate furnace recipes by furnace type, dynamically determine isAFuel for furnaces#1344
me4502 merged 1 commit into
EngineHub:masterfrom
ANRAR4:master

Conversation

@ANRAR4

@ANRAR4ANRAR4 commented Mar 14, 2025

Copy link
Copy Markdown
Contributor

The changes replace the switch case statements for determining items smeltable and cookable inside a furnace as well as fuels for furnaces, which are used to check if an item can be put inside a furnace, with comparisons to lists of the available smelting/cooking/blastsmelting recipes or rather a check of the Material.isFuel method for fuels, as the hardcoded lists tend to be outdated (e. g. missing resin_clump in 1.21.4 and the upcoming recipe for leaves (to leaf_litter)).

These changes also add further tests to check the exclusion of items that should not be allowed into the specific type of furnace, although testing seems to be currently disabled.

* Precompute lists of all recipes available for furnace, blast_furnace and smoker/campfire
*
*/
public static void setupSmeltableItemLists() {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We used to do this, but it caused some very major issues. Servers stalling on startup, various versions of Spigot where large numbers of recipes were missing (and therefore things worked very unreliably), etc.

My understanding is the stability of the recipe API has only gotten worse over time, so these issues are likely more of a problem than ever. I'm not sure this is something worth doing due to this.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In my limited testing (on paper and spigot with versions 1.21.3 and 1.21.4) it worked, but i of course don't know if it will work in all cases.
When was a dynamic solution last used?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i don't recall specifically the last time, but it's been tried many times in the past. it works in some instances, but significantly reduces the stability of the plugin, making it really a non-starter

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So is there further testing I could do to check the reliability? (i. e. do you remember configurations that caused problems?)
Or if not has my other pr (#1345) a chance of beeing merged? (which would require it to be rewritten)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry, 1.21.5 has taken priority from reviewing any existing stuff

I'd be much more comfortable if this PR didn't contain the dynamic stuff via the recipe iterator, and then if you wanted to put that through as its own separate PR we could discuss it there

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This pr refering to #1344 and the isFuel check, fixing of isFurnacable spelling and seperation of furnaceable and blastable recipes?
Should this also include the addition of resin_clumb and leaves -> leaf_litter?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, that one- although the spelling change is probably worth skipping. Both are technically valid (unsure if that’s a english variant thing or not), and it’s not really worth the API break for a small change like spelling

isFuel, blastable separation, and those additions all sound like changes that should be pretty easily mergeable- thanks :)

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I updated the pr
Although compiling/merging would require the dependencies in build.gradle to be updated as well which i was unable to do

if (recipe instanceof FurnaceRecipe) {
smeltableItems.put(((FurnaceRecipe)recipe).getInput().getType(), ((FurnaceRecipe)recipe).getResult());
}
else if (recipe instanceof BlastingRecipe) {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please make sure to follow the style standards

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Refering to the line wrapping?
Does the second commit fix this issue?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i was referring to the

if {
}
else

rather than

if {
} else {

we follow the Oracle Java Conventions, https://www.oracle.com/docs/tech/java/codeconventions.pdf

Comment threadsrc/main/java/com/sk89q/craftbook/util/ItemUtil.java
@ANRAR4

ANRAR4 commented Mar 15, 2025

Copy link
Copy Markdown
ContributorAuthor

I forgot to add all choices of smelting recipes with a taglist as input (e. g. #minecraft:logs_that_burn -> charcoal).
Now the lists of accepted items are identical, exept i noticed the switch case was also missing deepslate_coal_ore -> coal.
I also added line wrapping for lines around 120 characters.

@ANRAR4ANRAR4 changed the title Determine smeltable items and fuels dynamically (for pipes inputting items into furnaces)Seperate furnace recipes by furnace type, dynamically determine isAFuel for furnacesMar 30, 2025
@me4502
me4502 merged commit e2a7b40 into EngineHub:masterApr 25, 2025
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

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

Seperate furnace recipes by furnace type, dynamically determine isAFuel for furnaces - #1344

Merged
me4502 merged 1 commit into
EngineHub:masterfrom
ANRAR4:master
Apr 25, 2025
Merged

Seperate furnace recipes by furnace type, dynamically determine isAFuel for furnaces#1344
me4502 merged 1 commit into
EngineHub:masterfrom
ANRAR4:master

Conversation

@ANRAR4

@ANRAR4ANRAR4 commented Mar 14, 2025

Copy link
Copy Markdown
Contributor

The changes replace the switch case statements for determining items smeltable and cookable inside a furnace as well as fuels for furnaces, which are used to check if an item can be put inside a furnace, with comparisons to lists of the available smelting/cooking/blastsmelting recipes or rather a check of the Material.isFuel method for fuels, as the hardcoded lists tend to be outdated (e. g. missing resin_clump in 1.21.4 and the upcoming recipe for leaves (to leaf_litter)).

These changes also add further tests to check the exclusion of items that should not be allowed into the specific type of furnace, although testing seems to be currently disabled.

* Precompute lists of all recipes available for furnace, blast_furnace and smoker/campfire
*
*/
public static void setupSmeltableItemLists() {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We used to do this, but it caused some very major issues. Servers stalling on startup, various versions of Spigot where large numbers of recipes were missing (and therefore things worked very unreliably), etc.

My understanding is the stability of the recipe API has only gotten worse over time, so these issues are likely more of a problem than ever. I'm not sure this is something worth doing due to this.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In my limited testing (on paper and spigot with versions 1.21.3 and 1.21.4) it worked, but i of course don't know if it will work in all cases.
When was a dynamic solution last used?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i don't recall specifically the last time, but it's been tried many times in the past. it works in some instances, but significantly reduces the stability of the plugin, making it really a non-starter

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So is there further testing I could do to check the reliability? (i. e. do you remember configurations that caused problems?)
Or if not has my other pr (#1345) a chance of beeing merged? (which would require it to be rewritten)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry, 1.21.5 has taken priority from reviewing any existing stuff

I'd be much more comfortable if this PR didn't contain the dynamic stuff via the recipe iterator, and then if you wanted to put that through as its own separate PR we could discuss it there

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This pr refering to #1344 and the isFuel check, fixing of isFurnacable spelling and seperation of furnaceable and blastable recipes?
Should this also include the addition of resin_clumb and leaves -> leaf_litter?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, that one- although the spelling change is probably worth skipping. Both are technically valid (unsure if that’s a english variant thing or not), and it’s not really worth the API break for a small change like spelling

isFuel, blastable separation, and those additions all sound like changes that should be pretty easily mergeable- thanks :)

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I updated the pr
Although compiling/merging would require the dependencies in build.gradle to be updated as well which i was unable to do

if (recipe instanceof FurnaceRecipe) {
smeltableItems.put(((FurnaceRecipe)recipe).getInput().getType(), ((FurnaceRecipe)recipe).getResult());
}
else if (recipe instanceof BlastingRecipe) {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please make sure to follow the style standards

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Refering to the line wrapping?
Does the second commit fix this issue?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i was referring to the

if {
}
else

rather than

if {
} else {

we follow the Oracle Java Conventions, https://www.oracle.com/docs/tech/java/codeconventions.pdf

Comment threadsrc/main/java/com/sk89q/craftbook/util/ItemUtil.java
@ANRAR4

ANRAR4 commented Mar 15, 2025

Copy link
Copy Markdown
ContributorAuthor

I forgot to add all choices of smelting recipes with a taglist as input (e. g. #minecraft:logs_that_burn -> charcoal).
Now the lists of accepted items are identical, exept i noticed the switch case was also missing deepslate_coal_ore -> coal.
I also added line wrapping for lines around 120 characters.

@ANRAR4ANRAR4 changed the title Determine smeltable items and fuels dynamically (for pipes inputting items into furnaces)Seperate furnace recipes by furnace type, dynamically determine isAFuel for furnacesMar 30, 2025
@me4502
me4502 merged commit e2a7b40 into EngineHub:masterApr 25, 2025
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

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

Seperate furnace recipes by furnace type, dynamically determine isAFuel for furnaces - #1344

Merged
me4502 merged 1 commit into
EngineHub:masterfrom
ANRAR4:master
Apr 25, 2025
Merged

Seperate furnace recipes by furnace type, dynamically determine isAFuel for furnaces#1344
me4502 merged 1 commit into
EngineHub:masterfrom
ANRAR4:master

Conversation

@ANRAR4

@ANRAR4ANRAR4 commented Mar 14, 2025

Copy link
Copy Markdown
Contributor

The changes replace the switch case statements for determining items smeltable and cookable inside a furnace as well as fuels for furnaces, which are used to check if an item can be put inside a furnace, with comparisons to lists of the available smelting/cooking/blastsmelting recipes or rather a check of the Material.isFuel method for fuels, as the hardcoded lists tend to be outdated (e. g. missing resin_clump in 1.21.4 and the upcoming recipe for leaves (to leaf_litter)).

These changes also add further tests to check the exclusion of items that should not be allowed into the specific type of furnace, although testing seems to be currently disabled.

* Precompute lists of all recipes available for furnace, blast_furnace and smoker/campfire
*
*/
public static void setupSmeltableItemLists() {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We used to do this, but it caused some very major issues. Servers stalling on startup, various versions of Spigot where large numbers of recipes were missing (and therefore things worked very unreliably), etc.

My understanding is the stability of the recipe API has only gotten worse over time, so these issues are likely more of a problem than ever. I'm not sure this is something worth doing due to this.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In my limited testing (on paper and spigot with versions 1.21.3 and 1.21.4) it worked, but i of course don't know if it will work in all cases.
When was a dynamic solution last used?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i don't recall specifically the last time, but it's been tried many times in the past. it works in some instances, but significantly reduces the stability of the plugin, making it really a non-starter

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So is there further testing I could do to check the reliability? (i. e. do you remember configurations that caused problems?)
Or if not has my other pr (#1345) a chance of beeing merged? (which would require it to be rewritten)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry, 1.21.5 has taken priority from reviewing any existing stuff

I'd be much more comfortable if this PR didn't contain the dynamic stuff via the recipe iterator, and then if you wanted to put that through as its own separate PR we could discuss it there

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This pr refering to #1344 and the isFuel check, fixing of isFurnacable spelling and seperation of furnaceable and blastable recipes?
Should this also include the addition of resin_clumb and leaves -> leaf_litter?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, that one- although the spelling change is probably worth skipping. Both are technically valid (unsure if that’s a english variant thing or not), and it’s not really worth the API break for a small change like spelling

isFuel, blastable separation, and those additions all sound like changes that should be pretty easily mergeable- thanks :)

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I updated the pr
Although compiling/merging would require the dependencies in build.gradle to be updated as well which i was unable to do

if (recipe instanceof FurnaceRecipe) {
smeltableItems.put(((FurnaceRecipe)recipe).getInput().getType(), ((FurnaceRecipe)recipe).getResult());
}
else if (recipe instanceof BlastingRecipe) {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please make sure to follow the style standards

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Refering to the line wrapping?
Does the second commit fix this issue?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i was referring to the

if {
}
else

rather than

if {
} else {

we follow the Oracle Java Conventions, https://www.oracle.com/docs/tech/java/codeconventions.pdf

Comment threadsrc/main/java/com/sk89q/craftbook/util/ItemUtil.java
@ANRAR4

ANRAR4 commented Mar 15, 2025

Copy link
Copy Markdown
ContributorAuthor

I forgot to add all choices of smelting recipes with a taglist as input (e. g. #minecraft:logs_that_burn -> charcoal).
Now the lists of accepted items are identical, exept i noticed the switch case was also missing deepslate_coal_ore -> coal.
I also added line wrapping for lines around 120 characters.

@ANRAR4ANRAR4 changed the title Determine smeltable items and fuels dynamically (for pipes inputting items into furnaces)Seperate furnace recipes by furnace type, dynamically determine isAFuel for furnacesMar 30, 2025
@me4502
me4502 merged commit e2a7b40 into EngineHub:masterApr 25, 2025
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

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

Seperate furnace recipes by furnace type, dynamically determine isAFuel for furnaces - #1344

Merged
me4502 merged 1 commit into
EngineHub:masterfrom
ANRAR4:master
Apr 25, 2025
Merged

Seperate furnace recipes by furnace type, dynamically determine isAFuel for furnaces#1344
me4502 merged 1 commit into
EngineHub:masterfrom
ANRAR4:master

Conversation

@ANRAR4

@ANRAR4ANRAR4 commented Mar 14, 2025

Copy link
Copy Markdown
Contributor

The changes replace the switch case statements for determining items smeltable and cookable inside a furnace as well as fuels for furnaces, which are used to check if an item can be put inside a furnace, with comparisons to lists of the available smelting/cooking/blastsmelting recipes or rather a check of the Material.isFuel method for fuels, as the hardcoded lists tend to be outdated (e. g. missing resin_clump in 1.21.4 and the upcoming recipe for leaves (to leaf_litter)).

These changes also add further tests to check the exclusion of items that should not be allowed into the specific type of furnace, although testing seems to be currently disabled.

* Precompute lists of all recipes available for furnace, blast_furnace and smoker/campfire
*
*/
public static void setupSmeltableItemLists() {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We used to do this, but it caused some very major issues. Servers stalling on startup, various versions of Spigot where large numbers of recipes were missing (and therefore things worked very unreliably), etc.

My understanding is the stability of the recipe API has only gotten worse over time, so these issues are likely more of a problem than ever. I'm not sure this is something worth doing due to this.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In my limited testing (on paper and spigot with versions 1.21.3 and 1.21.4) it worked, but i of course don't know if it will work in all cases.
When was a dynamic solution last used?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i don't recall specifically the last time, but it's been tried many times in the past. it works in some instances, but significantly reduces the stability of the plugin, making it really a non-starter

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So is there further testing I could do to check the reliability? (i. e. do you remember configurations that caused problems?)
Or if not has my other pr (#1345) a chance of beeing merged? (which would require it to be rewritten)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry, 1.21.5 has taken priority from reviewing any existing stuff

I'd be much more comfortable if this PR didn't contain the dynamic stuff via the recipe iterator, and then if you wanted to put that through as its own separate PR we could discuss it there

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This pr refering to #1344 and the isFuel check, fixing of isFurnacable spelling and seperation of furnaceable and blastable recipes?
Should this also include the addition of resin_clumb and leaves -> leaf_litter?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, that one- although the spelling change is probably worth skipping. Both are technically valid (unsure if that’s a english variant thing or not), and it’s not really worth the API break for a small change like spelling

isFuel, blastable separation, and those additions all sound like changes that should be pretty easily mergeable- thanks :)

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I updated the pr
Although compiling/merging would require the dependencies in build.gradle to be updated as well which i was unable to do

if (recipe instanceof FurnaceRecipe) {
smeltableItems.put(((FurnaceRecipe)recipe).getInput().getType(), ((FurnaceRecipe)recipe).getResult());
}
else if (recipe instanceof BlastingRecipe) {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please make sure to follow the style standards

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Refering to the line wrapping?
Does the second commit fix this issue?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i was referring to the

if {
}
else

rather than

if {
} else {

we follow the Oracle Java Conventions, https://www.oracle.com/docs/tech/java/codeconventions.pdf

Comment threadsrc/main/java/com/sk89q/craftbook/util/ItemUtil.java
@ANRAR4

ANRAR4 commented Mar 15, 2025

Copy link
Copy Markdown
ContributorAuthor

I forgot to add all choices of smelting recipes with a taglist as input (e. g. #minecraft:logs_that_burn -> charcoal).
Now the lists of accepted items are identical, exept i noticed the switch case was also missing deepslate_coal_ore -> coal.
I also added line wrapping for lines around 120 characters.

@ANRAR4ANRAR4 changed the title Determine smeltable items and fuels dynamically (for pipes inputting items into furnaces)Seperate furnace recipes by furnace type, dynamically determine isAFuel for furnacesMar 30, 2025
@me4502
me4502 merged commit e2a7b40 into EngineHub:masterApr 25, 2025
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

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

Seperate furnace recipes by furnace type, dynamically determine isAFuel for furnaces - #1344

Merged
me4502 merged 1 commit into
EngineHub:masterfrom
ANRAR4:master
Apr 25, 2025
Merged

Seperate furnace recipes by furnace type, dynamically determine isAFuel for furnaces#1344
me4502 merged 1 commit into
EngineHub:masterfrom
ANRAR4:master

Conversation

@ANRAR4

@ANRAR4ANRAR4 commented Mar 14, 2025

Copy link
Copy Markdown
Contributor

The changes replace the switch case statements for determining items smeltable and cookable inside a furnace as well as fuels for furnaces, which are used to check if an item can be put inside a furnace, with comparisons to lists of the available smelting/cooking/blastsmelting recipes or rather a check of the Material.isFuel method for fuels, as the hardcoded lists tend to be outdated (e. g. missing resin_clump in 1.21.4 and the upcoming recipe for leaves (to leaf_litter)).

These changes also add further tests to check the exclusion of items that should not be allowed into the specific type of furnace, although testing seems to be currently disabled.

* Precompute lists of all recipes available for furnace, blast_furnace and smoker/campfire
*
*/
public static void setupSmeltableItemLists() {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We used to do this, but it caused some very major issues. Servers stalling on startup, various versions of Spigot where large numbers of recipes were missing (and therefore things worked very unreliably), etc.

My understanding is the stability of the recipe API has only gotten worse over time, so these issues are likely more of a problem than ever. I'm not sure this is something worth doing due to this.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In my limited testing (on paper and spigot with versions 1.21.3 and 1.21.4) it worked, but i of course don't know if it will work in all cases.
When was a dynamic solution last used?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i don't recall specifically the last time, but it's been tried many times in the past. it works in some instances, but significantly reduces the stability of the plugin, making it really a non-starter

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So is there further testing I could do to check the reliability? (i. e. do you remember configurations that caused problems?)
Or if not has my other pr (#1345) a chance of beeing merged? (which would require it to be rewritten)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry, 1.21.5 has taken priority from reviewing any existing stuff

I'd be much more comfortable if this PR didn't contain the dynamic stuff via the recipe iterator, and then if you wanted to put that through as its own separate PR we could discuss it there

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This pr refering to #1344 and the isFuel check, fixing of isFurnacable spelling and seperation of furnaceable and blastable recipes?
Should this also include the addition of resin_clumb and leaves -> leaf_litter?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, that one- although the spelling change is probably worth skipping. Both are technically valid (unsure if that’s a english variant thing or not), and it’s not really worth the API break for a small change like spelling

isFuel, blastable separation, and those additions all sound like changes that should be pretty easily mergeable- thanks :)

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I updated the pr
Although compiling/merging would require the dependencies in build.gradle to be updated as well which i was unable to do

if (recipe instanceof FurnaceRecipe) {
smeltableItems.put(((FurnaceRecipe)recipe).getInput().getType(), ((FurnaceRecipe)recipe).getResult());
}
else if (recipe instanceof BlastingRecipe) {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please make sure to follow the style standards

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Refering to the line wrapping?
Does the second commit fix this issue?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i was referring to the

if {
}
else

rather than

if {
} else {

we follow the Oracle Java Conventions, https://www.oracle.com/docs/tech/java/codeconventions.pdf

Comment threadsrc/main/java/com/sk89q/craftbook/util/ItemUtil.java
@ANRAR4

ANRAR4 commented Mar 15, 2025

Copy link
Copy Markdown
ContributorAuthor

I forgot to add all choices of smelting recipes with a taglist as input (e. g. #minecraft:logs_that_burn -> charcoal).
Now the lists of accepted items are identical, exept i noticed the switch case was also missing deepslate_coal_ore -> coal.
I also added line wrapping for lines around 120 characters.

@ANRAR4ANRAR4 changed the title Determine smeltable items and fuels dynamically (for pipes inputting items into furnaces)Seperate furnace recipes by furnace type, dynamically determine isAFuel for furnacesMar 30, 2025
@me4502
me4502 merged commit e2a7b40 into EngineHub:masterApr 25, 2025
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

@ANRAR4@me4502