Disabling double registering
^ as well as trying to cancel the droping of items.
This commit is contained in:
parent
476bddacc8
commit
c51fdc7c0a
|
@ -14,7 +14,8 @@ import org.samo_lego.simpleauth.database.SimpleAuthDatabase;
|
||||||
import org.samo_lego.simpleauth.event.AuthEventHandler;
|
import org.samo_lego.simpleauth.event.AuthEventHandler;
|
||||||
import org.samo_lego.simpleauth.event.block.BreakBlockCallback;
|
import org.samo_lego.simpleauth.event.block.BreakBlockCallback;
|
||||||
import org.samo_lego.simpleauth.event.block.InteractBlockCallback;
|
import org.samo_lego.simpleauth.event.block.InteractBlockCallback;
|
||||||
import org.samo_lego.simpleauth.event.entity.player.InteractItemCallback;
|
import org.samo_lego.simpleauth.event.item.DropItemCallback;
|
||||||
|
import org.samo_lego.simpleauth.event.item.InteractItemCallback;
|
||||||
import org.samo_lego.simpleauth.event.entity.player.PlayerJoinServerCallback;
|
import org.samo_lego.simpleauth.event.entity.player.PlayerJoinServerCallback;
|
||||||
import org.samo_lego.simpleauth.event.entity.player.PlayerLeaveServerCallback;
|
import org.samo_lego.simpleauth.event.entity.player.PlayerLeaveServerCallback;
|
||||||
|
|
||||||
|
@ -48,11 +49,14 @@ public class SimpleAuth implements DedicatedServerModInitializer {
|
||||||
|
|
||||||
// Registering the events
|
// Registering the events
|
||||||
InteractBlockCallback.EVENT.register(AuthEventHandler::onInteractBlock);
|
InteractBlockCallback.EVENT.register(AuthEventHandler::onInteractBlock);
|
||||||
AttackBlockCallback.EVENT.register((playerEntity, world, hand, blockPos, direction) -> AuthEventHandler.interact(playerEntity));
|
BreakBlockCallback.EVENT.register((world, pos, state, player) -> AuthEventHandler.onBlockBroken(player));
|
||||||
InteractItemCallback.EVENT.register(AuthEventHandler::onInteractItem);
|
InteractItemCallback.EVENT.register(AuthEventHandler::onInteractItem);
|
||||||
|
DropItemCallback.EVENT.register(AuthEventHandler::onDropItem);
|
||||||
PlayerJoinServerCallback.EVENT.register(AuthEventHandler::onPlayerJoin);
|
PlayerJoinServerCallback.EVENT.register(AuthEventHandler::onPlayerJoin);
|
||||||
PlayerLeaveServerCallback.EVENT.register(AuthEventHandler::onPlayerLeave);
|
PlayerLeaveServerCallback.EVENT.register(AuthEventHandler::onPlayerLeave);
|
||||||
BreakBlockCallback.EVENT.register((world, pos, state, player) -> AuthEventHandler.onBlockBroken(player));
|
// From Fabric API
|
||||||
|
AttackBlockCallback.EVENT.register((playerEntity, world, hand, blockPos, direction) -> AuthEventHandler.onAttackBlock(playerEntity));
|
||||||
|
|
||||||
db.makeTable();
|
db.makeTable();
|
||||||
}
|
}
|
||||||
public static HashSet<ServerPlayerEntity> authenticatedUsers = new HashSet<>();
|
public static HashSet<ServerPlayerEntity> authenticatedUsers = new HashSet<>();
|
||||||
|
|
|
@ -55,12 +55,15 @@ public class RegisterCommand {
|
||||||
// Hash password
|
// Hash password
|
||||||
String hash = argon2.hash(10, 65536, 1, password);
|
String hash = argon2.hash(10, 65536, 1, password);
|
||||||
// Writing into database
|
// Writing into database
|
||||||
SimpleAuth.db.insert(Objects.requireNonNull(source.getEntity()).getUuidAsString(), source.getName(), hash);
|
if(SimpleAuth.db.registerUser(Objects.requireNonNull(source.getEntity()).getUuidAsString(), source.getName(), hash)) {
|
||||||
SimpleAuth.authenticatedUsers.add(player);
|
SimpleAuth.authenticatedUsers.add(player);
|
||||||
// Letting the player know it was successful
|
// Letting the player know it was successful
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
new LiteralText(source.getName() + ", you have registered successfully!")
|
new LiteralText(source.getName() + ", you have registered successfully!")
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
player.sendMessage(alreadyRegistered);
|
||||||
} catch (Error e) {
|
} catch (Error e) {
|
||||||
player.sendMessage(alreadyRegistered);
|
player.sendMessage(alreadyRegistered);
|
||||||
} finally {
|
} finally {
|
||||||
|
|
|
@ -46,20 +46,32 @@ public class SimpleAuthDatabase {
|
||||||
}
|
}
|
||||||
|
|
||||||
// When player registers, we insert the data into DB
|
// When player registers, we insert the data into DB
|
||||||
public void insert(String uuid, String username, String password) {
|
public boolean registerUser(String uuid, String username, String password) {
|
||||||
String sql = "INSERT INTO users(uuid, username, password) VALUES(?,?,?)";
|
String sql = "INSERT INTO users(uuid, username, password) VALUES(?,?,?)";
|
||||||
|
String sqlCheck = "SELECT UUID, Password "
|
||||||
|
+ "FROM users WHERE UUID = ?";
|
||||||
try (
|
try (
|
||||||
Connection conn = this.connect();
|
Connection conn = this.connect();
|
||||||
PreparedStatement pstmt = conn.prepareStatement(sql)) {
|
PreparedStatement pstmt = conn.prepareStatement(sql);
|
||||||
|
PreparedStatement pstmtCheck = conn.prepareStatement(sql)) {
|
||||||
|
|
||||||
pstmt.setString(1, uuid);
|
pstmtCheck.setString(1,uuid);
|
||||||
pstmt.setString(2, username);
|
ResultSet rs = pstmtCheck.executeQuery();
|
||||||
pstmt.setString(3, password);
|
|
||||||
|
|
||||||
pstmt.executeUpdate();
|
// Getting the password
|
||||||
|
String dbUuid = rs.getString("UUID");
|
||||||
|
if(dbUuid != null) {
|
||||||
|
pstmt.setString(1, uuid);
|
||||||
|
pstmt.setString(2, username);
|
||||||
|
pstmt.setString(3, password);
|
||||||
|
|
||||||
|
pstmt.executeUpdate();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
LOGGER.error(e.getMessage());
|
LOGGER.error(e.getMessage());
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Deletes row containing the username provided
|
// Deletes row containing the username provided
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package org.samo_lego.simpleauth.event;
|
package org.samo_lego.simpleauth.event;
|
||||||
|
|
||||||
import net.minecraft.entity.player.PlayerEntity;
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.server.network.ServerPlayerEntity;
|
import net.minecraft.server.network.ServerPlayerEntity;
|
||||||
import net.minecraft.text.LiteralText;
|
import net.minecraft.text.LiteralText;
|
||||||
import net.minecraft.text.TranslatableText;
|
import net.minecraft.text.TranslatableText;
|
||||||
|
@ -45,7 +46,7 @@ public class AuthEventHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Punching a block
|
// Punching a block
|
||||||
public static ActionResult interact(PlayerEntity playerEntity) {
|
public static ActionResult onAttackBlock(PlayerEntity playerEntity) {
|
||||||
if(!SimpleAuth.authenticatedUsers.contains(playerEntity)) {
|
if(!SimpleAuth.authenticatedUsers.contains(playerEntity)) {
|
||||||
playerEntity.sendMessage(notAuthenticated);
|
playerEntity.sendMessage(notAuthenticated);
|
||||||
return ActionResult.FAIL;
|
return ActionResult.FAIL;
|
||||||
|
@ -62,4 +63,12 @@ public class AuthEventHandler {
|
||||||
|
|
||||||
return ActionResult.PASS;
|
return ActionResult.PASS;
|
||||||
}
|
}
|
||||||
|
// Dropping an item
|
||||||
|
public static boolean onDropItem(ServerPlayerEntity player) {
|
||||||
|
if(!SimpleAuth.authenticatedUsers.contains(player)) {
|
||||||
|
player.sendMessage(notAuthenticated);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
package org.samo_lego.simpleauth.event.item;
|
||||||
|
|
||||||
|
import net.fabricmc.fabric.api.event.Event;
|
||||||
|
import net.fabricmc.fabric.api.event.EventFactory;
|
||||||
|
import net.minecraft.server.network.ServerPlayerEntity;
|
||||||
|
|
||||||
|
public interface DropItemCallback {
|
||||||
|
Event<DropItemCallback> EVENT = EventFactory.createArrayBacked(DropItemCallback.class, listeners -> (playerEntity) -> {
|
||||||
|
for(DropItemCallback callback : listeners) {
|
||||||
|
if(callback.onDropItem(playerEntity)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
|
boolean onDropItem(ServerPlayerEntity playerEntity);
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
package org.samo_lego.simpleauth.event.entity.player;
|
package org.samo_lego.simpleauth.event.item;
|
||||||
|
|
||||||
import net.fabricmc.fabric.api.event.Event;
|
import net.fabricmc.fabric.api.event.Event;
|
||||||
import net.fabricmc.fabric.api.event.EventFactory;
|
import net.fabricmc.fabric.api.event.EventFactory;
|
|
@ -2,13 +2,23 @@ package org.samo_lego.simpleauth.mixin;
|
||||||
|
|
||||||
import net.minecraft.entity.player.PlayerEntity;
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.server.network.ServerPlayerEntity;
|
||||||
|
import org.samo_lego.simpleauth.event.item.DropItemCallback;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.Shadow;
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||||
|
|
||||||
@Mixin(PlayerEntity.class)
|
@Mixin(PlayerEntity.class)
|
||||||
public abstract class MixinPlayerEntity {
|
public abstract class MixinPlayerEntity {
|
||||||
/*@Inject(method = "dropItem", at = @At("HEAD"))
|
// Thanks to AbusedLib https://github.com/abused/AbusedLib
|
||||||
private void dropItem(ItemStack itemStack_1, boolean boolean_1) {
|
@Inject(method = "dropItem(Lnet/minecraft/item/ItemStack;ZZ)Lnet/minecraft/entity/ItemEntity;", at = @At("HEAD"))
|
||||||
}*/
|
private void dropItem(ItemStack stack, boolean boolean_1, boolean boolean_2, CallbackInfoReturnable<ItemStack> info) {
|
||||||
|
ServerPlayerEntity player = (ServerPlayerEntity) (Object) this;
|
||||||
|
if(DropItemCallback.EVENT.invoker().onDropItem(player)) {
|
||||||
|
player.giveItemStack(stack);
|
||||||
|
info.setReturnValue(ItemStack.EMPTY);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,17 +0,0 @@
|
||||||
package org.samo_lego.simpleauth.mixin;
|
|
||||||
|
|
||||||
import net.minecraft.server.network.packet.PlayerMoveC2SPacket;
|
|
||||||
import net.minecraft.util.PacketByteBuf;
|
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
|
||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
|
||||||
|
|
||||||
@Mixin(PlayerMoveC2SPacket.class)
|
|
||||||
public abstract class MixinServerPlayNetworkHandler {
|
|
||||||
|
|
||||||
@Inject(method = "read", at = @At("RETURN"))
|
|
||||||
private void read(PacketByteBuf packetByteBuf_1, CallbackInfo ci) {
|
|
||||||
System.out.println("Packet "+packetByteBuf_1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -12,7 +12,7 @@ import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import org.samo_lego.simpleauth.event.block.BreakBlockCallback;
|
import org.samo_lego.simpleauth.event.block.BreakBlockCallback;
|
||||||
import org.samo_lego.simpleauth.event.block.InteractBlockCallback;
|
import org.samo_lego.simpleauth.event.block.InteractBlockCallback;
|
||||||
import org.samo_lego.simpleauth.event.entity.player.InteractItemCallback;
|
import org.samo_lego.simpleauth.event.item.InteractItemCallback;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.Shadow;
|
import org.spongepowered.asm.mixin.Shadow;
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"mixins": [
|
"mixins": [
|
||||||
"simpleauth.mixins.json"
|
"mixins.simpleauth.json"
|
||||||
],
|
],
|
||||||
|
|
||||||
"depends": {
|
"depends": {
|
||||||
|
|
|
@ -6,7 +6,8 @@
|
||||||
],
|
],
|
||||||
"server": [
|
"server": [
|
||||||
"MixinServerPlayerInteractionManager",
|
"MixinServerPlayerInteractionManager",
|
||||||
"MixinPlayerManager"
|
"MixinPlayerManager",
|
||||||
|
"MixinPlayerEntity"
|
||||||
],
|
],
|
||||||
"injectors": {
|
"injectors": {
|
||||||
"defaultRequire": 1
|
"defaultRequire": 1
|
Loading…
Reference in New Issue