加入了开关PVP模式的指令,试验一下弹速 * 3
This commit is contained in:
parent
7602d903d0
commit
730af151b0
4 changed files with 240 additions and 32 deletions
|
@ -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;
|
||||
}));
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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 (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);
|
||||
|
|
Loading…
Add table
Reference in a new issue