стабилизируем код
This commit is contained in:
@@ -68,6 +68,7 @@ public class Main {
|
||||
|
||||
ServerComponent serverComponent = DaggerServerComponent.builder()
|
||||
.scenarioModule(new ScenarioModule(configComponent.getConfig()))
|
||||
.worldModule(new WorldModule(configComponent.getConfig()))
|
||||
.build();
|
||||
serverComponent.getPacketScenarios().forEach(scenario -> scenario.setup(serverComponent.getProtocolHandlersBus()));
|
||||
|
||||
|
||||
@@ -1,18 +1,31 @@
|
||||
package mc.server.di;
|
||||
|
||||
import com.typesafe.config.Config;
|
||||
import dagger.Module;
|
||||
import dagger.Provides;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import mc.protocol.model.Location;
|
||||
import mc.protocol.world.World;
|
||||
import mc.server.world.SomeWorld;
|
||||
|
||||
import javax.inject.Singleton;
|
||||
|
||||
@Module
|
||||
@RequiredArgsConstructor
|
||||
public class WorldModule {
|
||||
|
||||
private final Config config;
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
World provideWorld() {
|
||||
return new SomeWorld();
|
||||
Location spawn = new Location();
|
||||
spawn.set(
|
||||
config.getDouble("world.spawn.x"),
|
||||
config.getDouble("world.spawn.y"),
|
||||
config.getDouble("world.spawn.z")
|
||||
);
|
||||
|
||||
return new SomeWorld(spawn);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,20 +6,21 @@ import lombok.RequiredArgsConstructor;
|
||||
import mc.protocol.ProtocolAttributes;
|
||||
import mc.protocol.State;
|
||||
import mc.protocol.handler.ProtocolHandlersBus;
|
||||
import mc.protocol.model.Location;
|
||||
import mc.protocol.model.ChunkSectionLocation;
|
||||
import mc.protocol.model.Look;
|
||||
import mc.protocol.packets.KeepAlivePacket;
|
||||
import mc.protocol.packets.login.client.LoginStartPacket;
|
||||
import mc.protocol.packets.login.server.LoginSuccessPacket;
|
||||
import mc.protocol.packets.play.server.*;
|
||||
import mc.protocol.pool.ProtocolObjectPool;
|
||||
import mc.protocol.utils.Difficulty;
|
||||
import mc.protocol.utils.GameMode;
|
||||
import mc.protocol.utils.LocationUtils;
|
||||
import mc.protocol.world.Chunk;
|
||||
import mc.protocol.world.World;
|
||||
import mc.server.Player;
|
||||
import mc.server.PlayerManager;
|
||||
import mc.server.ServetAttributes;
|
||||
import mc.server.util.LocationUtils;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
@@ -95,35 +96,39 @@ public class ScenarioLogin implements PacketScenario {
|
||||
|
||||
@SuppressWarnings("java:S2589")
|
||||
private void sendWorldData(Player player) {
|
||||
Location chunkLocation = LocationUtils.toChunkXZ(player.getLocation());
|
||||
// Chunk chunk = world.getChunk((int) chunkLocation.getX(), (int) chunkLocation.getZ());
|
||||
Chunk chunk = world.getChunk(-50, -16);
|
||||
ChunkSectionLocation chunkLocation = LocationUtils.location2chunkPooled(player.getLocation());
|
||||
Chunk chunk = world.getChunk(chunkLocation);
|
||||
|
||||
var chunkDataPacket = new ChunkDataPacket();
|
||||
chunkDataPacket.setChunk(chunk);
|
||||
|
||||
player.getCtx().write(chunkDataPacket);
|
||||
|
||||
for (int i = 1; i <= config.getInt("world.view-distance"); i++) {
|
||||
int minX = (int) chunkLocation.getX() - i;
|
||||
int minZ = (int) chunkLocation.getZ() - i;
|
||||
int maxX = (int) chunkLocation.getX() + i;
|
||||
int maxZ = (int) chunkLocation.getZ() + i;
|
||||
int distance = config.getInt("world.view-distance");
|
||||
if (distance > 0) {
|
||||
int minX = chunkLocation.getX() - distance;
|
||||
int minZ = chunkLocation.getZ() - distance;
|
||||
int maxX = chunkLocation.getX() + distance;
|
||||
int maxZ = chunkLocation.getZ() + distance;
|
||||
|
||||
for (int z = minZ; z <= maxZ; z++) {
|
||||
for (int x = minX; x <= maxX; x++) {
|
||||
if ((z == minZ || z == maxZ) || (x == minX || x == maxX)) {
|
||||
if (x == chunkLocation.getX() && z == chunkLocation.getZ()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
chunk = world.getChunk(x, z);
|
||||
if (chunk != null) {
|
||||
chunkDataPacket = new ChunkDataPacket();
|
||||
chunk = world.getChunk(x, z);
|
||||
if (chunk != null) {
|
||||
chunkDataPacket.setChunk(chunk);
|
||||
player.getCtx().write(chunkDataPacket);
|
||||
}
|
||||
chunkDataPacket.setChunk(chunk);
|
||||
player.getCtx().write(chunkDataPacket);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
player.getCtx().flush();
|
||||
ProtocolObjectPool.chunkSectionLocation().returnObject(chunkLocation);
|
||||
}
|
||||
|
||||
private void sendPlayerPositionAndLook(Player player) {
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
package mc.server.util;
|
||||
|
||||
import lombok.experimental.UtilityClass;
|
||||
import mc.protocol.model.Location;
|
||||
|
||||
@UtilityClass
|
||||
public class LocationUtils {
|
||||
|
||||
//TODO заменить другими инструментами
|
||||
public Location toChunkXZ(Location location) {
|
||||
Location location0 = new Location();
|
||||
location0.set((int) location.getX() >> 4, 0d, (int) location.getZ() >> 4);
|
||||
return location0;
|
||||
}
|
||||
}
|
||||
@@ -1,16 +1,18 @@
|
||||
package mc.server.world;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import mc.protocol.model.ChunkSectionLocation;
|
||||
import mc.protocol.model.Location;
|
||||
import mc.protocol.pool.ProtocolObjectPool;
|
||||
import mc.protocol.utils.LevelType;
|
||||
import mc.protocol.world.Chunk;
|
||||
import mc.protocol.world.World;
|
||||
import mc.utils.Table;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
public class SomeWorld implements World {
|
||||
|
||||
private static final Location spawn;
|
||||
private final Table<Integer, Integer, Chunk> chunkTable = new Table<>();
|
||||
private final Location spawn;
|
||||
|
||||
@Override
|
||||
public LevelType getLevelType() {
|
||||
@@ -19,15 +21,11 @@ public class SomeWorld implements World {
|
||||
|
||||
@Override
|
||||
public Location getSpawn() {
|
||||
return SomeWorld.spawn;
|
||||
return this.spawn;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Chunk getChunk(int x, int z) {
|
||||
if (x != -50 && z != -16) {
|
||||
return null;
|
||||
}
|
||||
|
||||
Chunk chunk = chunkTable.getColumnAndRow(x, z);
|
||||
if (chunk == null) {
|
||||
chunk = new SomeChunk(x, z);
|
||||
@@ -37,8 +35,8 @@ public class SomeWorld implements World {
|
||||
return chunk;
|
||||
}
|
||||
|
||||
static {
|
||||
spawn = new Location();
|
||||
spawn.set(-790d, 256d, -263d + 16d);
|
||||
@Override
|
||||
public Chunk getChunk(ChunkSectionLocation chunkSectionLocation) {
|
||||
return getChunk(chunkSectionLocation.getX(), chunkSectionLocation.getZ());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,5 +23,10 @@ icon {
|
||||
}
|
||||
|
||||
world {
|
||||
view-distance: 0
|
||||
view-distance: 1
|
||||
spawn {
|
||||
x: -790
|
||||
y: 256
|
||||
z: -247
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user