Changed directory structure for gh pages
19
src/_includes/author.njk
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
---
|
||||
layout: "skeleton.njk"
|
||||
styles: ["project"]
|
||||
---
|
||||
<div id="project">
|
||||
<div id="projectHeader">
|
||||
<img src="{{ page.dir }}{{ logoName }}.{{ logoExtension }}">
|
||||
<div id="projectTitleSubtitle">
|
||||
<div id="projectTitleAuthor">
|
||||
<h1 id="projectTitle">{{ name }}</h1>
|
||||
</div>
|
||||
<p id="projectSubtitle">{{ subtitle }}</p>
|
||||
</div>
|
||||
</div>
|
||||
{% include "project_image.njk" %}
|
||||
<main id="projectDescription">
|
||||
{{ content | safe }}
|
||||
</main>
|
||||
</div>
|
||||
7
src/_includes/base.njk
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
---
|
||||
layout: "skeleton.njk"
|
||||
---
|
||||
|
||||
<main>
|
||||
{{ content | safe }}
|
||||
</main>
|
||||
10
src/_includes/docs.njk
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
---
|
||||
layout: skeleton.njk
|
||||
---
|
||||
<main>
|
||||
<p>You are seeing the documentation for: <a href="{{ projectData.url }}">{{ projectData.fileSlug }}</a></p>
|
||||
<hr>
|
||||
<div>
|
||||
{{ content | safe }}
|
||||
</div>
|
||||
</main>
|
||||
11
src/_includes/error.njk
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
---
|
||||
layout: "base.njk"
|
||||
---
|
||||
<h2>{{ page.fileSlug }} - Ouch! We hit a wall.</h2>
|
||||
<p>{{ errorDescription | safe }}</p>
|
||||
{% if errorQuote %}
|
||||
<p class="errorQuote"><i>"{{ errorQuote | safe }}"</i></p>
|
||||
{% endif %}
|
||||
{% if content %}
|
||||
{{ content | safe }}
|
||||
{% endif %}
|
||||
23
src/_includes/featured.njk
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
{% macro projectShowcase(projects, c) %}
|
||||
<div id="featured">
|
||||
<div id="featuredHelper">
|
||||
{% for project in projects %}
|
||||
{% for item in c %}
|
||||
{% if item.fileSlug == project %}
|
||||
{% set projectData = item %}
|
||||
<div class="featuredProject">
|
||||
<a href="/projects/{{ project }}">
|
||||
<img src="{% if projectData.data.logo %}/projects/{{project}}/{{ projectData.data.logo }}{% else %}/assets/mod-placeholder.png{% endif %}">
|
||||
</a>
|
||||
<div>
|
||||
<p class="featuredProjectName">{{ projectData.data.name }}</p>
|
||||
<p class="featuredProjectSubtitle">by <a href="/authors/{{ projectData.data.author }}/">{{ projectData.data.author }}</a></p>
|
||||
<div class="featuredProjectSubtitle dimText">{{ projectData.data.subtitle }}</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
{% endmacro %}
|
||||
17
src/_includes/header.njk
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
<header>
|
||||
<div id="linksBox">
|
||||
<div id="headerLinksAndTitle">
|
||||
<div id="logoTitle">
|
||||
<img src="/assets/logo.png" id="logo">
|
||||
<h1 id="title" class="rainbowText">neoBeta</h1>
|
||||
</div>
|
||||
<ul id="headerLinks">
|
||||
<li><a href="/">home</a></li>
|
||||
<li><a href="/search">search</a></li>
|
||||
<li><a href="/allprojects">index</a></li>
|
||||
<li><a href="/contribute">contribute</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<p id="credits">Adrian Victor, 2025 (<a href="https://git.disroot.org/adrianvictor/neoBeta">Unlicense</a>)</p>
|
||||
</div>
|
||||
</header>
|
||||
52
src/_includes/project.njk
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
---
|
||||
layout: "skeleton.njk"
|
||||
styles: ["project"]
|
||||
---
|
||||
<div id="project">
|
||||
<div id="projectHeader">
|
||||
{% if logo %}
|
||||
<img src="{{ page.dir }}{{ logo }}">
|
||||
{% endif %}
|
||||
<div id="projectTitleSubtitle">
|
||||
<div id="projectTitleAuthor">
|
||||
<h1 id="projectTitle">{{ name }}</h1>
|
||||
<p id="projectAuthor">by <a href="/authors/{{ author }}">{{ author }}</a></p>
|
||||
</div>
|
||||
<p id="projectSubtitle">{{ subtitle }}</p>
|
||||
</div>
|
||||
<a id="downloadLink" href="{{ downloadLink }}"><button id="downloadButton">{% if downloadLink %}Download{% else %}Unavailable{% endif %}</button></a>
|
||||
</div>
|
||||
{% if links or docs or images or releases %}
|
||||
<div id="projectImagesAndInfo">
|
||||
{% include "project_image.njk" %}
|
||||
<div id="projectInfo">
|
||||
<h2>Here's what we found:</h2>
|
||||
{% if links %}
|
||||
<p>{{ links | length }} links.</p>
|
||||
<ul>
|
||||
{% for label, addr in links %}
|
||||
<li><a href="{{ addr }}">{{ label }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
{% if docs %}
|
||||
<p>{{ docs | length }} documentaion files.</p>
|
||||
<ul>
|
||||
{% for label, addr in docs %}
|
||||
<li><a href="{{ addr }}">{{ label }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
<main id="projectDescription">
|
||||
{% if content %}
|
||||
{{ content | safe }}
|
||||
{% else %}
|
||||
<h2>Oopsie! :<</h2>
|
||||
<p>Seems like we don't have a description for this project.</p>
|
||||
<p class="errorQuote"><i>"If only the clockworks could speak<br>I wouldn't be so alone"</i></p>
|
||||
{% endif %}
|
||||
</main>
|
||||
</div>
|
||||
10
src/_includes/project_image.njk
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
{% if images %}
|
||||
<div id="projectImageCarrousel">
|
||||
<p>Images</p>
|
||||
<div id="projectCarrouselImageHolder">
|
||||
{% for image in images %}
|
||||
<a href="{{ page.dir }}{{ image }}"><img class="projectImage" src="{{ page.dir }}{{ image }}" alt=""></a>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
20
src/_includes/skeleton.njk
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<link rel="stylesheet" href="/assets/stylesheets/styles.css" media="screen">
|
||||
{% for stylesheet in styles %}
|
||||
<link rel="stylesheet" href="/assets/stylesheets/{{ stylesheet }}.css">
|
||||
{% endfor %}
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{% if name %}{{ name }} - {% endif %}neoBeta</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="everythingHelper">
|
||||
<aside>
|
||||
{% include "header.njk" %}
|
||||
</aside>
|
||||
{{ content | safe }}
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
38
src/allprojects.njk
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
---
|
||||
layout: base.njk
|
||||
pagination:
|
||||
data: collections.projects
|
||||
size: 10
|
||||
alias: paginatedProjects
|
||||
styles: ["search"]
|
||||
---
|
||||
<ul style="display: flex; flex-direction: column; gap: 1em;">
|
||||
{% for project in paginatedProjects %}
|
||||
<div class="searchItem">
|
||||
<p>
|
||||
{% if project.data.logo %}
|
||||
<img float="left" class="searchItemImage" src="{{ project.url }}{{ project.data.logo }}">
|
||||
{% endif %}
|
||||
<a class="searchItemTitle" href="{{ project.url }}">{{ project.data.name }}</a>
|
||||
{% if project.data.author %}
|
||||
by <a href="/authors/{{ project.data.author }}">{{ project.data.author }}</a>
|
||||
{% endif %}
|
||||
</p>
|
||||
<p class="searchItemDescription">{{ project.data.subtitle }}</p>
|
||||
<div class="searchItemTagHolder">
|
||||
{% for tag in project.data.tags %}
|
||||
<div class="tag-{{ tag }}">{{ tag }}</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
|
||||
<nav>
|
||||
{% if pagination.href.previous %}
|
||||
<a href="{{ pagination.href.previous }}">Prev</a>
|
||||
{% endif %}
|
||||
{% if pagination.href.next %}
|
||||
<a href="{{ pagination.href.next }}">Next</a>
|
||||
{% endif %}
|
||||
</nav>
|
||||
BIN
src/assets/MinecraftRegular-Bmg3.otf
Normal file
BIN
src/assets/logo.png
Normal file
|
After Width: | Height: | Size: 828 B |
BIN
src/assets/mod-placeholder.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
52
src/assets/search.js
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
fetch('/search_index.json')
|
||||
.then(r => r.json())
|
||||
.then(data => {
|
||||
const idx = elasticlunr.Index.load(data);
|
||||
const docs = idx.documentStore.docs;
|
||||
const searchInput = document.getElementById('search');
|
||||
const out = document.getElementById('searchResults');
|
||||
const filterSelect = document.getElementById('searchMode');
|
||||
|
||||
function runSearch(q, tags = 'all') {
|
||||
let result = idx.search(q, { expand: true }).map(r => docs[r.ref] )
|
||||
if (tags === 'all') {
|
||||
return result;
|
||||
}
|
||||
|
||||
result = result.filter(d => tags === 'all' || d.tags.includes(tags));
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
function render(doc) {
|
||||
console.log(doc.imageq)
|
||||
let tagsHTML = "";
|
||||
console.log(doc.tags)
|
||||
|
||||
doc.tags.forEach(tag => {
|
||||
tagsHTML += `<div class="tag-${tag}">${tag}</div>`
|
||||
});
|
||||
|
||||
return `<div class="searchItem">
|
||||
<p>${doc.image ? `<img float=left class="searchItemImage" src="${doc.image}">` : ''} <a class="searchItemTitle" href="${doc.url}">${doc.title}</a>${doc.author ? ` by <a href="/authors/${doc.author}">${doc.author}</a>` : ''}</p>
|
||||
<p class="searchItemDescription">${doc.subtitle}</p>
|
||||
<div class="searchItemTagHolder">
|
||||
${tagsHTML}
|
||||
</div>
|
||||
</div>`;
|
||||
}
|
||||
|
||||
function update() {
|
||||
const q = searchInput.value.trim();
|
||||
if (!q) {
|
||||
out.innerHTML = '';
|
||||
return;
|
||||
}
|
||||
|
||||
const results = runSearch(q, filterSelect.value);
|
||||
out.innerHTML = results.map(render).join('');
|
||||
}
|
||||
|
||||
searchInput.addEventListener('input', update);
|
||||
filterSelect.addEventListener('change', update);
|
||||
});
|
||||
28
src/assets/stylesheets/home.css
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
#homeUpdates {
|
||||
background-color: var(--accent-secondary);
|
||||
border: thick solid var(--accent-color);
|
||||
width: 50%;
|
||||
margin: 0px 2em 2em 2em;
|
||||
padding: 1em;
|
||||
height: fit-content;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
#featureAndUpdates {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
margin-top: 1em;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 1280px) {
|
||||
#featureAndUpdates {
|
||||
flex-direction: column;
|
||||
gap: 1em;
|
||||
flex-flow: column-reverse;
|
||||
}
|
||||
|
||||
#homeUpdates {
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
121
src/assets/stylesheets/project.css
Normal file
|
|
@ -0,0 +1,121 @@
|
|||
#projectTitle {
|
||||
font-size: xx-large;
|
||||
}
|
||||
|
||||
#projectTitleSubtitle {
|
||||
margin-top: auto;
|
||||
margin-bottom: auto;
|
||||
}
|
||||
|
||||
#projectTitleSubtitle h1 {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
#projectHeader {
|
||||
padding-top: 20px;
|
||||
gap: 20px;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
#project {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: var(--box-gap);
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
#downloadLink {
|
||||
color: gray;
|
||||
height: fit-content;
|
||||
margin-top: auto;
|
||||
margin-bottom: auto;
|
||||
margin-left: auto;
|
||||
text-align: right;
|
||||
/* text-shadow: 2px 2px black; */
|
||||
}
|
||||
|
||||
#downloadButton:hover {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#projectHeader img {
|
||||
outline: 2px solid gray;
|
||||
height: 5em;
|
||||
image-rendering: pixelated;
|
||||
}
|
||||
|
||||
#projectTitleAuthor {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
#projectAuthor {
|
||||
margin-left: .6em;
|
||||
margin-top: auto;
|
||||
/* margin-bottom: .4em; */
|
||||
}
|
||||
|
||||
#projectImageCarrousel {
|
||||
outline: 2px solid gray;
|
||||
padding: 1rem;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
width: 50%;
|
||||
}
|
||||
|
||||
#projectCarrouselImageHolder {
|
||||
height: 100%;
|
||||
gap: 1em;
|
||||
overflow: auto;
|
||||
scroll-margin-left: 10px;
|
||||
overflow-x: scroll;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.projectImage {
|
||||
transition: .4s;
|
||||
height: 95%;
|
||||
max-width: 10em;
|
||||
object-fit: cover;
|
||||
/* filter: grayscale(); */
|
||||
}
|
||||
|
||||
/* .projectImage:hover {
|
||||
filter: none;
|
||||
opacity: .8;
|
||||
max-width: 100%;
|
||||
object-fit: unset;
|
||||
} */
|
||||
|
||||
#projectImagesAndInfo {
|
||||
display: flex;
|
||||
gap: 2em;
|
||||
height: 12em;
|
||||
}
|
||||
|
||||
#projectInfo {
|
||||
outline: 2px solid var(--accent-color);
|
||||
background-color: var(--accent-background);
|
||||
flex-grow: 1;
|
||||
padding: 1em;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 1280px) {
|
||||
#projectImagesAndInfo {
|
||||
flex-direction: column;
|
||||
flex-grow: unset;
|
||||
}
|
||||
|
||||
#projectImagesAndInfo {
|
||||
height: unset;
|
||||
}
|
||||
|
||||
#projectInfo {
|
||||
height: 13em;
|
||||
}
|
||||
|
||||
#projectImageCarrousel {
|
||||
height: 13em;
|
||||
width: unset;
|
||||
}
|
||||
}
|
||||
18
src/assets/stylesheets/search.css
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
.searchItemImage {
|
||||
height: 1em;
|
||||
}
|
||||
|
||||
.searchItemTagHolder {
|
||||
display: flex;
|
||||
padding-top: .2em;
|
||||
gap: .4em;
|
||||
}
|
||||
|
||||
.searchItemTagHolder div {
|
||||
border: thin solid greenyellow;
|
||||
padding: .1em .2em .1em .2em;
|
||||
}
|
||||
|
||||
.searchItemDescription {
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
272
src/assets/stylesheets/styles.css
Normal file
|
|
@ -0,0 +1,272 @@
|
|||
:root {
|
||||
--text-color: white;
|
||||
--accent-color: greenyellow;
|
||||
--accent-secondary: green;
|
||||
--box-gap: 2rem;
|
||||
--accent-background: rgb(0, 30, 0);
|
||||
}
|
||||
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
scrollbar-color: var(--accent-color) var(--accent-background);
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: Minecraft;
|
||||
src: url("/assets/MinecraftRegular-Bmg3.otf") format("opentype");
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: Minecraft, 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
||||
background-color: black;
|
||||
color:white;
|
||||
font-size : clamp(1.2rem, .2vw, 2rem);
|
||||
}
|
||||
|
||||
header {
|
||||
display: flex;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
aside {
|
||||
width: min-content;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
color: var(--accent-color);
|
||||
}
|
||||
|
||||
main {
|
||||
outline: 2px solid gray;
|
||||
padding: 1em;
|
||||
background-color: black;
|
||||
height: fit-content;
|
||||
border-radius: 0 0 4px 4px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
/* main:last-child {
|
||||
margin-bottom: 0px;
|
||||
padding-bottom: 0px;
|
||||
} */
|
||||
|
||||
button {
|
||||
padding: 10px;
|
||||
border: medium solid var(--accent-color);
|
||||
background: linear-gradient(var(--accent-color), var(--accent-secondary));
|
||||
border-radius: 2px;
|
||||
color: white;
|
||||
}
|
||||
|
||||
code {
|
||||
background-color: darkslategray;
|
||||
color: var(--accent-color);
|
||||
padding-left: .2em;
|
||||
padding-right: .2em;
|
||||
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
||||
border-radius: 2px;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
input, select {
|
||||
padding: .4em;
|
||||
background-color: black;
|
||||
color: white;
|
||||
border: medium solid var(--accent-color);
|
||||
}
|
||||
|
||||
p, ul {
|
||||
padding-bottom: .6em;
|
||||
}
|
||||
|
||||
img {
|
||||
image-rendering: pixelated;
|
||||
}
|
||||
|
||||
hr {
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
#linksBox {
|
||||
padding: 2em;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
flex-direction: column;
|
||||
width: 100%;
|
||||
background-color: black;
|
||||
outline: 2px solid var(--accent-color);
|
||||
border-radius: 0 0 4px 4px;
|
||||
height: fit-content;
|
||||
gap: 1em;
|
||||
background-color: rgb(0, 30, 0);
|
||||
}
|
||||
|
||||
#headerLinks a {
|
||||
margin-top: auto;
|
||||
margin-bottom: auto;
|
||||
padding: 0;
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
#everythingHelper {
|
||||
max-width: 80%;
|
||||
margin: auto;
|
||||
transform: .2s;
|
||||
display: flex;
|
||||
gap: var(--box-gap);
|
||||
}
|
||||
|
||||
#headerLinks {
|
||||
padding: 0;
|
||||
text-align: left;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
#headerLinksAndTitle {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 1em;
|
||||
}
|
||||
|
||||
#logoTitle {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: .5em;
|
||||
}
|
||||
|
||||
#title {
|
||||
margin: auto;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#logo {
|
||||
height: 8em;
|
||||
}
|
||||
|
||||
#featured {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
#featuredHelper {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
|
||||
.featuredProject {
|
||||
gap: 1em;
|
||||
display: flex;
|
||||
transition: .2s;
|
||||
font-size: smaller;
|
||||
padding: 4px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.featuredProjectName {
|
||||
margin-top: auto;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.featuredProjectSubtitle {
|
||||
overflow: hidden;
|
||||
width: 100%;
|
||||
display: -webkit-box;
|
||||
-webkit-line-clamp: 2;
|
||||
-webkit-box-orient: vertical
|
||||
}
|
||||
|
||||
.featuredProjectSubtitle {
|
||||
padding-bottom: 0px;
|
||||
}
|
||||
|
||||
.featuredProject img {
|
||||
height: 5em;
|
||||
border: medium solid var(--accent-color);
|
||||
}
|
||||
|
||||
.featuredProject p {
|
||||
margin-right: auto;
|
||||
margin-left: auto;
|
||||
text-overflow:clip;
|
||||
}
|
||||
|
||||
#featured h2 {
|
||||
font-size: medium;
|
||||
font-weight: 100;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
#featuredHelper {
|
||||
gap: 10px;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
li {
|
||||
margin-left: 20px;
|
||||
list-style-type: "> ";
|
||||
margin-bottom: .4em;
|
||||
}
|
||||
|
||||
h1, h2, h3 {
|
||||
margin-bottom: .4em;
|
||||
}
|
||||
|
||||
.errorQuote {
|
||||
color: gray;
|
||||
}
|
||||
|
||||
.dimText {
|
||||
opacity: .6;
|
||||
}
|
||||
|
||||
.rainbowText {
|
||||
background: linear-gradient(to right, var(--text-color), var(--accent-color), var(--accent-secondary));
|
||||
-webkit-background-clip: text;
|
||||
background-clip: text;
|
||||
color: transparent;
|
||||
animation: rainbow_animation 6s ease-in-out infinite;
|
||||
background-size: 400% 100%;
|
||||
}
|
||||
|
||||
@keyframes rainbow_animation {
|
||||
0%,100% {
|
||||
background-position: 0 0;
|
||||
}
|
||||
|
||||
50% {
|
||||
background-position: 100% 0;
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 1280px) {
|
||||
#everythingHelper {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
aside {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
#projectTitle {
|
||||
font-size: larger;
|
||||
}
|
||||
|
||||
#headerLinksAndTitle {
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
#headerLinks {
|
||||
margin-left: 2em;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 300px) {
|
||||
|
||||
}
|
||||
4
src/authors/authors.json
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"layout": "author.njk",
|
||||
"tags": "author"
|
||||
}
|
||||
12
src/authors/tenkuma/index.md
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
---
|
||||
name: "tenkuma"
|
||||
subtitle: "A bear doing things on the internet."
|
||||
downloadLink: "https://modrinth.com/plugin/tenkumalib/versions"
|
||||
logoName: "logo"
|
||||
logoExtension: "png"
|
||||
images: ["tenkuma-silverfish.jpg", "tenkuma-mrnando-enderdragon.jpg"]
|
||||
---
|
||||
|
||||
I'm tenkuma. A bear, dreamer and sometimes developer.
|
||||
|
||||
You can find more about me on [my website](https://adrianvictor.rf.gd).
|
||||
BIN
src/authors/tenkuma/logo.png
Normal file
|
After Width: | Height: | Size: 534 B |
BIN
src/authors/tenkuma/tenkuma-mrnando-enderdragon.jpg
Normal file
|
After Width: | Height: | Size: 560 KiB |
BIN
src/authors/tenkuma/tenkuma-silverfish.jpg
Normal file
|
After Width: | Height: | Size: 377 KiB |
4
src/error/404.html
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
---
|
||||
errorQuote: "If only the clockworks could speak<br>I wouldn't be so alone"
|
||||
errorDescription: "We didn't find what you are looking for..."
|
||||
---
|
||||
3
src/error/error.json
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"layout": "error.njk"
|
||||
}
|
||||
BIN
src/favicon/android-chrome-192x192.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
src/favicon/android-chrome-512x512.png
Normal file
|
After Width: | Height: | Size: 96 KiB |
BIN
src/favicon/apple-touch-icon.png
Normal file
|
After Width: | Height: | Size: 21 KiB |
BIN
src/favicon/favicon-16x16.png
Normal file
|
After Width: | Height: | Size: 721 B |
BIN
src/favicon/favicon-32x32.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
src/favicon/favicon.ico
Normal file
|
After Width: | Height: | Size: 15 KiB |
1
src/favicon/site.webmanifest
Normal file
|
|
@ -0,0 +1 @@
|
|||
{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"}
|
||||
20
src/index.njk
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
---
|
||||
layout: "base.njk"
|
||||
styles: ["home"]
|
||||
---
|
||||
|
||||
{% import "featured.njk" as featured %}
|
||||
|
||||
<h1>Howdy, traveler.</h1>
|
||||
<p>This website is <b class="rainbowText">the place</b> for Minecraft plugins, made with users and developers in mind. neobeta is open-source, you can find out how the website is made in our <a href="https://github.com/adrianvic/neoBeta">GitHub repository</a> <span class="dimText">(spoiler: there's some real magic going on).</span></p>
|
||||
<p>Our catalog is made by developers and community, you can get involved by following the tutorial linked <a href="/contribute">here</a>.</p>
|
||||
<div id="featureAndUpdates">
|
||||
<div>
|
||||
<h2>Featured projects</h2>
|
||||
{{ featured.projectShowcase(["ghostsandstuff", "aboukkit", "tenkumalib", "hangglidere", "devilwithin", "timekeeper", "tefreezer"], collections.projects) }}
|
||||
</div>
|
||||
<div id="homeUpdates">
|
||||
<h2>Latest updates</h2>
|
||||
<p>2025-10-27: Website redesign!<br>Yaaay! neoBeta got a stylish redesign.</p>
|
||||
</div>
|
||||
</div>
|
||||
8
src/projects/aboukkit/index.json
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"name": "Aboukkit",
|
||||
"subtitle": "A simple way to add custom commands with custom responses to your server.",
|
||||
"author": "tenkuma",
|
||||
"downloadLink": "https://modrinth.com/plugin/aboukkit/versions",
|
||||
"logo": "logo.png",
|
||||
"tags": ["plugin"]
|
||||
}
|
||||
21
src/projects/aboukkit/index.md
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
|
||||

|
||||
|
||||
This plugin adds a simple way to add custom commands that will respond users with predefined messages from ```config.yml```. It supports Minecraft's color coding (use & instead of §) ~~and placeholders for player/server info~~ (TODO).
|
||||
|
||||
## Default Commands
|
||||
- About
|
||||
- Aboukkit
|
||||
|
||||
These default commands need to be configured.
|
||||
|
||||
## Adding new commands
|
||||
First of all: run the server with the plugin for the first time, so ```config.yml``` is generated.
|
||||
|
||||
Follow the structure that the template shows in your ```config.yml```. Then use a file explorer to open the plugin's JAR file and edit plugin.yml, you can copy a command entry and fill all the fields (be careful with indentation, YML does not support TAB).
|
||||
|
||||
## Why?
|
||||
I made this plugin because I have a server for version b1.7.3 and I wanted to add a /about command to give credit to the server founders and link to our website. So I made this that I will use every time I need a simple 'wall of text' command.
|
||||
|
||||
## Newer versions
|
||||
I don't see why I would build this for latest versions, I guess there are already better solutions. I made this just because of the lack of plugins for Minecraft beta.
|
||||
BIN
src/projects/aboukkit/logo.png
Normal file
|
After Width: | Height: | Size: 6.3 KiB |
8
src/projects/devilwithin/index.json
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"name": "The Devil Within",
|
||||
"subtitle": "Adds enchanting to Minecraft Beta. Supports balancing through curses.",
|
||||
"author": "tenkuma",
|
||||
"downloadLink": "https://modrinth.com/plugin/devilwithin/versions",
|
||||
"logo": "logo.png",
|
||||
"tags": ["plugin"]
|
||||
}
|
||||
31
src/projects/devilwithin/index.md
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
This plugin is a remake of [GoldEnchant](https://dev.bukkit.org/projects/goldenchant/).
|
||||
This plugin depends on [tenkumaLib](https://modrinth.com/plugin/tenkumalib).
|
||||
|
||||
Have you ever wanted to have enchantments in your beta server? This is the plugin you want.
|
||||
|
||||
## Enchanting
|
||||
To enchant a armor piece you need to interact to a diamond block with a diamond armor piece in your hand.
|
||||
|
||||
## Enchantments and Curses
|
||||
All of those enchantments will not take effect if the damage exceeds the player's HP. An armor get cursed if it's durability is below 30%. Spooky bad stuff will happen if your armor is cursed :D
|
||||
|
||||
### Helmet
|
||||
- Prevents the player from drowning.
|
||||
- The player cannot sleep. If the player try to sleep a entity will tell the player the text set in the config.
|
||||
|
||||
### Chestplate
|
||||
- Prevents fire damage. Does not prevent lava damage.
|
||||
- Protects the player from fire damage only half of the time, also has a 25% chance to ignite the player every time it takes damage.
|
||||
|
||||
### Leggings
|
||||
- Nothing for now. Only useful for the full-set perks.
|
||||
- Makes player run slower 50% of the time a PlayerMoveEvent happens. The speed is randomly generated.
|
||||
|
||||
### Boots
|
||||
Prevents fall damage.
|
||||
|
||||
### Full-set perks
|
||||
If the player has a full-set of enchanted armor the condition of the damage being taken if it's greater than the player's HP is ignored, also the player gets immune to contact damage (cactus), lava damage and lava damage.
|
||||
|
||||
## Config
|
||||
Everything is explained in the config file's comments, in case it changes.
|
||||
BIN
src/projects/devilwithin/logo.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
src/projects/ghostsandstuff/anti-spam.png
Normal file
|
After Width: | Height: | Size: 94 KiB |
|
|
@ -0,0 +1,6 @@
|
|||
## Installation instructions for GhostsAndStuff
|
||||
- Download the plugin JAR
|
||||
- Download the dependency JAR (tenkumaLib)
|
||||
- Move both to your server's `plugin` folder.
|
||||
|
||||
After following these steps the plugin should appear in the plugin list when you turn the server on.
|
||||
16
src/projects/ghostsandstuff/index.json
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"name": "Ghosts 'n Stuff",
|
||||
"subtitle": "Miscellaneous additions to your Minecraft server.",
|
||||
"author": "tenkuma",
|
||||
"downloadLink": "https://modrinth.com/plugin/ghosts/versions",
|
||||
"images": ["anti-spam.png", "rainbow-chat.png", "skibidi-blocker.png"],
|
||||
"logo": "logo.png",
|
||||
"tags": ["plugin"],
|
||||
"links": {
|
||||
"GitHub": "https://github.com/adrianvic/ghostsandstuff",
|
||||
"Disroot Git": "https://git.disroot.org/adrianvictor/ghostsandstuff"
|
||||
},
|
||||
"docs": {
|
||||
"Installation" : "docs/example_documentation"
|
||||
}
|
||||
}
|
||||
6
src/projects/ghostsandstuff/index.md
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
This plugins was made to use stuff from my library that would not fit into any plugin (or not in the way presented here) that has ~~a lot~~ (WIP) of random stuff. Everything should be togglable in the config.
|
||||
|
||||
## Features
|
||||
- **RainbowChat:** Rainbow color code (&z by default).
|
||||
- **SkibidiBlocker:** Strike a lightning on players that say a word.
|
||||
- **AntiSpam:** Blocks repeated words in the chat. Optionally can strike a lightning to the player who is spamming.
|
||||
BIN
src/projects/ghostsandstuff/logo.png
Normal file
|
After Width: | Height: | Size: 9.9 KiB |
BIN
src/projects/ghostsandstuff/rainbow-chat.png
Normal file
|
After Width: | Height: | Size: 92 KiB |
BIN
src/projects/ghostsandstuff/skibidi-blocker.png
Normal file
|
After Width: | Height: | Size: 305 KiB |
6
src/projects/hangglidere/index.json
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"name": "HangGlideRE",
|
||||
"subtitle": "Fly with a chicken!",
|
||||
"author": "tenkuma",
|
||||
"tags": ["plugin"]
|
||||
}
|
||||
0
src/projects/hangglidere/index.md
Normal file
1
src/projects/projects.json
Normal file
|
|
@ -0,0 +1 @@
|
|||
{ "layout": "project.njk" }
|
||||
8
src/projects/tefreezer/index.json
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"name": "teFreezer",
|
||||
"subtitle": "Force your players to refrigerate their food by rotting food in unrefrigerated chests!",
|
||||
"author": "tenkuma",
|
||||
"downloadLink": "https://modrinth.com/plugin/freezer/versions",
|
||||
"logo": "logo.png",
|
||||
"tags": ["plugin"]
|
||||
}
|
||||
15
src/projects/tefreezer/index.md
Normal file
|
|
@ -0,0 +1,15 @@
|
|||

|
||||
|
||||
teFreezer is a fork of [Freezer by outadoc](https://dev.bukkit.org/projects/freezer), logo by [malcolmriley](https://github.com/malcolmriley/unused-textures/blob/master/items/food_pepper.png).
|
||||
|
||||
This plugins purpose is to force people in your server to refrigerate their food by placing a cold block around their chest with the food. In case there is no cold block around the chest, it will turn the food into a rotted item.
|
||||
|
||||
## Configuration
|
||||
In the ```config.yml``` you can set these values:
|
||||
- Cold blocks
|
||||
- Resulting itens
|
||||
- Itens that can rot
|
||||
- Message for when the user let food rot
|
||||
|
||||
## Why fork?
|
||||
I have forked this plugin because I was really anoyed by the original plugin that broadcasts the message to the whole server once anyone let food rot and the lack of a configuration file.
|
||||
BIN
src/projects/tefreezer/logo.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
8
src/projects/tenkumalib/index.json
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"name": "tenkuma's Library",
|
||||
"subtitle": "Library to support my other plugins. Does nothing on it's own.",
|
||||
"author": "tenkuma",
|
||||
"downloadLink": "https://modrinth.com/plugin/tenkumalib/versions",
|
||||
"logo": "logo.png",
|
||||
"tags": ["plugin"]
|
||||
}
|
||||
5
src/projects/tenkumalib/index.md
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
This is a dependency for my other projects. This does not do anything on it's own.
|
||||
|
||||
## Why do I have to install this alongside your plugins?
|
||||
|
||||
You may think that installing two plugins instead of one is installing unecessary bloat that is useless. But it's not, libraries hold code that is common to more than one project, so you avoid having the same code repeated twice or more in your server. Also it's easier for the developer that has to improve only a single codebase to improve all the rest of the dependants.
|
||||
BIN
src/projects/tenkumalib/logo.png
Normal file
|
After Width: | Height: | Size: 534 B |
8
src/projects/timekeeper/index.json
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"name": "TimeKeeper",
|
||||
"subtitle": "Syncs real world time with your Minecraft server time.",
|
||||
"author": "tenkuma",
|
||||
"downloadLink": "https://modrinth.com/plugin/timekeeper/versions",
|
||||
"logo": "logo.png",
|
||||
"tags": ["plugin"]
|
||||
}
|
||||
14
src/projects/timekeeper/index.md
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
This is a plugin for Minecraft beta that syncs the real world time with your in-game time. Logo by [malcolmriley](https://github.com/malcolmriley/unused-textures/blob/master/items/).
|
||||
|
||||
## How it works
|
||||
It will calculate and change the game time every second (that's 20 ticks and can be changed in the config), it will use your computer's timezone as default if the config `timezone` value does not exist.
|
||||
|
||||
## Performance
|
||||
I am not sure if this plugin has any significant performance hit, it runs code every few ticks (you can in/decrease the frequency in the config) and that is not the best approach for doing this, but it's the only that works in beta. Using it with `ticksBetweenUpdate: 1` does not seem to change the performance in any way. The specifications for the computer used for the tests:
|
||||
|
||||
```
|
||||
Host: 83AF IdeaPad 1 14IAU7
|
||||
CPU: 12th Gen Intel i5-1235U (12) @ 1.300GHz
|
||||
GPU: Intel Alder Lake-UP3 GT2 [Iris Xe Graphics]
|
||||
Memory: 10097MiB / 15709MiB
|
||||
```
|
||||
BIN
src/projects/timekeeper/logo.png
Normal file
|
After Width: | Height: | Size: 730 B |
27
src/search.njk
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
---
|
||||
styles: ["search"]
|
||||
layout: "base.njk"
|
||||
---
|
||||
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/elasticlunr/0.9.6/elasticlunr.min.js"></script>
|
||||
<script src="/assets/search.js" defer></script>
|
||||
|
||||
<style>
|
||||
main {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 1em;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p>Welcome to neoBeta's search, here you can search through our whole database of plugins, mods and authors. You may want to filter out the results using the dropdown menu below. The search is done on your device using <a href="https://github.com/weixsong/elasticlunr.js">elasticlunr</a>.</p>
|
||||
|
||||
<div style="display: flex; gap: .5em;">
|
||||
<input type="text" id="search" placeholder="Search..." style="flex-grow: 1;"/>
|
||||
<select name="Search mode" id="searchMode">
|
||||
<option value="all" selected>All</option>
|
||||
<option value="plugin">Plugins</option>
|
||||
<option value="mod">Mods</option>
|
||||
<option value="author">Authors</option>
|
||||
</select>
|
||||
</div>
|
||||
<div id="searchResults" style="display: flex; gap: 1em; flex-direction: column;"></div>
|
||||