ClientClockManager.java

net.minecraft.client.ClientClockManager

信息

  • 全限定名:net.minecraft.client.ClientClockManager
  • 类型:public class
  • 包:net.minecraft.client
  • 源码路径:src/main/java/net/minecraft/client/ClientClockManager.java
  • 起始行号:L14
  • 实现:ClockManager
  • 职责:

    TODO

字段/常量

  • clocks

    • 类型: Map<Holder<WorldClock>,ClientClockManager.ClockInstance>
    • 修饰符: private final
    • 源码定位: L15
    • 说明:

      TODO

  • lastTickGameTime

    • 类型: long
    • 修饰符: private
    • 源码定位: L16
    • 说明:

      TODO

内部类/嵌套类型

  • net.minecraft.client.ClientClockManager.ClockInstance
    • 类型: class
    • 修饰符: private static
    • 源码定位: L50
    • 说明:

      TODO

构造器

方法

下面的方法块按源码顺序生成。

private ClientClockManager.ClockInstance getInstance(Holder<WorldClock> definition) @ L18

  • 方法名:getInstance
  • 源码定位:L18
  • 返回类型:ClientClockManager.ClockInstance
  • 修饰符:private

参数:

  • definition: Holder

说明:

TODO

public void tick(long gameTime) @ L22

  • 方法名:tick
  • 源码定位:L22
  • 返回类型:void
  • 修饰符:public

参数:

  • gameTime: long

说明:

TODO

public void handleUpdates(long gameTime, Map<Holder<WorldClock>,ClockNetworkState> updates) @ L34

  • 方法名:handleUpdates
  • 源码定位:L34
  • 返回类型:void
  • 修饰符:public

参数:

  • gameTime: long
  • updates: Map<Holder,ClockNetworkState>

说明:

TODO

public long getTotalTicks(Holder<WorldClock> definition) @ L44

  • 方法名:getTotalTicks
  • 源码定位:L44
  • 返回类型:long
  • 修饰符:public

参数:

  • definition: Holder

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public class ClientClockManager implements ClockManager {
    private final Map<Holder<WorldClock>, ClientClockManager.ClockInstance> clocks = new HashMap<>();
    private long lastTickGameTime;
 
    private ClientClockManager.ClockInstance getInstance(Holder<WorldClock> definition) {
        return this.clocks.computeIfAbsent(definition, var0 -> new ClientClockManager.ClockInstance());
    }
 
    public void tick(long gameTime) {
        long gameTimeDelta = gameTime - this.lastTickGameTime;
        this.lastTickGameTime = gameTime;
 
        for (ClientClockManager.ClockInstance instance : this.clocks.values()) {
            double newPartialTicks = instance.partialTick + (double)gameTimeDelta * instance.rate;
            long fullTicks = Mth.floor(newPartialTicks);
            instance.partialTick = (float)(newPartialTicks - fullTicks);
            instance.totalTicks += fullTicks;
        }
    }
 
    public void handleUpdates(long gameTime, Map<Holder<WorldClock>, ClockNetworkState> updates) {
        this.tick(gameTime);
        updates.forEach((definition, state) -> {
            ClientClockManager.ClockInstance clock = this.getInstance((Holder<WorldClock>)definition);
            clock.totalTicks = state.totalTicks();
            clock.partialTick = state.partialTick();
            clock.rate = state.rate();
        });
    }
 
    @Override
    public long getTotalTicks(Holder<WorldClock> definition) {
        return this.getInstance(definition).totalTicks;
    }
 
    @OnlyIn(Dist.CLIENT)
    private static class ClockInstance {
        private long totalTicks;
        private float partialTick;
        private float rate = 1.0F;
    }
}

引用的其他类