写一个Fabric Loader下的mixin类,重新注册Minecraft的“强化深板岩”方块,使其被构造为PillarBlock类的实例,拥有水平放置的方块状态
时间: 2023-09-17 07:05:55 浏览: 81
### 回答1:
Fabric Loader 是一个用于 Minecraft 的 mod 加载器,而 Mixin 则是一种在运行时动态修改 Java 类的工具。如果要重新注册 Minecraft 的“强化深板岩”方块,使其被构造为 PillarBlock 类的实例,并拥有水平放置的方块状态,可以创建一个 Mixin 类来实现这个目标。
首先,需要创建一个类来实现 Mixin,这个类需要注解 @Mixin 和 @Environment,@Mixin 表示这个类是要修改的目标类,而 @Environment 则表示这个 Mixin 要在哪个环境下执行。在这个例子中,我们需要在客户端和服务器端都执行,所以需要使用 @Environment(EnvType.CLIENT) 和 @Environment(EnvType.SERVER) 注解。
其次,需要实现一个方法来重新注册“强化深板岩”方块。这个方法需要使用 @Inject 注解,并在参数中传入一个 CallbackInfo 类型的参数。在这个方法中,可以通过 Registry.register() 方法重新注册方块,并将其构造为 PillarBlock 类的实例。
最后,还需要添加一些注解来指定这个 Mixin 的目标类和要修改的方法。在这个例子中,目标类是 Registry 类,要修改的方法是 register() 方法。
下面是一个可能的实现示例:
```
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import net.minecraft.block.Block;
import net.minecraft.block.PillarBlock;
import net.minecraft.util.Identifier;
import net.minecraft.util.registry.Registry;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
@Mixin(Registry.class)
@Environment(EnvType.CLIENT)
@Environment(EnvType.SERVER)
public class MixinRegistry {
@Inject(method = "register(Lnet/minecraft/util/Identifier;Ljava/lang/Object;)Ljava/lang/Object;", at = @At("HEAD"))
private static void registerBlock(Identifier id, Object object, CallbackInfo info) {
if (id.getPath().equals("deepslate_emerald_ore")) {
Block block = (Block) object;
Registry.register(Registry.BLOCK, id, new PillarBlock(block.getSettings()));
}
}
}
```
需要注意的是,这个示例中使用的类和方法名可能需要根据实际情况进行调整。此外,需要将这个 Mixin 类打包成一个 mod 并安装到 Fabric Loader 中才能生效。
### 回答2:
在使用Fabric Loader和Mixin的情况下,可以按照以下步骤重新注册Minecraft的"强化深板岩"方块,使其被构造为PillarBlock类的实例,并拥有水平放置的方块状态。
首先,创建一个Mixin类,命名为MixindDeepSlate。
```java
import net.minecraft.block.Block;
import net.minecraft.block.PillarBlock;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import org.spongepowered.asm.mixin.Shadow;
@Mixin(Block.class)
public abstract class MixinDeepSlate extends Block {
@Shadow protected MixinDeepSlate(Settings settings) {
super(settings);
}
@Overwrite
protected void appendProperties(StateManager.Builder<Block, BlockState> builder) {
super.appendProperties(builder);
builder.add(PillarBlock.AXIS);
}
}
```
然后,在mod的主类中,使用`MixinApiAccessor.mixin`方法将Mixin类应用到Minecraft中:
```java
import net.fabricmc.api.ModInitializer;
import net.fabricmc.loader.api.FabricLoader;
import org.spongepowered.asm.mixin.MixinEnvironment;
import org.spongepowered.asm.mixin.Mixins;
public class MainModClass implements ModInitializer {
@Override
public void onInitialize() {
Mixins.addConfiguration("mixins.example.json"); // 在mixins.example.json文件中配置Mixin类的混入规则
MixinEnvironment.getDefaultEnvironment().setSide(MixinEnvironment.Side.CLIENT);
}
}
```
最后,在项目的资源文件夹中创建一个名为`mixins.example.json`的文件,并在其中指定Mixin类的目标(Block)和混入规则:
```json
{
"required": true,
"target": "net.minecraft.block.Block",
"mixins": [
"MixinDeepSlate"
]
}
```
完成这些步骤后,编译并运行游戏,"强化深板岩"方块将被重新注册为PillarBlock类的实例,并拥有水平放置的方块状态。
### 回答3:
在Fabric Loader下创建一个mixin类,我们需要首先导入需要的类和接口:
```java
import net.minecraft.block.Block;
import net.minecraft.block.PillarBlock;
import net.minecraft.state.property.DirectionProperty;
import net.minecraft.state.property.EnumProperty;
import net.minecraft.state.property.Properties;
import net.minecraft.util.math.Direction;
```
然后,我们创建一个名为"MixinReinforcedDeepslateBlock"的类,并实现"MixinReinforcedDeepslateBlock"继承自"Block"类。在类中,我们需要重写构造函数和注册方块的方法。
```java
public class MixinReinforcedDeepslateBlock extends Block {
public MixinReinforcedDeepslateBlock(Settings settings) {
super(settings);
}
public static final DirectionProperty FACING;
public static final EnumProperty<Direction.Axis> AXIS;
static {
FACING = Properties.FACING;
AXIS = Properties.AXIS;
}
public static void register() {
Registry.register(Registry.BLOCK, new Identifier("minecraft", "reinforced_deepslate"), new MixinReinforcedDeepslateBlock(Block.Settings.of(Material.STONE)));
}
}
```
在以上代码中,我们首先重写了构造函数,并调用super()方法来初始化方块。接下来,我们创建了"FACING"和"AXIS"两个属性,并使用Properties类初始化它们。
最后,在register()方法中,我们使用Registry类来注册方块。我们将"reinforced_deepslate"方块的注册名称设置为"minecraft:reinforced_deepslate",并使用MixinReinforcedDeepslateBlock的实例作为构造函数参数。
完成以上代码后,我们按照Fabric Loader的要求将此代码放在mod的源代码中,并在mod的主类中调用MixinReinforcedDeepslateBlock.register()方法来注册方块。
这样,"强化深板岩"方块就会被重新注册,并且被构造为PillarBlock类的实例,拥有水平放置的方块状态。
相关推荐
![.zip](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)