在Minecraft 1122的Forgemcp版本为stable-39里实现以下功能:如果autoPut=true就转向离目前水平方向最近的整坐标整坐标:0度90度180度270度然后转向垂直方向82度然后向后移动08米放置方块再向后移动1米放置方块在向后移动1米如此往复直到autoPut=false停止要求该代码在服务器也能使用
在Minecraft 1.12.2的Forge中实现这个功能,你需要创建一个新的mod。首先,你需要创建一个新的类来处理这个功能。下面是一个简单的示例代码:
package com.example.mod;
import net.minecraft.client.Minecraft;
import net.minecraft.util.EnumFacing;
import net.minecraftforge.client.event.RenderWorldLastEvent;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.Mod.EventHandler;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
@Mod(modid = "examplemod", version = "1.0")
public class ExampleMod {
private boolean autoPut = true;
private double distance = 0.8;
@EventHandler
public void init(FMLInitializationEvent event) {
MinecraftForge.EVENT_BUS.register(this);
}
@SubscribeEvent
public void onRightClickBlock(PlayerInteractEvent.RightClickBlock event) {
if (autoPut) {
Minecraft mc = Minecraft.getMinecraft();
EnumFacing facing = mc.player.getHorizontalFacing();
double posX = Math.floor(mc.player.posX) + 0.5;
double posZ = Math.floor(mc.player.posZ) + 0.5;
// 转向离目前水平方向最近的整坐标
switch (facing) {
case NORTH:
mc.player.rotationYaw = 180;
posX = Math.round(mc.player.posX);
break;
case SOUTH:
mc.player.rotationYaw = 0;
posX = Math.round(mc.player.posX);
break;
case WEST:
mc.player.rotationYaw = 90;
posZ = Math.round(mc.player.posZ);
break;
case EAST:
mc.player.rotationYaw = -90;
posZ = Math.round(mc.player.posZ);
break;
}
mc.player.rotationPitch = -82; // 转向垂直方向82度
// 向后移动0.8米,放置方块
mc.player.setPositionAndUpdate(posX, mc.player.posY, posZ - distance);
mc.playerController.processRightClickBlock(mc.player, mc.world, event.getPos(), event.getFace(), mc.player.getLookVec(), EnumHand.MAIN_HAND);
// 向后移动1米,放置方块
mc.player.setPositionAndUpdate(posX, mc.player.posY, posZ - distance - 1);
mc.playerController.processRightClickBlock(mc.player, mc.world, event.getPos(), event.getFace(), mc.player.getLookVec(), EnumHand.MAIN_HAND);
// 向后移动1米,如此往复
distance += 1;
}
}
@SubscribeEvent
public void onRenderWorldLast(RenderWorldLastEvent event) {
if (autoPut) {
Minecraft mc = Minecraft.getMinecraft();
mc.player.rotationYaw = 0;
mc.player.rotationPitch = 0;
}
}
}
这个代码使用了Forge的事件系统来监听玩家的右键点击方块事件,并在事件发生时执行相应的操作。在onRightClickBlock方法中,根据autoPut的值来判断是否执行自动放置方块的操作。在代码中,我们使用了Minecraft.getMinecraft()来获取游戏实例,然后根据玩家当前的朝向和位置来计算需要转向的角度和移动的位置。然后,我们使用mc.playerController.processRightClickBlock方法来模拟右键点击方块,实现放置方块的操作。
在onRenderWorldLast方法中,我们重置了玩家的朝向,以防止渲染问题。
记得在src/main/resources目录下创建一个mcmod.info文件来指定mod的元数据:
[
{
"modid": "examplemod",
"name": "Example Mod",
"description": "An example mod for Minecraft 1.12.2",
"version": "1.0",
"mcversion": "1.12.2"
}
]
最后,在你的IDE中编译并运行该mod,确保你已经正确设置了Minecraft Forge的开发环境。然后,你就可以在Minecraft游戏中使用该mod实现自动放置方块的功能了
原文地址: https://www.cveoy.top/t/topic/ivoj 著作权归作者所有。请勿转载和采集!