fix: 修复了Windows下中文乱码及与PCA不兼容的问题

This commit is contained in:
Disy authored and zly2006 committed 2024-07-11 12:14:02 +08:00
1 parent 42d59762a7
commit 15764d67bc
16 files changed
+91 -169

No files matched your search

@@ -1,32 +0,0 @@
package com.github.zly2006.carpetslsaddition.mixin.block;
import com.github.zly2006.carpetslsaddition.util.access.PlayerAccess;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.entity.Entity;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.server.world.ServerWorld;
import net.minecraft.util.math.BlockPos;
import org.jetbrains.annotations.Nullable;
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.CallbackInfoReturnable;
import java.util.List;
@Mixin(Block.class)
public class MixinBlock {
@Inject(method = "getDroppedStacks(Lnet/minecraft/block/BlockState;Lnet/minecraft/server/world/ServerWorld;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/block/entity/BlockEntity;Lnet/minecraft/entity/Entity;Lnet/minecraft/item/ItemStack;)Ljava/util/List;", at = @At("HEAD"), cancellable = true)
private static void onDrop(BlockState state, ServerWorld world, BlockPos pos, @Nullable BlockEntity blockEntity, @Nullable Entity entity, ItemStack stack, CallbackInfoReturnable<List<ItemStack>> cir) {
if (entity instanceof ServerPlayerEntity player) {
if (((PlayerAccess) player).holdingObsidianPickaxe() && state.getBlock() == Blocks.OBSIDIAN) {
cir.setReturnValue(List.of(new ItemStack(Items.OBSIDIAN)));
}
}
}
}
@@ -24,7 +24,7 @@ public abstract class MixinSettingsManager implements SettingsManagerAccessor {
this.loadConfigurationFromConf();
}
@Inject(method = "setRule", at = @At(value = "INVOKE", target = "Lcarpet/utils/Messenger;m(Lnet/minecraft/server/command/ServerCommandSource;[Ljava/lang/Object;)V", shift = At.Shift.BEFORE))
@Inject(method = "setRule", at = @At(value = "INVOKE", target = "Lcarpet/utils/Messenger;m(Lnet/minecraft/server/command/ServerCommandSource;[Ljava/lang/Object;)V", shift = At.Shift.BEFORE), remap = true)
private void injectSetRule(ServerCommandSource source, CarpetRule<?> rule, String newValue, CallbackInfoReturnable<Integer> cir) {
if ("maxUpdateQueueSize".equals(rule.name())) {
MinecraftServer server = ServerMain.server;
@@ -1,6 +1,6 @@
package com.github.zly2006.carpetslsaddition.mixin.entity;
import com.github.zly2006.carpetslsaddition.PlayerAccess;
import com.github.zly2006.carpetslsaddition.util.access.PlayerAccess;
import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
import net.minecraft.entity.EquipmentSlot;
@@ -8,8 +8,11 @@ import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NbtCompound;
import net.minecraft.stat.Stat;
import net.minecraft.text.Text;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
@@ -22,26 +25,20 @@ public abstract class MixinPlayerEntity implements PlayerAccess {
@Shadow public abstract void resetStat(Stat<?> stat);
@Shadow public abstract Text getName();
@Unique
private Text displayName = null;
@Override
public boolean holdingObsidianPickaxe() {
ItemStack itemStack = getEquippedStack(EquipmentSlot.MAINHAND);
NbtCompound compound = itemStack.getSubNbt(MOD_ID);
return compound != null && compound.contains(ITEM_NAME) && compound.getString(ITEM_NAME).equals(OBSIDIAN_PICKAXE);
public void setDisplayName(Text name) {
this.displayName = name;
}
@Inject(method = "getBlockBreakingSpeed", at = @At("HEAD"), cancellable = true)
private void onGetBlockBreakingSpeed(BlockState block, CallbackInfoReturnable<Float> cir) {
if (holdingObsidianPickaxe() && block.isOf(Blocks.OBSIDIAN)) {
cir.setReturnValue(750f);// f = speed / 1500
}
}
@Inject(method = "canHarvest", at = @At("HEAD"), cancellable = true)
private void onGetCanMine(BlockState state, CallbackInfoReturnable<Boolean> cir) {
if (holdingObsidianPickaxe() && state.isOf(Blocks.OBSIDIAN)) {
cir.setReturnValue(true);
@Inject(method = "getDisplayName", at = @At("HEAD"), cancellable = true)
public void injectGetDisplayName(CallbackInfoReturnable<Text> cir) {
if (this.displayName != null) {
cir.setReturnValue(displayName);
}
}
}
@@ -17,8 +17,6 @@ import org.spongepowered.asm.mixin.Shadow;
public abstract class MixinServerPlayerEntity extends PlayerEntity {
@Shadow
public ServerPlayNetworkHandler networkHandler;
private int sneakTimes = 0;
private long lastSneakTime = 0;
@@ -1,24 +0,0 @@
package com.github.zly2006.carpetslsaddition.mixin.item;
import com.github.zly2006.carpetslsaddition.util.access.PlayerAccess;
import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.Item;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
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.CallbackInfoReturnable;
@Mixin(Item.class)
public class MixinItem {
@Inject(method = "canMine", at = @At("HEAD"), cancellable = true)
private void onCheckMine(BlockState state, World world, BlockPos pos, PlayerEntity miner, CallbackInfoReturnable<Boolean> cir) {
if (((PlayerAccess) miner).holdingObsidianPickaxe() && state.getBlock() == Blocks.OBSIDIAN) {
cir.setReturnValue(true);
}
}
}
@@ -2,6 +2,8 @@ package com.github.zly2006.carpetslsaddition.mixin.player;
import com.github.zly2006.carpetslsaddition.SLSCarpetSettings;
import com.github.zly2006.carpetslsaddition.util.ShulkerBoxItemUtil;
import me.fallenbreath.conditionalmixin.api.annotation.Condition;
import me.fallenbreath.conditionalmixin.api.annotation.Restriction;
import net.minecraft.entity.player.PlayerAbilities;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
@@ -12,6 +14,9 @@ import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
@Restriction(
conflict = @Condition("pca")
)
@Mixin(PlayerInventory.class)
public abstract class MixinPlayerInventory implements Inventory, Nameable {
@Redirect(method = "insertStack(ILnet/minecraft/item/ItemStack;)Z", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/player/PlayerEntity;getAbilities()Lnet/minecraft/entity/player/PlayerAbilities;"))
@@ -33,8 +38,7 @@ public abstract class MixinPlayerInventory implements Inventory, Nameable {
}
// 修改潜影盒拾取逻辑,使从地上捡起潜影盒时仍可堆叠
@Redirect(method = "canStackAddMore",
at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;isStackable()Z", ordinal = 0))
@Redirect(method = "canStackAddMore", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;isStackable()Z", ordinal = 0))
private boolean canStackAddMoreIsStackable(ItemStack itemStack) {
return ShulkerBoxItemUtil.isStackable(itemStack);
}
@@ -0,0 +1,23 @@
package com.github.zly2006.carpetslsaddition.mixin.plugin;
import me.fallenbreath.conditionalmixin.api.mixin.RestrictiveMixinConfigPlugin;
import java.util.List;
import java.util.Set;
public class BasicMixinPlugin extends RestrictiveMixinConfigPlugin {
@Override
public String getRefMapperConfig() {
return null;
}
@Override
public void acceptTargets(Set<String> myTargets, Set<String> otherTargets) {
}
@Override
public List<String> getMixins() {
return null;
}
}
@@ -1,12 +1,17 @@
package com.github.zly2006.carpetslsaddition.mixin.screen;
import com.github.zly2006.carpetslsaddition.util.ShulkerBoxItemUtil;
import me.fallenbreath.conditionalmixin.api.annotation.Condition;
import me.fallenbreath.conditionalmixin.api.annotation.Restriction;
import net.minecraft.item.ItemStack;
import net.minecraft.screen.ScreenHandler;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
@Restriction(
conflict = @Condition("pca")
)
@Mixin(ScreenHandler.class)
public class MixinScreenHandler {
@Redirect(method = "insertItem", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;isStackable()Z", ordinal = 0))
@@ -1,12 +1,17 @@
package com.github.zly2006.carpetslsaddition.mixin.screen;
import com.github.zly2006.carpetslsaddition.util.ShulkerBoxItemUtil;
import me.fallenbreath.conditionalmixin.api.annotation.Condition;
import me.fallenbreath.conditionalmixin.api.annotation.Restriction;
import net.minecraft.item.ItemStack;
import net.minecraft.screen.slot.Slot;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
@Restriction(
conflict = @Condition("pca")
)
@Mixin(Slot.class)
public class MixinSlot {
@Redirect(method = "getMaxItemCount(Lnet/minecraft/item/ItemStack;)I", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;getMaxCount()I", ordinal = 0))