Skip to content

Commit

Permalink
1.0.1 release
Browse files Browse the repository at this point in the history
  • Loading branch information
De6ris committed Jan 10, 2025
1 parent 0cca9d0 commit ac3ba8c
Show file tree
Hide file tree
Showing 10 changed files with 86 additions and 49 deletions.
14 changes: 14 additions & 0 deletions changeLog/更新日志.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# ServerPassword

---

## 1.0.1

* 现在未设置密码时, 或设置密码后重进服务器时, 将不断提示玩家
* 略微优化了代码

---

## 1.0.0

* 成功移植到fml3
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ yarn_mappings=1.6.4
loader_version=0.15.0

# Mod Properties
mod_version=1.0.0
mod_version=1.0.1
maven_group=com.github
archives_base_name=ServerPasswordMod

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@

import net.wensc.serverPassword.util.PasswordManager;

public interface CustomServerPlayer {
PasswordManager getPasswordManager();
public interface IServerPlayer {
PasswordManager svpwd$getPasswordManager();
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
package net.wensc.serverPassword.api;

public enum PasswordStatus {
NOTSETPWD,
IPDIFFERENT,
IPDIFFWAIT,
SAMEPWD;
NOT_SET_PWD,
IP_DIFF_WAIT,
SAME_PWD;
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import net.minecraft.NetServerHandler;
import net.minecraft.Packet85SimpleSignal;
import net.minecraft.ServerPlayer;
import net.wensc.serverPassword.api.CustomServerPlayer;
import net.wensc.serverPassword.api.IServerPlayer;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
Expand All @@ -17,7 +17,7 @@ public class MixinNetServerHandler {

@Inject(method = {"handleSimpleSignal(Lnet/minecraft/Packet85SimpleSignal;)V"}, at = {@At(value = "INVOKE", target = "Lnet/minecraft/ServerPlayer;dropOneItem(Z)Lnet/minecraft/EntityItem;")}, cancellable = true)
public void preventDrop(Packet85SimpleSignal packet, CallbackInfo callbackInfo) {
if (((CustomServerPlayer) this.playerEntity.getAsPlayer()).getPasswordManager().preventActions()) {
if (((IServerPlayer) this.playerEntity.getAsPlayer()).svpwd$getPasswordManager().preventActions()) {
callbackInfo.cancel();
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
package net.wensc.serverPassword.mixins;

import net.minecraft.ChatMessageComponent;
import net.minecraft.EnumChatFormatting;
import net.minecraft.ServerConfigurationManager;
import net.minecraft.ServerPlayer;
import net.wensc.serverPassword.api.CustomServerPlayer;
import net.wensc.serverPassword.api.PasswordStatus;
import net.wensc.serverPassword.api.IServerPlayer;
import net.wensc.serverPassword.util.PasswordManager;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
Expand All @@ -16,12 +13,7 @@
public class MixinServerConfigurationManager {
@Inject(method = {"playerLoggedIn(Lnet/minecraft/ServerPlayer;)V"}, at = {@At("HEAD")})
public void playerLoggedIn(ServerPlayer serverPlayer, CallbackInfo callbackInfo) {
PasswordManager passwordManager = ((CustomServerPlayer) serverPlayer.getAsPlayer()).getPasswordManager();
if (passwordManager.isPasswordSet()) {
serverPlayer.sendChatToPlayer(ChatMessageComponent.createFromTranslationKey("此账号已注册,请20S内输入密码登录:/login 密码").setColor(EnumChatFormatting.DARK_PURPLE));
passwordManager.setPasswordStatus(PasswordStatus.IPDIFFERENT);
} else {
serverPlayer.sendChatToPlayer(ChatMessageComponent.createFromTranslationKey("请设置初始密码:/setpwd 密码").setColor(EnumChatFormatting.DARK_PURPLE));
}
PasswordManager passwordManager = ((IServerPlayer) serverPlayer.getAsPlayer()).svpwd$getPasswordManager();
passwordManager.onLogIn();
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package net.wensc.serverPassword.mixins;

import net.minecraft.*;
import net.wensc.serverPassword.api.CustomServerPlayer;
import net.wensc.serverPassword.api.IServerPlayer;
import net.wensc.serverPassword.util.LogWriter;
import net.wensc.serverPassword.util.PasswordManager;
import net.xiaoyu233.fml.util.ReflectHelper;
Expand All @@ -13,12 +13,12 @@
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;

@Mixin({ServerPlayer.class})
public abstract class MixinServerPlayer extends EntityPlayer implements CustomServerPlayer {
public abstract class MixinServerPlayer extends EntityPlayer implements IServerPlayer {
@Unique
private PasswordManager passwordManager = new PasswordManager(ReflectHelper.dyCast(this));

@Override
public PasswordManager getPasswordManager() {
public PasswordManager svpwd$getPasswordManager() {
return this.passwordManager;
}

Expand Down Expand Up @@ -52,7 +52,7 @@ public void attackEntityFrom(Damage damage, CallbackInfoReturnable<EntityDamageR

@Inject(method = {"clonePlayer(Lnet/minecraft/EntityPlayer;Z)V"}, at = {@At("RETURN")})
public void injectClonePlayer(EntityPlayer par1EntityPlayer, boolean par2, CallbackInfo callbackInfo) {
this.passwordManager.cloneFrom(((CustomServerPlayer) par1EntityPlayer).getPasswordManager());
this.passwordManager.cloneFrom(((IServerPlayer) par1EntityPlayer).svpwd$getPasswordManager());
}

@Inject(method = {"onUpdate()V"}, at = {@At("HEAD")}, cancellable = true)
Expand Down
6 changes: 3 additions & 3 deletions src/main/java/net/wensc/serverPassword/util/CommandLogin.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import net.minecraft.CommandBase;
import net.minecraft.EnumChatFormatting;
import net.minecraft.ICommandSender;
import net.wensc.serverPassword.api.CustomServerPlayer;
import net.wensc.serverPassword.api.IServerPlayer;
import net.wensc.serverPassword.api.PasswordStatus;

public class CommandLogin extends CommandBase {
Expand All @@ -26,9 +26,9 @@ public int getRequiredPermissionLevel() {
@Override
public void processCommand(ICommandSender iCommandSender, String[] strings) {
String password = strings[0];
PasswordManager passwordManager = ((CustomServerPlayer) CommandBase.getCommandSenderAsPlayer(iCommandSender).getAsPlayer()).getPasswordManager();
PasswordManager passwordManager = ((IServerPlayer) CommandBase.getCommandSenderAsPlayer(iCommandSender).getAsPlayer()).svpwd$getPasswordManager();
if (passwordManager.isPasswordSet() && passwordManager.checkPassword(password)) {
passwordManager.setPasswordStatus(PasswordStatus.SAMEPWD);
passwordManager.setPasswordStatus(PasswordStatus.SAME_PWD);
iCommandSender.sendChatToPlayer(ChatMessageComponent.createFromTranslationKey("登录成功").setColor(EnumChatFormatting.AQUA));
LogWriter.writeLog(iCommandSender.getCommandSenderName(), "登录成功,密码:" + password);
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import net.minecraft.CommandBase;
import net.minecraft.EnumChatFormatting;
import net.minecraft.ICommandSender;
import net.wensc.serverPassword.api.CustomServerPlayer;
import net.wensc.serverPassword.api.IServerPlayer;
import net.wensc.serverPassword.api.PasswordStatus;

public class CommandSetPassword extends CommandBase {
Expand All @@ -26,15 +26,15 @@ public int getRequiredPermissionLevel() {
@Override
public void processCommand(ICommandSender iCommandSender, String[] strings) {
String password = strings[0];
PasswordManager passwordManager = ((CustomServerPlayer) CommandBase.getCommandSenderAsPlayer(iCommandSender).getAsPlayer()).getPasswordManager();
if (!passwordManager.isPasswordSet() || passwordManager.getPasswordStatus() == PasswordStatus.SAMEPWD) {
PasswordManager passwordManager = ((IServerPlayer) CommandBase.getCommandSenderAsPlayer(iCommandSender).getAsPlayer()).svpwd$getPasswordManager();
if (passwordManager.isPasswordSet() && passwordManager.preventActions()) {
iCommandSender.sendChatToPlayer(ChatMessageComponent.createFromText("无权操作"));
LogWriter.writeLog(iCommandSender.getCommandSenderName(), "尝试重置密码,密码:" + password);
} else {
passwordManager.setPassword(password);
passwordManager.setPasswordStatus(PasswordStatus.SAMEPWD);
passwordManager.setPasswordStatus(PasswordStatus.SAME_PWD);
iCommandSender.sendChatToPlayer(ChatMessageComponent.createFromTranslationKey("设置密码成功").setColor(EnumChatFormatting.AQUA));
LogWriter.writeLog(iCommandSender.getCommandSenderName(), "设置密码成功,密码:" + password);
} else {
iCommandSender.sendChatToPlayer(ChatMessageComponent.createFromText("无权操作"));
LogWriter.writeLog(iCommandSender.getCommandSenderName(), "尝试重置密码,密码:" + password);
}
}

Expand Down
62 changes: 47 additions & 15 deletions src/main/java/net/wensc/serverPassword/util/PasswordManager.java
Original file line number Diff line number Diff line change
@@ -1,47 +1,79 @@
package net.wensc.serverPassword.util;

import net.minecraft.ChatMessageComponent;
import net.minecraft.EnumChatFormatting;
import net.minecraft.ServerPlayer;
import net.wensc.serverPassword.api.PasswordStatus;

public class PasswordManager {
private final ServerPlayer serverPlayer;
private String password = "";

private PasswordStatus passwordStatus;
private int passwordTimer;
private int enterPwdTimer;
private int setPwdTimer;

public PasswordManager(ServerPlayer serverPlayer) {
this.serverPlayer = serverPlayer;
}

public boolean onUpdate() {
if (this.passwordStatus == PasswordStatus.IPDIFFERENT) {
this.passwordTimer = 400;
this.passwordStatus = PasswordStatus.IPDIFFWAIT;
}
if (this.passwordTimer > 0 && this.passwordStatus == PasswordStatus.IPDIFFWAIT) {
this.passwordTimer--;
if (this.passwordTimer <= 0) {
if (this.enterPwdTimer > 0 && this.waitingForPwd()) {
if (this.enterPwdTimer % 100 == 0) {
this.noticeEnterPwd();
}
this.enterPwdTimer--;
if (this.enterPwdTimer <= 0) {
this.serverPlayer.playerNetServerHandler.kickPlayerFromServer("输入密码超时");
}
}
return this.passwordStatus == PasswordStatus.SAMEPWD;
if (this.notSetPwd()) {
if (this.setPwdTimer % 100 == 0) {
this.noticeSetPwd();
}
this.setPwdTimer++;
}
return this.passwordStatus == PasswordStatus.SAME_PWD;
}

public boolean isPasswordSet() {
return !this.password.isEmpty();
}

public void onLogIn() {
if (this.isPasswordSet()) {
this.enterPwdTimer = 400;
this.passwordStatus = PasswordStatus.IP_DIFF_WAIT;
} else {
this.passwordStatus = PasswordStatus.NOT_SET_PWD;
}
}

public void noticeSetPwd() {
serverPlayer.sendChatToPlayer(ChatMessageComponent.createFromTranslationKey("请设置初始密码:/setpwd 密码").setColor(EnumChatFormatting.DARK_PURPLE));
}

public void noticeEnterPwd(){
serverPlayer.sendChatToPlayer(ChatMessageComponent.createFromTranslationKey("此账号已注册,请20S内输入密码登录:/login 密码").setColor(EnumChatFormatting.DARK_PURPLE));
}

public boolean waitingForPwd() {
return this.passwordStatus == PasswordStatus.IP_DIFF_WAIT;
}

public boolean notSetPwd() {
return this.passwordStatus == PasswordStatus.NOT_SET_PWD;
}

public void setPasswordStatus(PasswordStatus passwordStatus) {
this.passwordStatus = passwordStatus;
}

public PasswordStatus getPasswordStatus() {
return this.passwordStatus;
public boolean preventActions() {
return !this.samePwd();
}

public boolean preventActions() {
return this.passwordStatus != PasswordStatus.SAMEPWD;
public boolean samePwd() {
return this.passwordStatus == PasswordStatus.SAME_PWD;
}

public void setPassword(String password) {
Expand All @@ -59,7 +91,7 @@ public boolean checkPassword(String test) {
public void cloneFrom(PasswordManager old) {
this.password = old.password;
this.passwordStatus = old.passwordStatus;
this.passwordTimer = old.passwordTimer;
this.enterPwdTimer = old.enterPwdTimer;
}

}

0 comments on commit ac3ba8c

Please sign in to comment.