Skip to content

Commit 5213b42

Browse files
committed
feat: add API base and functional
1 parent 4701bd3 commit 5213b42

18 files changed

Lines changed: 438 additions & 208 deletions

.github/workflows/build.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ jobs:
1717
- name: setup jdk
1818
uses: actions/setup-java@v4
1919
with:
20-
java-version: '25'
21-
distribution: 'microsoft'
20+
java-version: '21'
21+
distribution: 'temurin'
2222
- name: make gradle wrapper executable
2323
run: chmod +x ./gradlew
2424
- name: build

LICENSE

Lines changed: 21 additions & 121 deletions
Original file line numberDiff line numberDiff line change
@@ -1,121 +1,21 @@
1-
Creative Commons Legal Code
2-
3-
CC0 1.0 Universal
4-
5-
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
6-
LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
7-
ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
8-
INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
9-
REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
10-
PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
11-
THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
12-
HEREUNDER.
13-
14-
Statement of Purpose
15-
16-
The laws of most jurisdictions throughout the world automatically confer
17-
exclusive Copyright and Related Rights (defined below) upon the creator
18-
and subsequent owner(s) (each and all, an "owner") of an original work of
19-
authorship and/or a database (each, a "Work").
20-
21-
Certain owners wish to permanently relinquish those rights to a Work for
22-
the purpose of contributing to a commons of creative, cultural and
23-
scientific works ("Commons") that the public can reliably and without fear
24-
of later claims of infringement build upon, modify, incorporate in other
25-
works, reuse and redistribute as freely as possible in any form whatsoever
26-
and for any purposes, including without limitation commercial purposes.
27-
These owners may contribute to the Commons to promote the ideal of a free
28-
culture and the further production of creative, cultural and scientific
29-
works, or to gain reputation or greater distribution for their Work in
30-
part through the use and efforts of others.
31-
32-
For these and/or other purposes and motivations, and without any
33-
expectation of additional consideration or compensation, the person
34-
associating CC0 with a Work (the "Affirmer"), to the extent that he or she
35-
is an owner of Copyright and Related Rights in the Work, voluntarily
36-
elects to apply CC0 to the Work and publicly distribute the Work under its
37-
terms, with knowledge of his or her Copyright and Related Rights in the
38-
Work and the meaning and intended legal effect of CC0 on those rights.
39-
40-
1. Copyright and Related Rights. A Work made available under CC0 may be
41-
protected by copyright and related or neighboring rights ("Copyright and
42-
Related Rights"). Copyright and Related Rights include, but are not
43-
limited to, the following:
44-
45-
i. the right to reproduce, adapt, distribute, perform, display,
46-
communicate, and translate a Work;
47-
ii. moral rights retained by the original author(s) and/or performer(s);
48-
iii. publicity and privacy rights pertaining to a person's image or
49-
likeness depicted in a Work;
50-
iv. rights protecting against unfair competition in regards to a Work,
51-
subject to the limitations in paragraph 4(a), below;
52-
v. rights protecting the extraction, dissemination, use and reuse of data
53-
in a Work;
54-
vi. database rights (such as those arising under Directive 96/9/EC of the
55-
European Parliament and of the Council of 11 March 1996 on the legal
56-
protection of databases, and under any national implementation
57-
thereof, including any amended or successor version of such
58-
directive); and
59-
vii. other similar, equivalent or corresponding rights throughout the
60-
world based on applicable law or treaty, and any national
61-
implementations thereof.
62-
63-
2. Waiver. To the greatest extent permitted by, but not in contravention
64-
of, applicable law, Affirmer hereby overtly, fully, permanently,
65-
irrevocably and unconditionally waives, abandons, and surrenders all of
66-
Affirmer's Copyright and Related Rights and associated claims and causes
67-
of action, whether now known or unknown (including existing as well as
68-
future claims and causes of action), in the Work (i) in all territories
69-
worldwide, (ii) for the maximum duration provided by applicable law or
70-
treaty (including future time extensions), (iii) in any current or future
71-
medium and for any number of copies, and (iv) for any purpose whatsoever,
72-
including without limitation commercial, advertising or promotional
73-
purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
74-
member of the public at large and to the detriment of Affirmer's heirs and
75-
successors, fully intending that such Waiver shall not be subject to
76-
revocation, rescission, cancellation, termination, or any other legal or
77-
equitable action to disrupt the quiet enjoyment of the Work by the public
78-
as contemplated by Affirmer's express Statement of Purpose.
79-
80-
3. Public License Fallback. Should any part of the Waiver for any reason
81-
be judged legally invalid or ineffective under applicable law, then the
82-
Waiver shall be preserved to the maximum extent permitted taking into
83-
account Affirmer's express Statement of Purpose. In addition, to the
84-
extent the Waiver is so judged Affirmer hereby grants to each affected
85-
person a royalty-free, non transferable, non sublicensable, non exclusive,
86-
irrevocable and unconditional license to exercise Affirmer's Copyright and
87-
Related Rights in the Work (i) in all territories worldwide, (ii) for the
88-
maximum duration provided by applicable law or treaty (including future
89-
time extensions), (iii) in any current or future medium and for any number
90-
of copies, and (iv) for any purpose whatsoever, including without
91-
limitation commercial, advertising or promotional purposes (the
92-
"License"). The License shall be deemed effective as of the date CC0 was
93-
applied by Affirmer to the Work. Should any part of the License for any
94-
reason be judged legally invalid or ineffective under applicable law, such
95-
partial invalidity or ineffectiveness shall not invalidate the remainder
96-
of the License, and in such case Affirmer hereby affirms that he or she
97-
will not (i) exercise any of his or her remaining Copyright and Related
98-
Rights in the Work or (ii) assert any associated claims and causes of
99-
action with respect to the Work, in either case contrary to Affirmer's
100-
express Statement of Purpose.
101-
102-
4. Limitations and Disclaimers.
103-
104-
a. No trademark or patent rights held by Affirmer are waived, abandoned,
105-
surrendered, licensed or otherwise affected by this document.
106-
b. Affirmer offers the Work as-is and makes no representations or
107-
warranties of any kind concerning the Work, express, implied,
108-
statutory or otherwise, including without limitation warranties of
109-
title, merchantability, fitness for a particular purpose, non
110-
infringement, or the absence of latent or other defects, accuracy, or
111-
the present or absence of errors, whether or not discoverable, all to
112-
the greatest extent permissible under applicable law.
113-
c. Affirmer disclaims responsibility for clearing rights of other persons
114-
that may apply to the Work or any use thereof, including without
115-
limitation any person's Copyright and Related Rights in the Work.
116-
Further, Affirmer disclaims responsibility for obtaining any necessary
117-
consents, permissions or other rights required for any use of the
118-
Work.
119-
d. Affirmer understands and acknowledges that Creative Commons is not a
120-
party to this document and has no duty or obligation with respect to
121-
this CC0 or use of the Work.
1+
MIT License
2+
3+
Copyright (c) 2026 superstrellaa
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

README.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# StorageManager API
2+
3+
The StorageManager API provides a set of functions to manage and interact with different storage systems. It allows users to perform operations such as creating, reading, updating, and deleting data in a structured manner.
4+
5+
## Features
6+
- Create, read, update, and delete data in various storage systems.
7+
- Using SQLite as the default storage backend.
8+
- Easy-to-use interface for managing storage operations in your own mod.
9+
10+
//TODO

build.gradle

Lines changed: 4 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -3,30 +3,22 @@ plugins {
33
id 'maven-publish'
44
}
55

6-
version = project.mod_version
6+
version = "${project.mod_version}+${project.minecraft_version}"
77
group = project.maven_group
88

99
base {
1010
archivesName = project.archives_base_name
1111
}
1212

13-
repositories {
14-
// Add repositories to retrieve artifacts from in here.
15-
// You should only use this when depending on other mods because
16-
// Loom adds the essential maven repositories to download Minecraft and libraries from automatically.
17-
// See https://docs.gradle.org/current/userguide/declaring_repositories.html
18-
// for more information about repositories.
19-
}
20-
2113
dependencies {
22-
// To change the versions see the gradle.properties file
2314
minecraft "com.mojang:minecraft:${project.minecraft_version}"
2415
mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2"
2516
modImplementation "net.fabricmc:fabric-loader:${project.loader_version}"
2617

27-
// Fabric API. This is technically optional, but you probably want it anyway.
2818
modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_api_version}"
29-
19+
20+
// SQLite JDBC Driver
21+
implementation(include("org.xerial:sqlite-jdbc:${project.sqlite_jdbc_version}"))
3022
}
3123

3224
processResources {
@@ -42,12 +34,6 @@ tasks.withType(JavaCompile).configureEach {
4234
}
4335

4436
java {
45-
// Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task
46-
// if it is present.
47-
// If you remove this line, sources will not be generated.
48-
withSourcesJar()
49-
50-
sourceCompatibility = JavaVersion.VERSION_21
5137
targetCompatibility = JavaVersion.VERSION_21
5238
}
5339

@@ -57,22 +43,4 @@ jar {
5743
from("LICENSE") {
5844
rename { "${it}_${inputs.properties.archivesName}"}
5945
}
60-
}
61-
62-
// configure the maven publication
63-
publishing {
64-
publications {
65-
create("mavenJava", MavenPublication) {
66-
artifactId = project.archives_base_name
67-
from components.java
68-
}
69-
}
70-
71-
// See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing.
72-
repositories {
73-
// Add repositories to publish to here.
74-
// Notice: This block does NOT have the same function as the block in the top level.
75-
// The repositories here will be used for publishing your artifact, not for
76-
// retrieving dependencies.
77-
}
7846
}

gradle.properties

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,5 @@ maven_group=es.superstrellaa.storagemanager
1818
archives_base_name=storagemanager-api
1919

2020
# Dependencies
21-
fabric_api_version=0.116.8+1.21.1
21+
fabric_api_version=0.116.8+1.21.1
22+
sqlite_jdbc_version=3.51.1.0
Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,21 @@
11
package es.superstrellaa.storagemanager;
22

3+
import es.superstrellaa.storagemanager.internal.SQLiteBackend;
4+
import es.superstrellaa.storagemanager.internal.lifecycle.ShutdownHook;
35
import net.fabricmc.api.ModInitializer;
4-
56
import org.slf4j.Logger;
67
import org.slf4j.LoggerFactory;
78

89
public class StorageManagerAPI implements ModInitializer {
9-
public static final String MOD_ID = "storagemanager-api";
1010

11-
// This logger is used to write text to the console and the log file.
12-
// It is considered best practice to use your mod id as the logger's name.
13-
// That way, it's clear which mod wrote info, warnings, and errors.
11+
public static final String MOD_ID = "storagemanager-api";
1412
public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID);
1513

1614
@Override
1715
public void onInitialize() {
18-
// This code runs as soon as Minecraft is in a mod-load-ready state.
19-
// However, some things (like resources) may still be uninitialized.
20-
// Proceed with mild caution.
16+
SQLiteBackend.init();
17+
ShutdownHook.register();
2118

22-
LOGGER.info("Hello Fabric world!");
19+
LOGGER.info("StorageManager API initialized");
2320
}
24-
}
21+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package es.superstrellaa.storagemanager.api;
2+
3+
import es.superstrellaa.storagemanager.api.data.RowData;
4+
import es.superstrellaa.storagemanager.api.schema.TableSchema;
5+
import es.superstrellaa.storagemanager.internal.TableExecutor;
6+
7+
import java.util.List;
8+
import java.util.Map;
9+
10+
public final class StorageManager {
11+
12+
public static void registerTable(TableSchema schema) {
13+
TableExecutor.createTable(schema);
14+
}
15+
16+
public static void insert(String table, RowData data) {
17+
TableExecutor.insert(table, data);
18+
}
19+
20+
public static List<RowData> select(String table, Map<String, Object> where) {
21+
return TableExecutor.select(table, where);
22+
}
23+
24+
public static void delete(String table, Map<String, Object> where) {
25+
TableExecutor.delete(table, where);
26+
}
27+
28+
private StorageManager() {}
29+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package es.superstrellaa.storagemanager.api.data;
2+
3+
import java.util.HashMap;
4+
import java.util.Map;
5+
6+
public final class RowData {
7+
8+
private final Map<String, Object> values = new HashMap<>();
9+
10+
public RowData set(String column, Object value) {
11+
values.put(column, value);
12+
return this;
13+
}
14+
15+
public Map<String, Object> values() {
16+
return values;
17+
}
18+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package es.superstrellaa.storagemanager.api.schema;
2+
3+
public record Column(
4+
String name,
5+
ColumnType type,
6+
boolean notNull
7+
) {}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package es.superstrellaa.storagemanager.api.schema;
2+
3+
public enum ColumnType {
4+
INTEGER("INTEGER"),
5+
REAL("REAL"),
6+
TEXT("TEXT"),
7+
BLOB("BLOB");
8+
9+
private final String sql;
10+
11+
ColumnType(String sql) {
12+
this.sql = sql;
13+
}
14+
15+
public String getSql() {
16+
return sql;
17+
}
18+
}

0 commit comments

Comments
 (0)