Repository files navigation

Crystal Blocks

Forge mod for Minecraft 1.20.1. Adds 7 decorative block families, 6 colors each, plus a glowing variant per family. My second mod, built from scratch, no mechanics, no gimmicks, just blocks you can build with.

What's in it

FamilyLookCrafted from
Crystalglowing diagonal vein in stonestone + dye
Specklescattered mineral fleckscobblestone + dye
Brickoffset masonry, proper mortar linesbricks + dye
Corrodedblotchy rust patchesiron nugget + dye
Mossypatchy organic overlaymoss block + dye
Marbleflowing curved veinquartz block + dye
Hexplatehoneycomb platingiron ingot + dye

Each family comes in 6 colors (cyan, red, green, purple, orange, blue). Each color has the full building set - block, slab, stairs, fence, fence gate, wall.

Each family also has one glow variant, crafted with glowstone dust instead of dye, full light level (15). Glow variant gets block + slab + stairs, no fence/gate/wall - didn't seem worth it, nobody's building a glowing fence line.

Slabs (colored and glow) waterlog properly, place one in water and it holds the water like a vanilla slab. Fences/gates/walls waterlog too but that's their vanilla base classes doing the work, not something I had to build.

Everything drops itself when broken, needs at least a stone pickaxe, own creative tab so it's not buried in vanilla's building blocks tab.

Building it

Needs Java 17 (that's what 1.20.1 forge wants - different major version is what'd actually break this, not fix it)

./gradlew build

first build takes a while, forge has to download + decompile vanilla and merge mojang's mappings onto it. all cached after that though, rebuilds are fast.

Dev notes

not stuff a user needs but keeping it here for whoever (probably me in 6 months) opens this again

  • WaterloggedSlabBlock exists because vanilla's SlabBlock doesn't implement waterlogging on its own. stone slab / cobble slab etc get it because THEIR classes wire it up, SlabBlock itself just doesn't. StairBlock already handles it fine so stairs use plain vanilla StairBlock, no subclass. same deal for FenceBlock/FenceGateBlock/WallBlock - all three do it themselves, registered straight, no wrapper needed.

  • don't add WATERLOGGED in a createBlockStateDefinition override on top of SlabBlock. it already adds that property itself (every slab tracks it whether or not it can hold water) so adding it twice = "duplicate property" crash before you even hit the main menu. ask me how I know

  • FMLJavaModLoadingContext.get() throws a compiler warning but it's not actually deprecated til Forge 1.21.1 (checked forge's source to be sure, the @Deprecated annotation is version gated). don't "fix" it just cause the IDE's yelling - the replacement isn't confirmed working on 47.4.23 and swapping working code for an untested guess to shut up a fake warning is a bad trade

  • FenceGateBlock here takes a plain Properties ctor, no WoodType arg. that's correct for 47.4.23/1.20.1 - the WoodType version is a 1.21+ thing tied to the sound events rework. if some newer guide says otherwise the guide's just ahead of this MC version

  • registries loop over a FAMILIES list instead of hand registering each one so an 8th family = one line added to that list + textures/json, not a copy paste job through the java

Known gaps

  • glow blocks don't have fence/gate/wall (see above, intentional not forgotten - might revisit)
  • haven't compiled this against a live forge maven in every env it's touched, if it doesn't build fresh somewhere it's probably just a one line api mismatch not something structurally wrong

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, '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

Repository files navigation

Crystal Blocks

Forge mod for Minecraft 1.20.1. Adds 7 decorative block families, 6 colors each, plus a glowing variant per family. My second mod, built from scratch, no mechanics, no gimmicks, just blocks you can build with.

What's in it

FamilyLookCrafted from
Crystalglowing diagonal vein in stonestone + dye
Specklescattered mineral fleckscobblestone + dye
Brickoffset masonry, proper mortar linesbricks + dye
Corrodedblotchy rust patchesiron nugget + dye
Mossypatchy organic overlaymoss block + dye
Marbleflowing curved veinquartz block + dye
Hexplatehoneycomb platingiron ingot + dye

Each family comes in 6 colors (cyan, red, green, purple, orange, blue). Each color has the full building set - block, slab, stairs, fence, fence gate, wall.

Each family also has one glow variant, crafted with glowstone dust instead of dye, full light level (15). Glow variant gets block + slab + stairs, no fence/gate/wall - didn't seem worth it, nobody's building a glowing fence line.

Slabs (colored and glow) waterlog properly, place one in water and it holds the water like a vanilla slab. Fences/gates/walls waterlog too but that's their vanilla base classes doing the work, not something I had to build.

Everything drops itself when broken, needs at least a stone pickaxe, own creative tab so it's not buried in vanilla's building blocks tab.

Building it

Needs Java 17 (that's what 1.20.1 forge wants - different major version is what'd actually break this, not fix it)

./gradlew build

first build takes a while, forge has to download + decompile vanilla and merge mojang's mappings onto it. all cached after that though, rebuilds are fast.

Dev notes

not stuff a user needs but keeping it here for whoever (probably me in 6 months) opens this again

  • WaterloggedSlabBlock exists because vanilla's SlabBlock doesn't implement waterlogging on its own. stone slab / cobble slab etc get it because THEIR classes wire it up, SlabBlock itself just doesn't. StairBlock already handles it fine so stairs use plain vanilla StairBlock, no subclass. same deal for FenceBlock/FenceGateBlock/WallBlock - all three do it themselves, registered straight, no wrapper needed.

  • don't add WATERLOGGED in a createBlockStateDefinition override on top of SlabBlock. it already adds that property itself (every slab tracks it whether or not it can hold water) so adding it twice = "duplicate property" crash before you even hit the main menu. ask me how I know

  • FMLJavaModLoadingContext.get() throws a compiler warning but it's not actually deprecated til Forge 1.21.1 (checked forge's source to be sure, the @Deprecated annotation is version gated). don't "fix" it just cause the IDE's yelling - the replacement isn't confirmed working on 47.4.23 and swapping working code for an untested guess to shut up a fake warning is a bad trade

  • FenceGateBlock here takes a plain Properties ctor, no WoodType arg. that's correct for 47.4.23/1.20.1 - the WoodType version is a 1.21+ thing tied to the sound events rework. if some newer guide says otherwise the guide's just ahead of this MC version

  • registries loop over a FAMILIES list instead of hand registering each one so an 8th family = one line added to that list + textures/json, not a copy paste job through the java

Known gaps

  • glow blocks don't have fence/gate/wall (see above, intentional not forgotten - might revisit)
  • haven't compiled this against a live forge maven in every env it's touched, if it doesn't build fresh somewhere it's probably just a one line api mismatch not something structurally wrong

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, '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

Repository files navigation

Crystal Blocks

Forge mod for Minecraft 1.20.1. Adds 7 decorative block families, 6 colors each, plus a glowing variant per family. My second mod, built from scratch, no mechanics, no gimmicks, just blocks you can build with.

What's in it

FamilyLookCrafted from
Crystalglowing diagonal vein in stonestone + dye
Specklescattered mineral fleckscobblestone + dye
Brickoffset masonry, proper mortar linesbricks + dye
Corrodedblotchy rust patchesiron nugget + dye
Mossypatchy organic overlaymoss block + dye
Marbleflowing curved veinquartz block + dye
Hexplatehoneycomb platingiron ingot + dye

Each family comes in 6 colors (cyan, red, green, purple, orange, blue). Each color has the full building set - block, slab, stairs, fence, fence gate, wall.

Each family also has one glow variant, crafted with glowstone dust instead of dye, full light level (15). Glow variant gets block + slab + stairs, no fence/gate/wall - didn't seem worth it, nobody's building a glowing fence line.

Slabs (colored and glow) waterlog properly, place one in water and it holds the water like a vanilla slab. Fences/gates/walls waterlog too but that's their vanilla base classes doing the work, not something I had to build.

Everything drops itself when broken, needs at least a stone pickaxe, own creative tab so it's not buried in vanilla's building blocks tab.

Building it

Needs Java 17 (that's what 1.20.1 forge wants - different major version is what'd actually break this, not fix it)

./gradlew build

first build takes a while, forge has to download + decompile vanilla and merge mojang's mappings onto it. all cached after that though, rebuilds are fast.

Dev notes

not stuff a user needs but keeping it here for whoever (probably me in 6 months) opens this again

  • WaterloggedSlabBlock exists because vanilla's SlabBlock doesn't implement waterlogging on its own. stone slab / cobble slab etc get it because THEIR classes wire it up, SlabBlock itself just doesn't. StairBlock already handles it fine so stairs use plain vanilla StairBlock, no subclass. same deal for FenceBlock/FenceGateBlock/WallBlock - all three do it themselves, registered straight, no wrapper needed.

  • don't add WATERLOGGED in a createBlockStateDefinition override on top of SlabBlock. it already adds that property itself (every slab tracks it whether or not it can hold water) so adding it twice = "duplicate property" crash before you even hit the main menu. ask me how I know

  • FMLJavaModLoadingContext.get() throws a compiler warning but it's not actually deprecated til Forge 1.21.1 (checked forge's source to be sure, the @Deprecated annotation is version gated). don't "fix" it just cause the IDE's yelling - the replacement isn't confirmed working on 47.4.23 and swapping working code for an untested guess to shut up a fake warning is a bad trade

  • FenceGateBlock here takes a plain Properties ctor, no WoodType arg. that's correct for 47.4.23/1.20.1 - the WoodType version is a 1.21+ thing tied to the sound events rework. if some newer guide says otherwise the guide's just ahead of this MC version

  • registries loop over a FAMILIES list instead of hand registering each one so an 8th family = one line added to that list + textures/json, not a copy paste job through the java

Known gaps

  • glow blocks don't have fence/gate/wall (see above, intentional not forgotten - might revisit)
  • haven't compiled this against a live forge maven in every env it's touched, if it doesn't build fresh somewhere it's probably just a one line api mismatch not something structurally wrong

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, '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

Repository files navigation

Crystal Blocks

Forge mod for Minecraft 1.20.1. Adds 7 decorative block families, 6 colors each, plus a glowing variant per family. My second mod, built from scratch, no mechanics, no gimmicks, just blocks you can build with.

What's in it

FamilyLookCrafted from
Crystalglowing diagonal vein in stonestone + dye
Specklescattered mineral fleckscobblestone + dye
Brickoffset masonry, proper mortar linesbricks + dye
Corrodedblotchy rust patchesiron nugget + dye
Mossypatchy organic overlaymoss block + dye
Marbleflowing curved veinquartz block + dye
Hexplatehoneycomb platingiron ingot + dye

Each family comes in 6 colors (cyan, red, green, purple, orange, blue). Each color has the full building set - block, slab, stairs, fence, fence gate, wall.

Each family also has one glow variant, crafted with glowstone dust instead of dye, full light level (15). Glow variant gets block + slab + stairs, no fence/gate/wall - didn't seem worth it, nobody's building a glowing fence line.

Slabs (colored and glow) waterlog properly, place one in water and it holds the water like a vanilla slab. Fences/gates/walls waterlog too but that's their vanilla base classes doing the work, not something I had to build.

Everything drops itself when broken, needs at least a stone pickaxe, own creative tab so it's not buried in vanilla's building blocks tab.

Building it

Needs Java 17 (that's what 1.20.1 forge wants - different major version is what'd actually break this, not fix it)

./gradlew build

first build takes a while, forge has to download + decompile vanilla and merge mojang's mappings onto it. all cached after that though, rebuilds are fast.

Dev notes

not stuff a user needs but keeping it here for whoever (probably me in 6 months) opens this again

  • WaterloggedSlabBlock exists because vanilla's SlabBlock doesn't implement waterlogging on its own. stone slab / cobble slab etc get it because THEIR classes wire it up, SlabBlock itself just doesn't. StairBlock already handles it fine so stairs use plain vanilla StairBlock, no subclass. same deal for FenceBlock/FenceGateBlock/WallBlock - all three do it themselves, registered straight, no wrapper needed.

  • don't add WATERLOGGED in a createBlockStateDefinition override on top of SlabBlock. it already adds that property itself (every slab tracks it whether or not it can hold water) so adding it twice = "duplicate property" crash before you even hit the main menu. ask me how I know

  • FMLJavaModLoadingContext.get() throws a compiler warning but it's not actually deprecated til Forge 1.21.1 (checked forge's source to be sure, the @Deprecated annotation is version gated). don't "fix" it just cause the IDE's yelling - the replacement isn't confirmed working on 47.4.23 and swapping working code for an untested guess to shut up a fake warning is a bad trade

  • FenceGateBlock here takes a plain Properties ctor, no WoodType arg. that's correct for 47.4.23/1.20.1 - the WoodType version is a 1.21+ thing tied to the sound events rework. if some newer guide says otherwise the guide's just ahead of this MC version

  • registries loop over a FAMILIES list instead of hand registering each one so an 8th family = one line added to that list + textures/json, not a copy paste job through the java

Known gaps

  • glow blocks don't have fence/gate/wall (see above, intentional not forgotten - might revisit)
  • haven't compiled this against a live forge maven in every env it's touched, if it doesn't build fresh somewhere it's probably just a one line api mismatch not something structurally wrong

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, '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

Repository files navigation

Crystal Blocks

Forge mod for Minecraft 1.20.1. Adds 7 decorative block families, 6 colors each, plus a glowing variant per family. My second mod, built from scratch, no mechanics, no gimmicks, just blocks you can build with.

What's in it

FamilyLookCrafted from
Crystalglowing diagonal vein in stonestone + dye
Specklescattered mineral fleckscobblestone + dye
Brickoffset masonry, proper mortar linesbricks + dye
Corrodedblotchy rust patchesiron nugget + dye
Mossypatchy organic overlaymoss block + dye
Marbleflowing curved veinquartz block + dye
Hexplatehoneycomb platingiron ingot + dye

Each family comes in 6 colors (cyan, red, green, purple, orange, blue). Each color has the full building set - block, slab, stairs, fence, fence gate, wall.

Each family also has one glow variant, crafted with glowstone dust instead of dye, full light level (15). Glow variant gets block + slab + stairs, no fence/gate/wall - didn't seem worth it, nobody's building a glowing fence line.

Slabs (colored and glow) waterlog properly, place one in water and it holds the water like a vanilla slab. Fences/gates/walls waterlog too but that's their vanilla base classes doing the work, not something I had to build.

Everything drops itself when broken, needs at least a stone pickaxe, own creative tab so it's not buried in vanilla's building blocks tab.

Building it

Needs Java 17 (that's what 1.20.1 forge wants - different major version is what'd actually break this, not fix it)

./gradlew build

first build takes a while, forge has to download + decompile vanilla and merge mojang's mappings onto it. all cached after that though, rebuilds are fast.

Dev notes

not stuff a user needs but keeping it here for whoever (probably me in 6 months) opens this again

  • WaterloggedSlabBlock exists because vanilla's SlabBlock doesn't implement waterlogging on its own. stone slab / cobble slab etc get it because THEIR classes wire it up, SlabBlock itself just doesn't. StairBlock already handles it fine so stairs use plain vanilla StairBlock, no subclass. same deal for FenceBlock/FenceGateBlock/WallBlock - all three do it themselves, registered straight, no wrapper needed.

  • don't add WATERLOGGED in a createBlockStateDefinition override on top of SlabBlock. it already adds that property itself (every slab tracks it whether or not it can hold water) so adding it twice = "duplicate property" crash before you even hit the main menu. ask me how I know

  • FMLJavaModLoadingContext.get() throws a compiler warning but it's not actually deprecated til Forge 1.21.1 (checked forge's source to be sure, the @Deprecated annotation is version gated). don't "fix" it just cause the IDE's yelling - the replacement isn't confirmed working on 47.4.23 and swapping working code for an untested guess to shut up a fake warning is a bad trade

  • FenceGateBlock here takes a plain Properties ctor, no WoodType arg. that's correct for 47.4.23/1.20.1 - the WoodType version is a 1.21+ thing tied to the sound events rework. if some newer guide says otherwise the guide's just ahead of this MC version

  • registries loop over a FAMILIES list instead of hand registering each one so an 8th family = one line added to that list + textures/json, not a copy paste job through the java

Known gaps

  • glow blocks don't have fence/gate/wall (see above, intentional not forgotten - might revisit)
  • haven't compiled this against a live forge maven in every env it's touched, if it doesn't build fresh somewhere it's probably just a one line api mismatch not something structurally wrong

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, '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

Repository files navigation

Crystal Blocks

Forge mod for Minecraft 1.20.1. Adds 7 decorative block families, 6 colors each, plus a glowing variant per family. My second mod, built from scratch, no mechanics, no gimmicks, just blocks you can build with.

What's in it

FamilyLookCrafted from
Crystalglowing diagonal vein in stonestone + dye
Specklescattered mineral fleckscobblestone + dye
Brickoffset masonry, proper mortar linesbricks + dye
Corrodedblotchy rust patchesiron nugget + dye
Mossypatchy organic overlaymoss block + dye
Marbleflowing curved veinquartz block + dye
Hexplatehoneycomb platingiron ingot + dye

Each family comes in 6 colors (cyan, red, green, purple, orange, blue). Each color has the full building set - block, slab, stairs, fence, fence gate, wall.

Each family also has one glow variant, crafted with glowstone dust instead of dye, full light level (15). Glow variant gets block + slab + stairs, no fence/gate/wall - didn't seem worth it, nobody's building a glowing fence line.

Slabs (colored and glow) waterlog properly, place one in water and it holds the water like a vanilla slab. Fences/gates/walls waterlog too but that's their vanilla base classes doing the work, not something I had to build.

Everything drops itself when broken, needs at least a stone pickaxe, own creative tab so it's not buried in vanilla's building blocks tab.

Building it

Needs Java 17 (that's what 1.20.1 forge wants - different major version is what'd actually break this, not fix it)

./gradlew build

first build takes a while, forge has to download + decompile vanilla and merge mojang's mappings onto it. all cached after that though, rebuilds are fast.

Dev notes

not stuff a user needs but keeping it here for whoever (probably me in 6 months) opens this again

  • WaterloggedSlabBlock exists because vanilla's SlabBlock doesn't implement waterlogging on its own. stone slab / cobble slab etc get it because THEIR classes wire it up, SlabBlock itself just doesn't. StairBlock already handles it fine so stairs use plain vanilla StairBlock, no subclass. same deal for FenceBlock/FenceGateBlock/WallBlock - all three do it themselves, registered straight, no wrapper needed.

  • don't add WATERLOGGED in a createBlockStateDefinition override on top of SlabBlock. it already adds that property itself (every slab tracks it whether or not it can hold water) so adding it twice = "duplicate property" crash before you even hit the main menu. ask me how I know

  • FMLJavaModLoadingContext.get() throws a compiler warning but it's not actually deprecated til Forge 1.21.1 (checked forge's source to be sure, the @Deprecated annotation is version gated). don't "fix" it just cause the IDE's yelling - the replacement isn't confirmed working on 47.4.23 and swapping working code for an untested guess to shut up a fake warning is a bad trade

  • FenceGateBlock here takes a plain Properties ctor, no WoodType arg. that's correct for 47.4.23/1.20.1 - the WoodType version is a 1.21+ thing tied to the sound events rework. if some newer guide says otherwise the guide's just ahead of this MC version

  • registries loop over a FAMILIES list instead of hand registering each one so an 8th family = one line added to that list + textures/json, not a copy paste job through the java

Known gaps

  • glow blocks don't have fence/gate/wall (see above, intentional not forgotten - might revisit)
  • haven't compiled this against a live forge maven in every env it's touched, if it doesn't build fresh somewhere it's probably just a one line api mismatch not something structurally wrong

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, '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

Repository files navigation

Crystal Blocks

Forge mod for Minecraft 1.20.1. Adds 7 decorative block families, 6 colors each, plus a glowing variant per family. My second mod, built from scratch, no mechanics, no gimmicks, just blocks you can build with.

What's in it

FamilyLookCrafted from
Crystalglowing diagonal vein in stonestone + dye
Specklescattered mineral fleckscobblestone + dye
Brickoffset masonry, proper mortar linesbricks + dye
Corrodedblotchy rust patchesiron nugget + dye
Mossypatchy organic overlaymoss block + dye
Marbleflowing curved veinquartz block + dye
Hexplatehoneycomb platingiron ingot + dye

Each family comes in 6 colors (cyan, red, green, purple, orange, blue). Each color has the full building set - block, slab, stairs, fence, fence gate, wall.

Each family also has one glow variant, crafted with glowstone dust instead of dye, full light level (15). Glow variant gets block + slab + stairs, no fence/gate/wall - didn't seem worth it, nobody's building a glowing fence line.

Slabs (colored and glow) waterlog properly, place one in water and it holds the water like a vanilla slab. Fences/gates/walls waterlog too but that's their vanilla base classes doing the work, not something I had to build.

Everything drops itself when broken, needs at least a stone pickaxe, own creative tab so it's not buried in vanilla's building blocks tab.

Building it

Needs Java 17 (that's what 1.20.1 forge wants - different major version is what'd actually break this, not fix it)

./gradlew build

first build takes a while, forge has to download + decompile vanilla and merge mojang's mappings onto it. all cached after that though, rebuilds are fast.

Dev notes

not stuff a user needs but keeping it here for whoever (probably me in 6 months) opens this again

  • WaterloggedSlabBlock exists because vanilla's SlabBlock doesn't implement waterlogging on its own. stone slab / cobble slab etc get it because THEIR classes wire it up, SlabBlock itself just doesn't. StairBlock already handles it fine so stairs use plain vanilla StairBlock, no subclass. same deal for FenceBlock/FenceGateBlock/WallBlock - all three do it themselves, registered straight, no wrapper needed.

  • don't add WATERLOGGED in a createBlockStateDefinition override on top of SlabBlock. it already adds that property itself (every slab tracks it whether or not it can hold water) so adding it twice = "duplicate property" crash before you even hit the main menu. ask me how I know

  • FMLJavaModLoadingContext.get() throws a compiler warning but it's not actually deprecated til Forge 1.21.1 (checked forge's source to be sure, the @Deprecated annotation is version gated). don't "fix" it just cause the IDE's yelling - the replacement isn't confirmed working on 47.4.23 and swapping working code for an untested guess to shut up a fake warning is a bad trade

  • FenceGateBlock here takes a plain Properties ctor, no WoodType arg. that's correct for 47.4.23/1.20.1 - the WoodType version is a 1.21+ thing tied to the sound events rework. if some newer guide says otherwise the guide's just ahead of this MC version

  • registries loop over a FAMILIES list instead of hand registering each one so an 8th family = one line added to that list + textures/json, not a copy paste job through the java

Known gaps

  • glow blocks don't have fence/gate/wall (see above, intentional not forgotten - might revisit)
  • haven't compiled this against a live forge maven in every env it's touched, if it doesn't build fresh somewhere it's probably just a one line api mismatch not something structurally wrong

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, '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

Repository files navigation

Crystal Blocks

Forge mod for Minecraft 1.20.1. Adds 7 decorative block families, 6 colors each, plus a glowing variant per family. My second mod, built from scratch, no mechanics, no gimmicks, just blocks you can build with.

What's in it

FamilyLookCrafted from
Crystalglowing diagonal vein in stonestone + dye
Specklescattered mineral fleckscobblestone + dye
Brickoffset masonry, proper mortar linesbricks + dye
Corrodedblotchy rust patchesiron nugget + dye
Mossypatchy organic overlaymoss block + dye
Marbleflowing curved veinquartz block + dye
Hexplatehoneycomb platingiron ingot + dye

Each family comes in 6 colors (cyan, red, green, purple, orange, blue). Each color has the full building set - block, slab, stairs, fence, fence gate, wall.

Each family also has one glow variant, crafted with glowstone dust instead of dye, full light level (15). Glow variant gets block + slab + stairs, no fence/gate/wall - didn't seem worth it, nobody's building a glowing fence line.

Slabs (colored and glow) waterlog properly, place one in water and it holds the water like a vanilla slab. Fences/gates/walls waterlog too but that's their vanilla base classes doing the work, not something I had to build.

Everything drops itself when broken, needs at least a stone pickaxe, own creative tab so it's not buried in vanilla's building blocks tab.

Building it

Needs Java 17 (that's what 1.20.1 forge wants - different major version is what'd actually break this, not fix it)

./gradlew build

first build takes a while, forge has to download + decompile vanilla and merge mojang's mappings onto it. all cached after that though, rebuilds are fast.

Dev notes

not stuff a user needs but keeping it here for whoever (probably me in 6 months) opens this again

  • WaterloggedSlabBlock exists because vanilla's SlabBlock doesn't implement waterlogging on its own. stone slab / cobble slab etc get it because THEIR classes wire it up, SlabBlock itself just doesn't. StairBlock already handles it fine so stairs use plain vanilla StairBlock, no subclass. same deal for FenceBlock/FenceGateBlock/WallBlock - all three do it themselves, registered straight, no wrapper needed.

  • don't add WATERLOGGED in a createBlockStateDefinition override on top of SlabBlock. it already adds that property itself (every slab tracks it whether or not it can hold water) so adding it twice = "duplicate property" crash before you even hit the main menu. ask me how I know

  • FMLJavaModLoadingContext.get() throws a compiler warning but it's not actually deprecated til Forge 1.21.1 (checked forge's source to be sure, the @Deprecated annotation is version gated). don't "fix" it just cause the IDE's yelling - the replacement isn't confirmed working on 47.4.23 and swapping working code for an untested guess to shut up a fake warning is a bad trade

  • FenceGateBlock here takes a plain Properties ctor, no WoodType arg. that's correct for 47.4.23/1.20.1 - the WoodType version is a 1.21+ thing tied to the sound events rework. if some newer guide says otherwise the guide's just ahead of this MC version

  • registries loop over a FAMILIES list instead of hand registering each one so an 8th family = one line added to that list + textures/json, not a copy paste job through the java

Known gaps

  • glow blocks don't have fence/gate/wall (see above, intentional not forgotten - might revisit)
  • haven't compiled this against a live forge maven in every env it's touched, if it doesn't build fresh somewhere it's probably just a one line api mismatch not something structurally wrong

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages