Skip to content

Commit 304c1bc

Browse files
committed
feat: fixPlayerPositionNaN
1 parent 97b10a6 commit 304c1bc

7 files changed

Lines changed: 76 additions & 3 deletions

File tree

‎README-en.md‎

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -377,6 +377,24 @@ Allow spectators to modify containers
377377
- Acceptable value: `true` `false`
378378
- Categories: `Feature`
379379

380+
### removeDataModifyRestriction
381+
382+
Vanilla has restriction for /data modify entity <real player> , no modification of `Health` etc.
383+
384+
This rule can remove the restriction.
385+
386+
- Default value: `false`
387+
- Acceptable value: `true` `false`
388+
- Categories: `Command`, `Experimental`
389+
390+
### fixPlayerPositionNaN
391+
392+
In Entity.setPos(...), check and prevent `NaN`.
393+
394+
- Default value: `false`
395+
- Acceptable value: `true` `false`
396+
- Categories: `BugFix`
397+
380398
## Command
381399

382400
### player xxx tp

‎README.md‎

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,22 @@ DispenserBlockEntity dispenserBlockEntity = (DispenserBlockEntity)blockPointerIm
378378
- Acceptable value: `true` `false`
379379
- Categories: `Feature`
380380

381+
### removeDataModifyRestriction
382+
383+
原版对于/data modify entity <玩家> 有限制,比如不能修改`Health`,本规则移除了此限制
384+
385+
- Default value: `false`
386+
- Acceptable value: `true` `false`
387+
- Categories: `Command`, `Experimental`
388+
389+
### fixPlayerPositionNaN
390+
391+
在Entity.setPos(...)方法中,检查输入值是否包含`NaN`
392+
393+
- Default value: `false`
394+
- Acceptable value: `true` `false`
395+
- Categories: `BugFix`
396+
381397
## 指令
382398

383399
### player xxx tp

‎src/main/java/io/github/optijava/opt_carpet_addition/OptCarpetSettings.java‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,4 +201,9 @@ public class OptCarpetSettings {
201201
categories = {RuleCategory.COMMAND, RuleCategory.EXPERIMENTAL,OCA}
202202
)
203203
public static boolean removeDataModifyRestriction = false;
204+
205+
@Rule(
206+
categories = {RuleCategory.BUGFIX, OCA}
207+
)
208+
public static boolean fixPlayerPositionNaN = false;
204209
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package io.github.optijava.opt_carpet_addition.mixins.rule.fixPlayerPositionNaN;
2+
3+
import io.github.optijava.opt_carpet_addition.OptCarpetAddition;
4+
import io.github.optijava.opt_carpet_addition.OptCarpetSettings;
5+
import net.minecraft.world.entity.Entity;
6+
import org.spongepowered.asm.mixin.Mixin;
7+
import org.spongepowered.asm.mixin.injection.At;
8+
import org.spongepowered.asm.mixin.injection.Inject;
9+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
10+
11+
@Mixin(Entity.class)
12+
public class Entity_Mixin {
13+
14+
@Inject(
15+
method = "setPosRaw",
16+
at = @At("HEAD"),
17+
cancellable = true
18+
)
19+
public void injectTick(final double x, final double y, final double z, CallbackInfo ci) {
20+
if (OptCarpetSettings.fixPlayerPositionNaN) {
21+
Entity ths = (Entity)(Object)this;
22+
23+
if (Double.isNaN(x) || Double.isNaN(y) || Double.isNaN(z)) {
24+
OptCarpetAddition.LOGGER.error("Detect NaN position in Entity " + ths.getStringUUID(), new NumberFormatException());
25+
ci.cancel();
26+
}
27+
}
28+
}
29+
}

‎src/main/resources/assets/opt-carpet-addition/lang/en_us.json‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,5 +66,7 @@
6666
"carpet.rule.allowSpectatorToModifyContainer.name": "Allow spectators to modify containers",
6767
"carpet.rule.allowSpectatorToModifyContainer.desc": "Allow spectators to modify containers",
6868
"carpet.rule.removeDataModifyRestriction.name": "Remove Data Modify Restriction",
69-
"carpet.rule.removeDataModifyRestriction.desc": "Allow modifying data for players"
69+
"carpet.rule.removeDataModifyRestriction.desc": "Allow modifying data for players",
70+
"carpet.rule.fixPlayerPositionNaN.name": "Fix NaN in the pos of players",
71+
"carpet.rule.fixPlayerPositionNaN.desc": "Prevent when writing NaN into pos"
7072
}

‎src/main/resources/assets/opt-carpet-addition/lang/zh_cn.json‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@
6666
"carpet.rule.allowSpectatorToModifyContainer.name": "允许旁观者操作容器",
6767
"carpet.rule.allowSpectatorToModifyContainer.desc": "允许旁观者在GUI操作容器",
6868
"carpet.rule.removeDataModifyRestriction.name": "移除Data指令修改限制",
69-
"carpet.rule.removeDataModifyRestriction.desc": "允许用/data modify entity修改玩家数据"
69+
"carpet.rule.removeDataModifyRestriction.desc": "允许用/data modify entity修改玩家数据",
70+
"carpet.rule.fixPlayerPositionNaN.name": "修复玩家位置NaN",
71+
"carpet.rule.fixPlayerPositionNaN.desc": "当玩家位置被写入NaN时,阻止写入"
7072
}
7173

‎src/main/resources/opt-carpet-addition.mixins.json‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@
2424
//? }
2525
"logger.blockUpdate.LogCommand_Mixin",
2626
"rule.allowSpectatorToModifyContainer.ServerGamePacketListenerImpl_Mixin",
27-
"rule.removeDataModifyRestriction.EntityDataAccessor_Mixin"
27+
"rule.removeDataModifyRestriction.EntityDataAccessor_Mixin",
28+
"rule.fixPlayerPositionNaN.Entity_Mixin"
2829
],
2930
"client": [
3031
"rule.unescapeChatMessage.ChatMessageC2SPacket_Mixin"

0 commit comments

Comments
 (0)