Skip to content

Commit

Permalink
Implemented ServerLevel, ServerPlayer, Level, ClientLevel for Phase 1…
Browse files Browse the repository at this point in the history
… functionality
  • Loading branch information
seelderr committed Jan 21, 2024
1 parent abd7ddd commit dcbe4ed
Show file tree
Hide file tree
Showing 20 changed files with 732 additions and 54 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package io.github.opencubicchunks.cubicchunks;

public interface CanBeCubic {
boolean cc_isCubic();
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
package io.github.opencubicchunks.cubicchunks;

public interface MarkableAsCubic {
public interface MarkableAsCubic extends CanBeCubic {
void cc_setCubic();
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,25 @@

import io.github.opencubicchunks.cubicchunks.MarkableAsCubic;
import io.github.opencubicchunks.cubicchunks.client.multiplayer.CubicClientLevel;
import io.github.opencubicchunks.cubicchunks.mixin.core.common.world.level.MixinLevel;
import net.minecraft.client.multiplayer.ClientLevel;
import org.spongepowered.asm.mixin.Mixin;

@Mixin(ClientLevel.class)
public class MixinClientLevel implements CubicClientLevel, MarkableAsCubic {
public abstract class MixinClientLevel extends MixinLevel implements CubicClientLevel, MarkableAsCubic {
protected boolean cc_isCubic;

@Override
public void cc_setCubic() { cc_isCubic = true;}

@Override public boolean cc_isCubic() {
return cc_isCubic;
}

@Override public boolean cc_hasCube(int x, int y, int z) {
return true;
}

// unload
// TODO: Phase 2 - this interacts with the lighting engine and will need to change to support cubes

Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,43 @@
package io.github.opencubicchunks.cubicchunks.mixin.core.common.server;

import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import com.llamalad7.mixinextras.sugar.Share;
import com.llamalad7.mixinextras.sugar.ref.LocalRef;
import io.github.opencubicchunks.cc_core.api.CubePos;
import io.github.opencubicchunks.cubicchunks.CanBeCubic;
import io.github.opencubicchunks.cubicchunks.MarkableAsCubic;
import net.minecraft.core.BlockPos;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.level.ChunkPos;
import net.minecraft.world.level.storage.ServerLevelData;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Mixin(MinecraftServer.class)
public class MixinMinecraftServer implements MarkableAsCubic {
protected boolean cc_isCubic;
public abstract class MixinMinecraftServer {
@Inject(method = "setInitialSpawn", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/ChunkPos;<init>(Lnet/minecraft/core/BlockPos;)V"))
private static void cc_replaceChunkPosInSetInitialSpawn(ServerLevel serverLevel, ServerLevelData serverLevelData, boolean generateBonusChest, boolean debug, CallbackInfo ci, @Share(
"cubePos") LocalRef<CubePos> cubePosLocalRef) {
if(((CanBeCubic) serverLevel).cc_isCubic()) {
CubePos cubePos = new CubePos(serverLevel.getChunkSource().randomState().sampler().findSpawnPosition());
cubePosLocalRef.set(cubePos);
}
}

@Override
public void cc_setCubic() { cc_isCubic = true;}
@WrapOperation(method = "setInitialSpawn", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/ChunkPos;getWorldPosition()Lnet/minecraft/core/BlockPos;"))
private static BlockPos cc_replaceGetWorldPositionInSetInitialSpawn(ChunkPos chunkPos, Operation<BlockPos> original, ServerLevel serverLevel, @Share(
"cubePos") LocalRef<CubePos> cubePosLocalRef) {
if(((CanBeCubic) serverLevel).cc_isCubic()) {
return cubePosLocalRef.get().asChunkPos().getWorldPosition();
}
return null;
}

// change getheight to funny algorithm that barteks wrote

// setInitialSpawn - mixin

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,14 @@
public abstract class MixinChunkTaskPriorityQueue implements MarkableAsCubic {
protected boolean cc_isCubic;

@Override
public void cc_setCubic() {
@Override public void cc_setCubic() {
cc_isCubic = true;
}

@Override public boolean cc_isCubic() {
return cc_isCubic;
}

@Inject(method = "resortChunkTasks", at = @At("HEAD"))
private void cc_onResortChunkTasks(int p_140522_, ChunkPos p_140523_, int p_140524_, CallbackInfo ci) {
assert !cc_isCubic;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,14 @@
public abstract class MixinChunkTaskPriorityQueueSorter implements CubicTaskPriorityQueueSorter, MarkableAsCubic {
protected boolean cc_isCubic;

@Override
public void cc_setCubic() {
@Override public void cc_setCubic() {
cc_isCubic = true;
}

@Override public boolean cc_isCubic() {
return cc_isCubic;
}

/**
* This is a method that is only used for debugging, so we don't currently test it.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,10 @@ public void cc_setCubic() {
cc_noChunkLevel = levelCount-1;
}

@Override public boolean cc_isCubic() {
return cc_isCubic;
}

@Redirect(method="*", at = @At(value = "FIELD", target = "Lnet/minecraft/world/level/ChunkPos;INVALID_CHUNK_POS:J"))
private long cc_sentinelValue() {
if (cc_isCubic)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,10 @@ public void cc_setCubic() {
cc_isCubic = true;
}

@Override public boolean cc_isCubic() {
return cc_isCubic;
}

@Inject(method = {"addTicket(Lnet/minecraft/server/level/TicketType;Lnet/minecraft/world/level/ChunkPos;ILjava/lang/Object;)V",
"removeTicket(Lnet/minecraft/server/level/TicketType;Lnet/minecraft/world/level/ChunkPos;ILjava/lang/Object;)V",
"addRegionTicket(Lnet/minecraft/server/level/TicketType;Lnet/minecraft/world/level/ChunkPos;ILjava/lang/Object;)V",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,16 +28,21 @@ public void cc_setCubic() {
cc_isCubic = true;
}

// isNaturalSpawningAllowed - mixin? new function?
@Override
public boolean cc_isCubic() {
return cc_isCubic;
}

// TODO: phase 3 - isNaturalSpawningAllowed

// invalidateCapabilites - phase 3, neoforge api
// TODO: phase 3 - invalidateCapabilites, neoforge api

// tickCube - new function
// TODO: phase 2 - tickCube - new function

// setCubeForced - new function
// TODO: phase 4 - setCubeForced - new function

// saveDebugReport - mixins, debug only, low priority
// TODO: saveDebugReport - mixins, debug only, low priority, if we really really really really need it

// isPositionEntityTicking - mixin
// TODO: phase 2 - isPositionEntityTicking - mixin

}
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,10 @@ public void cc_setCubic() {
cc_isCubic = true;
}

@Override public boolean cc_isCubic() {
return cc_isCubic;
}

/**
* This mixin steals the x/y/z coordinates from a call to ChunkPos and replaces the ChunkPos in the addRegionTicketCall with a CloPos instead.
*/
Expand Down
Loading

0 comments on commit dcbe4ed

Please sign in to comment.