加入了开关PVP模式的指令,试验一下弹速 * 3

This commit is contained in:
Atsuihsio 2024-05-07 14:39:06 +08:00
parent 7602d903d0
commit 730af151b0
4 changed files with 240 additions and 32 deletions

View file

@ -0,0 +1,55 @@
package net.mcreator.target.command;
import org.checkerframework.checker.units.qual.s;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.event.RegisterCommandsEvent;
import net.minecraftforge.common.util.FakePlayerFactory;
import net.minecraft.world.level.Level;
import net.minecraft.world.entity.Entity;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.core.Direction;
import net.minecraft.commands.Commands;
import net.minecraft.world.entity.player.Player;
import net.minecraft.network.chat.Component;
import net.minecraft.world.level.LevelAccessor;
import net.mcreator.target.network.TargetModVariables;
@Mod.EventBusSubscriber
public class PvPmodeCommand {
@SubscribeEvent
public static void registerCommand(RegisterCommandsEvent event) {
event.getDispatcher().register(Commands.literal("target:pvpmode").requires(s -> s.hasPermission(4)).executes(arguments -> {
Level world = arguments.getSource().getUnsidedLevel();
double x = arguments.getSource().getPosition().x();
double y = arguments.getSource().getPosition().y();
double z = arguments.getSource().getPosition().z();
Entity entity = arguments.getSource().getEntity();
if (entity == null && world instanceof ServerLevel _servLevel)
entity = FakePlayerFactory.getMinecraft(_servLevel);
Direction direction = Direction.DOWN;
if (entity != null)
direction = entity.getDirection();
if (TargetModVariables.MapVariables.get(world).pvpmode == true) {
TargetModVariables.MapVariables.get(world).pvpmode = false;
TargetModVariables.MapVariables.get(world).syncData(world);
if (entity instanceof Player _player && !_player.level().isClientSide())
_player.displayClientMessage(Component.literal("PVPMODE:OFF"), false);
} else {
TargetModVariables.MapVariables.get(world).pvpmode = true;
TargetModVariables.MapVariables.get(world).syncData(world);
if (entity instanceof Player _player && !_player.level().isClientSide())
_player.displayClientMessage(Component.literal("PVPMODE:ON"), false);
}
return 0;
}));
}
}

View file

@ -1,33 +1,45 @@
package net.mcreator.target.network;
import net.mcreator.target.TargetMod;
import net.minecraft.client.Minecraft;
import net.minecraft.core.Direction;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.Tag;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.player.Player;
import net.minecraftforge.common.capabilities.*;
import net.minecraftforge.common.util.FakePlayer;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.event.AttachCapabilitiesEvent;
import net.minecraftforge.event.entity.player.PlayerEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import net.minecraftforge.network.NetworkEvent;
import net.minecraftforge.network.PacketDistributor;
import net.minecraftforge.network.NetworkEvent;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.event.entity.player.PlayerEvent;
import net.minecraftforge.event.AttachCapabilitiesEvent;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.common.util.FakePlayer;
import net.minecraftforge.common.capabilities.RegisterCapabilitiesEvent;
import net.minecraftforge.common.capabilities.ICapabilitySerializable;
import net.minecraftforge.common.capabilities.CapabilityToken;
import net.minecraftforge.common.capabilities.CapabilityManager;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraft.world.level.saveddata.SavedData;
import net.minecraft.world.level.ServerLevelAccessor;
import net.minecraft.world.level.LevelAccessor;
import net.minecraft.world.level.Level;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.entity.Entity;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.nbt.Tag;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.core.Direction;
import net.minecraft.client.Minecraft;
import net.mcreator.target.TargetMod;
import java.util.ArrayList;
import java.util.function.Supplier;
import java.util.ArrayList;
@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD)
public class TargetModVariables {
@SubscribeEvent
public static void init(FMLCommonSetupEvent event) {
TargetMod.addNetworkMessage(SavedDataSyncMessage.class, SavedDataSyncMessage::buffer, SavedDataSyncMessage::new, SavedDataSyncMessage::handler);
TargetMod.addNetworkMessage(PlayerVariablesSyncMessage.class, PlayerVariablesSyncMessage::buffer, PlayerVariablesSyncMessage::new, PlayerVariablesSyncMessage::handler);
}
@ -42,7 +54,7 @@ public class TargetModVariables {
public static void onPlayerLoggedInSyncPlayerVariables(PlayerEvent.PlayerLoggedInEvent event) {
if (!event.getEntity().level().isClientSide()) {
for (Entity entityiterator : new ArrayList<>(event.getEntity().level().players())) {
entityiterator.getCapability(PLAYER_VARIABLES_CAPABILITY, null).orElse(new PlayerVariables()).syncPlayerVariables(entityiterator);
((PlayerVariables) entityiterator.getCapability(PLAYER_VARIABLES_CAPABILITY, null).orElse(new PlayerVariables())).syncPlayerVariables(entityiterator);
}
}
}
@ -51,7 +63,7 @@ public class TargetModVariables {
public static void onPlayerRespawnedSyncPlayerVariables(PlayerEvent.PlayerRespawnEvent event) {
if (!event.getEntity().level().isClientSide()) {
for (Entity entityiterator : new ArrayList<>(event.getEntity().level().players())) {
entityiterator.getCapability(PLAYER_VARIABLES_CAPABILITY, null).orElse(new PlayerVariables()).syncPlayerVariables(entityiterator);
((PlayerVariables) entityiterator.getCapability(PLAYER_VARIABLES_CAPABILITY, null).orElse(new PlayerVariables())).syncPlayerVariables(entityiterator);
}
}
}
@ -60,7 +72,7 @@ public class TargetModVariables {
public static void onPlayerChangedDimensionSyncPlayerVariables(PlayerEvent.PlayerChangedDimensionEvent event) {
if (!event.getEntity().level().isClientSide()) {
for (Entity entityiterator : new ArrayList<>(event.getEntity().level().players())) {
entityiterator.getCapability(PLAYER_VARIABLES_CAPABILITY, null).orElse(new PlayerVariables()).syncPlayerVariables(entityiterator);
((PlayerVariables) entityiterator.getCapability(PLAYER_VARIABLES_CAPABILITY, null).orElse(new PlayerVariables())).syncPlayerVariables(entityiterator);
}
}
}
@ -68,8 +80,8 @@ public class TargetModVariables {
@SubscribeEvent
public static void clonePlayer(PlayerEvent.Clone event) {
event.getOriginal().revive();
PlayerVariables original = event.getOriginal().getCapability(PLAYER_VARIABLES_CAPABILITY, null).orElse(new PlayerVariables());
PlayerVariables clone = event.getEntity().getCapability(PLAYER_VARIABLES_CAPABILITY, null).orElse(new PlayerVariables());
PlayerVariables original = ((PlayerVariables) event.getOriginal().getCapability(PLAYER_VARIABLES_CAPABILITY, null).orElse(new PlayerVariables()));
PlayerVariables clone = ((PlayerVariables) event.getEntity().getCapability(PLAYER_VARIABLES_CAPABILITY, null).orElse(new PlayerVariables()));
clone.zoom = original.zoom;
clone.zooming = original.zooming;
clone.recoil = original.recoil;
@ -91,10 +103,143 @@ public class TargetModVariables {
}
if (!event.getEntity().level().isClientSide()) {
for (Entity entityiterator : new ArrayList<>(event.getEntity().level().players())) {
entityiterator.getCapability(PLAYER_VARIABLES_CAPABILITY, null).orElse(new PlayerVariables()).syncPlayerVariables(entityiterator);
((PlayerVariables) entityiterator.getCapability(PLAYER_VARIABLES_CAPABILITY, null).orElse(new PlayerVariables())).syncPlayerVariables(entityiterator);
}
}
}
@SubscribeEvent
public static void onPlayerLoggedIn(PlayerEvent.PlayerLoggedInEvent event) {
if (!event.getEntity().level().isClientSide()) {
SavedData mapdata = MapVariables.get(event.getEntity().level());
SavedData worlddata = WorldVariables.get(event.getEntity().level());
if (mapdata != null)
TargetMod.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> (ServerPlayer) event.getEntity()), new SavedDataSyncMessage(0, mapdata));
if (worlddata != null)
TargetMod.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> (ServerPlayer) event.getEntity()), new SavedDataSyncMessage(1, worlddata));
}
}
@SubscribeEvent
public static void onPlayerChangedDimension(PlayerEvent.PlayerChangedDimensionEvent event) {
if (!event.getEntity().level().isClientSide()) {
SavedData worlddata = WorldVariables.get(event.getEntity().level());
if (worlddata != null)
TargetMod.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> (ServerPlayer) event.getEntity()), new SavedDataSyncMessage(1, worlddata));
}
}
}
public static class WorldVariables extends SavedData {
public static final String DATA_NAME = "target_worldvars";
public static WorldVariables load(CompoundTag tag) {
WorldVariables data = new WorldVariables();
data.read(tag);
return data;
}
public void read(CompoundTag nbt) {
}
@Override
public CompoundTag save(CompoundTag nbt) {
return nbt;
}
public void syncData(LevelAccessor world) {
this.setDirty();
if (world instanceof Level level && !level.isClientSide())
TargetMod.PACKET_HANDLER.send(PacketDistributor.DIMENSION.with(level::dimension), new SavedDataSyncMessage(1, this));
}
static WorldVariables clientSide = new WorldVariables();
public static WorldVariables get(LevelAccessor world) {
if (world instanceof ServerLevel level) {
return level.getDataStorage().computeIfAbsent(e -> WorldVariables.load(e), WorldVariables::new, DATA_NAME);
} else {
return clientSide;
}
}
}
public static class MapVariables extends SavedData {
public static final String DATA_NAME = "target_mapvars";
public boolean pvpmode = false;
public static MapVariables load(CompoundTag tag) {
MapVariables data = new MapVariables();
data.read(tag);
return data;
}
public void read(CompoundTag nbt) {
pvpmode = nbt.getBoolean("pvpmode");
}
@Override
public CompoundTag save(CompoundTag nbt) {
nbt.putBoolean("pvpmode", pvpmode);
return nbt;
}
public void syncData(LevelAccessor world) {
this.setDirty();
if (world instanceof Level && !world.isClientSide())
TargetMod.PACKET_HANDLER.send(PacketDistributor.ALL.noArg(), new SavedDataSyncMessage(0, this));
}
static MapVariables clientSide = new MapVariables();
public static MapVariables get(LevelAccessor world) {
if (world instanceof ServerLevelAccessor serverLevelAcc) {
return serverLevelAcc.getLevel().getServer().getLevel(Level.OVERWORLD).getDataStorage().computeIfAbsent(e -> MapVariables.load(e), MapVariables::new, DATA_NAME);
} else {
return clientSide;
}
}
}
public static class SavedDataSyncMessage {
private final int type;
private SavedData data;
public SavedDataSyncMessage(FriendlyByteBuf buffer) {
this.type = buffer.readInt();
CompoundTag nbt = buffer.readNbt();
if (nbt != null) {
this.data = this.type == 0 ? new MapVariables() : new WorldVariables();
if (this.data instanceof MapVariables mapVariables)
mapVariables.read(nbt);
else if (this.data instanceof WorldVariables worldVariables)
worldVariables.read(nbt);
}
}
public SavedDataSyncMessage(int type, SavedData data) {
this.type = type;
this.data = data;
}
public static void buffer(SavedDataSyncMessage message, FriendlyByteBuf buffer) {
buffer.writeInt(message.type);
if (message.data != null)
buffer.writeNbt(message.data.save(new CompoundTag()));
}
public static void handler(SavedDataSyncMessage message, Supplier<NetworkEvent.Context> contextSupplier) {
NetworkEvent.Context context = contextSupplier.get();
context.enqueueWork(() -> {
if (!context.getDirection().getReceptionSide().isServer() && message.data != null) {
if (message.type == 0)
MapVariables.clientSide = (MapVariables) message.data;
else
WorldVariables.clientSide = (WorldVariables) message.data;
}
});
context.setPacketHandled(true);
}
}
public static final Capability<PlayerVariables> PLAYER_VARIABLES_CAPABILITY = CapabilityManager.get(new CapabilityToken<PlayerVariables>() {
@ -147,7 +292,7 @@ public class TargetModVariables {
public double killind = 0;
public void syncPlayerVariables(Entity entity) {
if (entity instanceof ServerPlayer)
if (entity instanceof ServerPlayer serverPlayer)
TargetMod.PACKET_HANDLER.send(PacketDistributor.DIMENSION.with(entity.level()::dimension), new PlayerVariablesSyncMessage(this, entity.getId()));
}
@ -224,7 +369,7 @@ public class TargetModVariables {
NetworkEvent.Context context = contextSupplier.get();
context.enqueueWork(() -> {
if (!context.getDirection().getReceptionSide().isServer()) {
PlayerVariables variables = Minecraft.getInstance().player.level().getEntity(message.target).getCapability(PLAYER_VARIABLES_CAPABILITY, null).orElse(new PlayerVariables());
PlayerVariables variables = ((PlayerVariables) Minecraft.getInstance().player.level().getEntity(message.target).getCapability(PLAYER_VARIABLES_CAPABILITY, null).orElse(new PlayerVariables()));
variables.zoom = message.data.zoom;
variables.zooming = message.data.zooming;
variables.recoil = message.data.recoil;

View file

@ -46,7 +46,7 @@ public class BulletFireNormalProcedure {
ProjectileEntity projectile = new ProjectileEntity(entity.level(), living, damage, headshot);
projectile.setPos((living.getX() + (-0.5) * living.getLookAngle().x), (living.getEyeY() - 0.1 + (-0.5) * living.getLookAngle().y), (living.getZ() + (-0.5) * living.getLookAngle().z));
projectile.shoot(living.getLookAngle().x, living.getLookAngle().y, living.getLookAngle().z, velocity, 2.5f);
projectile.shoot(living.getLookAngle().x, living.getLookAngle().y, living.getLookAngle().z,3 * (float) heldItem.getOrCreateTag().getDouble("speed"), 2.5f);
entity.level().addFreshEntity(projectile);
} else {
@ -56,7 +56,7 @@ public class BulletFireNormalProcedure {
ProjectileEntity projectile = new ProjectileEntity(entity.level(), living, damage, headshot);
projectile.setPos((living.getX() + (-0.5) * living.getLookAngle().x), (living.getEyeY() - 0.1 + (-0.5) * living.getLookAngle().y), (living.getZ() + (-0.5) * living.getLookAngle().z));
projectile.shoot(living.getLookAngle().x, living.getLookAngle().y, living.getLookAngle().z, (float) heldItem.getOrCreateTag().getDouble("velocity"),
projectile.shoot(living.getLookAngle().x, living.getLookAngle().y, living.getLookAngle().z,3 * (float) heldItem.getOrCreateTag().getDouble("velocity"),
(float) living.getAttribute(TargetModAttributes.SPREAD.get()).getBaseValue());
entity.level().addFreshEntity(projectile);
}

View file

@ -12,6 +12,8 @@ import net.minecraftforge.eventbus.api.Event;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import net.mcreator.target.network.TargetModVariables;
import javax.annotation.Nullable;
@ -35,11 +37,17 @@ public class GunsDataProcedure {
itemstackiterator = (entity instanceof LivingEntity _livEnt ? _livEnt.getMainHandItem() : ItemStack.EMPTY);
if (itemstackiterator.is(ItemTags.create(new ResourceLocation("target:gun")))) {
if (itemstackiterator.getOrCreateTag().getDouble("level") >= 10) {
itemstackiterator.getOrCreateTag().putDouble("damageadd", 1 + 0.05 * (itemstackiterator.getOrCreateTag().getDouble("level") - 10));
if (TargetModVariables.MapVariables.get(world).pvpmode == false) {
if (itemstackiterator.getOrCreateTag().getDouble("level") >= 10) {
itemstackiterator.getOrCreateTag().putDouble("damageadd", 1 + 0.05 * (itemstackiterator.getOrCreateTag().getDouble("level") - 10));
} else {
itemstackiterator.getOrCreateTag().putDouble("damageadd", 1);
}
} else {
itemstackiterator.getOrCreateTag().putDouble("damageadd", 1);
}
if (itemstackiterator.getItem() == TargetModItems.SKS.get()) {
itemstackiterator.getOrCreateTag().putDouble("zoomspeed", 1);
itemstackiterator.getOrCreateTag().putDouble("zoom", 1.25);