Compare commits

...

14 commits

Author SHA1 Message Date
Hiajen Hiajen 30b5888657 Merge pull request 'update some lib versions' (#15) from #14-bump_version into master
Reviewed-on: #15

closes #14
2021-12-11 17:24:46 +01:00
Hiajen Hiajen 2c1d63966c update some lib versions 2021-12-11 17:20:20 +01:00
Hiajen Hiajen 23286e1ec3 Merge pull request '#11 Provide readonly config, extend readme, refactor database location' (#12) from 11-Readonly_Database into master
Reviewed-on: #12
2021-07-28 19:31:52 +02:00
Hiajen Hiajen 4192c554a5 #11 spelling 2021-07-28 19:30:34 +02:00
Hiajen Hiajen 87d167d87b #11 Provide readonly config, extend readme, refactor database location 2021-07-27 12:17:39 +02:00
Marcel Marcel cd0d8928b1 Merge pull request '#8 implement grade as number and gradient' (#9) from #8-Grade-As-Number into master
Gesehen und fuer gut befunden.
Reviewed-on: #9
2021-07-24 21:30:14 +02:00
Hiajen Hiajen 3d2ba396ef #8 implement grade as number and gradient 2021-07-24 20:06:51 +02:00
Hiajen Hiajen df3f64bcf3 Merge pull request '#1-settings_properties' (#7) from #1-settings_properties into master
Reviewed-on: #7
2021-06-25 23:09:05 +02:00
Hiajen Hiajen 8e829e3a01 version Up, edit readme 2021-06-25 23:07:31 +02:00
Hiajen Hiajen 1d69f7d2a4 implement settings as Properties 2021-06-25 23:03:00 +02:00
Hiajen Hiajen 3e7c44106d Merge pull request 'add new Tag, Use Style instead of Textformating, implement grade indicator, fix offset' (#6) from #4-#3-add_new_tag_and_implement_grade_indication into master
Reviewed-on: #6
2021-06-25 22:07:33 +02:00
Hiajen Hiajen df9060798d implement gradient from tag color to grey 2021-06-25 22:02:56 +02:00
Hiajen Hiajen 593360c2aa change color 2021-06-23 20:36:39 +02:00
Hiajen Hiajen dead4f21a8 add new Tag, Use Style instead of Textformating, implement grade indicator, fix offset 2021-06-23 20:27:19 +02:00
18 changed files with 215 additions and 59 deletions

View file

@ -1,4 +1,56 @@
EAA_MOD
===============
This MOD is created by the "Eggwars Am Abend" (EAA) Squad, to increase fun playing Minecraft by avoiding hacking/idiotic players and providing some useful tools.
This mod is 100% client side and does not interact with the server you are playing on.
EAA
## Features
Following a list of features, this mod provides
### TAG
It's basically a report system.
Users are able to tag other players with a set of tags. As example as Hacker/Friend/Good player and so on.
In addition, the tag gets weighted by a scale from 0 to 10.
Tagged players are shown when pressing TAB, including their recent tag with grade.
Other commands like playercheck/lobbycheck also use tag data.
### Ping as Number
Heavily inspired by this cool project, check it out!
https://www.curseforge.com/minecraft/mc-mods/better-ping-display-fabric
### Echo
uhm ... yeh ... it echos ... uhm ... you
(used as PoC, will be removed sooner or later)
## Commands
All mod commands start with a double slash (`//`), so they don't get confused with other commands
* `//tag <player> <tag> <grade>`
* Tags player with chosen tag and grade. On success, a notification is shown.
* `//lobby`
* Checks if any unwanted players (Hacker/Idiot/Noob) are in the current lobby.
* `//check <player>`
* shows detailed information about a player, including past player names and tags.
* `//echo <text>`
* reply with text
* `//reload`
* reloads cashed players. Useful when playing in a team and someone tagged another player. Otherwise, the tag would not appear till next game start.
## Settings
Mod needs a file in mod folder called settings.properties containing following values:
```
url=mysql://<DATABASE_URL>/
user=<DATABASE USER>
password=<DATABASE USER PASSWORD>
db_name=<DATABASE NAME>
```
A working sample config is provided in the config folder, setup with a read only user of the developers Database.
## Database
Database-Model and SQL-Starterscript can be found in the config/database folder.
The Mod itself does not create the needed Database structure. The user has to init the Database by himself.

View file

@ -1,5 +1,5 @@
plugins {
id 'fabric-loom' version '0.7-SNAPSHOT'
id 'fabric-loom' version '0.10-SNAPSHOT'
}
sourceCompatibility = JavaVersion.VERSION_1_8
@ -24,12 +24,11 @@ dependencies {
modImplementation "net.fabricmc:fabric-loader:${project.loader_version}"
//include group: 'org.postgresql', name: 'postgresql', version: '42.2.9'
// https://mvnrepository.com/artifact/mysql/mysql-connector-java
//implementation(include('mysql:mysql-connector-java:8.0.25'))
include group: 'mysql', name: 'mysql-connector-java', version: '8.0.25'
implementation group: 'mysql', name: 'mysql-connector-java', version: '8.0.25'
include group: 'mysql', name: 'mysql-connector-java', version: "${project.jdbc_mysql}"
implementation group: 'mysql', name: 'mysql-connector-java', version: "${project.jdbc_mysql}"
//modImplementation(group: 'mysql', name: 'mysql-connector-java', version: '8.0.25')
include group: 'com.googlecode.json-simple', name: 'json-simple', version: '1.1.1'
implementation group: 'com.googlecode.json-simple', name: 'json-simple', version: '1.1.1'
include group: 'com.googlecode.json-simple', name: 'json-simple', version: "${project.json_simple}"
implementation group: 'com.googlecode.json-simple', name: 'json-simple', version: "${project.json_simple}"
// Fabric API. This is technically optional, but you probably want it anyway.
modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}"

View file

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View file

@ -0,0 +1,4 @@
url=mysql://mysql2f88.netcup.net/
user=k85020_EAA_MOD_RO
password=EeChf3dfZmwDgMo4rYSFj9bC9i5EaFkKtXfw5F7hPSQyKTZfNv3qougR3jn99ehUiRAgyr9ypLQJUyQhDQAdLf35ymst5sXf34Zo
db_name=k85020_EAA_MOD

View file

@ -4,14 +4,19 @@ org.gradle.jvmargs=-Xmx1G
# Fabric Properties
# check these on https://fabricmc.net/versions.html
minecraft_version=1.16.5
yarn_mappings=1.16.5+build.9
loader_version=0.11.3
yarn_mappings=1.16.5+build.10
loader_version=0.12.11
# Mod Properties
mod_version = 1.0.1
mod_version = 1.1.3
maven_group = net.saltymc.eaa
archives_base_name = EAA_MOD
# Dependencies
# currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api (or https://fabricmc.net/versions.html)
fabric_version=0.34.2+1.16
fabric_version=0.42.0+1.16
#SQL
jdbc_mysql=8.0.27
#JSON
json_simple=1.1.1

View file

@ -2,6 +2,7 @@ package net.saltymc.eaa;
import net.saltymc.eaa.commands.*;
import net.saltymc.eaa.util.io.PropertieLoader;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@ -9,15 +10,27 @@ import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import java.util.Properties;
@Environment(EnvType.CLIENT)
public final class EaaMod implements ClientModInitializer {
public static final Logger LOGGER = LogManager.getLogger("EAA-MOD");
private static final String SETTINGS_FILE_NAME = "settings.properties";
public static final Logger LOGGER = LogManager.getLogger("EAA-MOD");
private static Properties settings;
public static Logger getLogger() {
return LOGGER;
}
public static Properties getSettings(){
if (settings == null)
settings = PropertieLoader.loadProperties(SETTINGS_FILE_NAME);
return settings;
}
@Override
public void onInitializeClient() {

View file

@ -35,15 +35,17 @@ public class TagCommand extends EaaModCommand{
.then(
argument("player", StringArgumentType.word())
.suggests((ctx, builder) -> EntityArgumentType.player().listSuggestions(ctx, builder))
.then(argument("tag", StringArgumentType.word())
.suggests(((context, builder) -> {
for (DB_Tag.Type tag : DB_Tag.Type.values())
builder.suggest(tag.name());
return builder.buildFuture();
}))
.then(
argument("grade", IntegerArgumentType.integer(0,10))
.executes(this)
)));
.then(
argument("tag", StringArgumentType.word())
.suggests(((context, builder) -> {
for (DB_Tag.Type tag : DB_Tag.Type.values())
builder.suggest(tag.name());
return builder.buildFuture();
}))
.then(
argument("grade", IntegerArgumentType.integer(0,10))
.suggests((ctx, builder) -> IntegerArgumentType.integer(0,10).listSuggestions(ctx, builder))
.executes(this)
)));
}
}

View file

@ -27,7 +27,6 @@ import net.minecraft.text.OrderedText;
import net.minecraft.text.Text;
import net.minecraft.world.GameMode;
import net.saltymc.eaa.function.TagFunction;
import net.saltymc.eaa.util.database.DB_Tag;
/**
* By: https://github.com/vladmarica/better-ping-display-fabric/
@ -164,10 +163,21 @@ public final class CustomPlayerListHud {
/*
* PLAYER TAG
*/
int offset_tag_playername = aa;
DB_Tag.Type playerTAG = TagFunction.getScoreboardTag(player.getProfile().getId().toString());
mc.textRenderer.drawWithShadow(stack, playerTAG.getTag(), (float)aa, (float)ab, playerTAG.getColor());
offset_tag_playername += mc.textRenderer.getWidth(playerTAG.getTag()) + 2;
int offset_tag_playername = aa; // safe current x offset ->
TagDTO playerTAG = TagFunction.getScoreboardTag(player.getProfile().getId().toString()); // retrieve Tag object
mc.textRenderer.drawWithShadow(stack, playerTAG.getType().getTag(), (float)aa, (float)ab, playerTAG.getType().getColor()); // draw tag name
offset_tag_playername += mc.textRenderer.getWidth(playerTAG.getType().getTag()) + 1; // add tag name length to offset
// current offset plus amount to center grade text
float tmp_x = offset_tag_playername
+ ((mc.textRenderer.getWidth("10") - mc.textRenderer.getWidth(playerTAG.getGrade() < 1 ? "|" : playerTAG.getGrade() +""))
/ 2.0f);
mc.textRenderer.drawWithShadow(stack,
playerTAG.getGrade() < 1 ? "|" : playerTAG.getGrade() +"", // if not given draw a pipe
(float) tmp_x, (float) ab, playerTAG.getGradeColor());
offset_tag_playername += mc.textRenderer.getWidth("10") + 2; // add offset of largest character
Text playerName = hud.getPlayerName(player);
@ -178,7 +188,7 @@ public final class CustomPlayerListHud {
}
if (obj != null && player.getGameMode() != GameMode.SPECTATOR) {
int ag = aa + i + 1;
int ag = offset_tag_playername + i + 1;
ah = ag + q;
if (ah - ag > 5) {
PlayerListHudUtil.renderScoreboardObjective(hud, stack, obj, ab, gameProfile.getName(), ag, ah, player);

View file

@ -33,7 +33,7 @@ public class PingColors {
computeOffset(PING_MID, PING_END, Math.min(ping, PING_END)));
}
static float computeOffset(int start, int end, int value) {
public static float computeOffset(int start, int end, int value) {
float offset = (value - start) / (float) ( end - start);
return MathHelper.clamp(offset, 0.0F, 1.0F);
}

View file

@ -0,0 +1,39 @@
package net.saltymc.eaa.custom.ping;
import net.saltymc.eaa.util.database.DB_Tag;
import static net.saltymc.eaa.custom.ping.PingColors.computeOffset;
public class TagDTO {
final int grade;
final int gradeColor;
final DB_Tag.Type type;
public TagDTO(int grade, DB_Tag.Type type) {
this.grade = grade;
this.gradeColor = calcGradient(grade, type);
this.type = type;
}
public int getGradeColor() {
return gradeColor;
}
public DB_Tag.Type getType() {
return type;
}
private static int calcGradient(int grade, DB_Tag.Type type){
if (grade < 1)
return 0xaaaaaa;
return ColorUtil.interpolate(
0xaaaaaa,
type.getColor(),
computeOffset(0, 10, grade));
}
public int getGrade(){
return grade;
}
}

View file

@ -4,7 +4,9 @@ import net.fabricmc.fabric.api.client.command.v1.FabricClientCommandSource;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.toast.SystemToast;
import net.minecraft.text.LiteralText;
import net.minecraft.text.Style;
import net.minecraft.text.Text;
import net.minecraft.text.TextColor;
import net.minecraft.util.Formatting;
import net.saltymc.eaa.util.database.DB_Player;
import net.saltymc.eaa.util.database.DB_Tag;
@ -57,7 +59,7 @@ public class CheckFunction {
source.sendFeedback(new LiteralText(dateformat.format(curr.getTagDate())).formatted(Formatting.GRAY)
.append(new LiteralText(" | "))
.append(new LiteralText(curr.getType().getTag()).formatted(curr.getType().getFormatting()))
.append(new LiteralText(curr.getType().getTag()).setStyle(Style.EMPTY.withColor(TextColor.fromRgb(curr.getType().getColor()))))
.append(new LiteralText(" (" + curr.getGrade() + ") ").formatted(getScaleFormat(curr.getGrade())))
);
}
@ -71,7 +73,7 @@ public class CheckFunction {
}
}
private static Formatting getScaleFormat(int grade){
public static Formatting getScaleFormat(int grade){
if (grade <= 5)
return Formatting.WHITE;
else if (grade < 9)

View file

@ -38,7 +38,7 @@ public class LobbyFunction {
if (type == DB_Tag.Type.HACKER){
dangerLvl = 2;
break;
} else if (type == DB_Tag.Type.IDIOT){
} else if (type == DB_Tag.Type.IDIOT || type == DB_Tag.Type.NOOB){
dangerLvl = 1;
}
}
@ -49,7 +49,7 @@ public class LobbyFunction {
SystemToast.add(source.getClient().getToastManager(), SystemToast.Type.WORLD_BACKUP, Text.of("OKAY!"), Text.of("No Hackers found"));
break;
case 1:
SystemToast.add(source.getClient().getToastManager(), SystemToast.Type.TUTORIAL_HINT, Text.of("MEH!"), Text.of("There is an Idiot!"));
SystemToast.add(source.getClient().getToastManager(), SystemToast.Type.TUTORIAL_HINT, Text.of("MEH!"), Text.of("There is an Idiot or Noob!"));
break;
case 2:
SystemToast.add(source.getClient().getToastManager(), SystemToast.Type.WORLD_ACCESS_FAILURE, Text.of("ALARM!"), Text.of("There is a Hacker!"));

View file

@ -1,9 +1,9 @@
package net.saltymc.eaa.function;
import net.fabricmc.fabric.api.client.command.v1.FabricClientCommandSource;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.toast.SystemToast;
import net.minecraft.text.Text;
import net.saltymc.eaa.custom.ping.TagDTO;
import net.saltymc.eaa.util.database.DB_Player;
import net.saltymc.eaa.util.database.DB_Tag;
import net.saltymc.eaa.util.mojangApi.PlayerInfo;
@ -23,16 +23,18 @@ public class TagFunction {
}
}
public static DB_Tag.Type getScoreboardTag(String uuid){
if (player_tags.containsKey(uuid))
return player_tags.get(uuid).getType();
else {
public static TagDTO getScoreboardTag(String uuid){
if (player_tags.containsKey(uuid)) {
DB_Tag tag = player_tags.get(uuid);
return new TagDTO(tag.getGrade(), tag.getType());
} else {
if (free) {
free = false;
loadPlayer(uuid, false);
}
}
return DB_Tag.Type.NOTLOADED;
return new TagDTO(-1, DB_Tag.Type.NOTLOADED);
}
public static void tagPlayer(String player, DB_Tag.Type tag, int grade, FabricClientCommandSource source){

View file

@ -1,7 +1,5 @@
package net.saltymc.eaa.util.database;
import net.minecraft.util.Formatting;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
@ -96,31 +94,30 @@ public class DB_Tag {
public enum Type {
HACKER(
"HAX", "PLayer who hacks", 0xaa0000, Formatting.RED
"HAX", "PLayer who hacks", 0xaa0000
), FRIENDLY(
"FND", "Player you like", 0x55ff55, Formatting.GREEN
"FND", "Player you like", 0x55ff55
), GOODPLAYER(
"PRO", "Fair player with good skill", 0xffaa00, Formatting.GOLD
"PRO", "Fair player with good skill", 0xffaa00
), IDIOT(
"BAD", "Person who is annoying and bad", 0x55ffff, Formatting.AQUA
"A$$", "Person who is annoying and bad", 0x55ffff
), NOOB(
"BAD", "Person with low skill", 0xff55ff
), NOTTAGGED(
"NaN", "Player is not tagged", 0x555555, Formatting.DARK_GRAY
"NaN", "Player is not tagged", 0x555555
), NOTLOADED(
"---", "PLayer not loaded", 0xffffff, Formatting.WHITE
"---", "PLayer not loaded", 0xffffff
);
String tag, description;
int color;
Formatting formatting;
Type(String tag, String description, int color, Formatting formatting){
Type(String tag, String description, int color){
this.tag = tag;
this.description = description;
this.color = color;
this.formatting = formatting;
}
public String getTag() {
return tag;
}
@ -132,9 +129,5 @@ public class DB_Tag {
public int getColor() {
return color;
}
public Formatting getFormatting(){
return formatting;
}
}
}

View file

@ -7,15 +7,24 @@ import com.mysql.cj.jdbc.Driver;
public class Postgre {
private final String url = "jdbc:postgresql://localhost/myDB";
private final String user = "postgres";
private final String password = "root";
private String url;
private String user;
private String password;
private String db_name;
private final String driverName = "com.mysql.cj.jdbc.Driver";
private static Postgre postgre;
private Connection connection;
public Postgre() {
this.url = EaaMod.getSettings().getProperty("url");
this.user = EaaMod.getSettings().getProperty("user");
this.password = EaaMod.getSettings().getProperty("password");
this.db_name = EaaMod.getSettings().getProperty("db_name");
try {
//load driver / config driver
EaaMod.LOGGER.debug("Lade DB Treiber");

View file

@ -0,0 +1,26 @@
package net.saltymc.eaa.util.io;
import net.saltymc.eaa.EaaMod;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.Properties;
public class PropertieLoader {
public static Properties loadProperties(String fileName){
Properties p = new Properties();
try (FileReader reader = new FileReader(System.getProperty("user.dir") + "/mods/" + fileName)){
p.load(reader);
} catch (Exception e){
try (FileWriter writer = new FileWriter(System.getProperty("user.dir") + "/mods/" + fileName)) {
p.store(writer, "init config file");
} catch (Exception ex){
EaaMod.getLogger().error("Cant save Properties" + fileName, e);
}
return loadProperties(fileName);
}
return p;
}
}