Cached tameable owner

This commit is contained in:
Sotr
2018-06-09 17:28:16 +08:00
parent 82308b35a2
commit ff23276f8f
4 changed files with 92 additions and 0 deletions

View File

@@ -0,0 +1,44 @@
package io.akarin.server.mixin.core;
import java.util.UUID;
import javax.annotation.Nullable;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import org.spongepowered.asm.mixin.Shadow;
import com.google.common.base.Optional;
import net.minecraft.server.DataWatcherObject;
import net.minecraft.server.Entity;
import net.minecraft.server.EntityHorseAbstract;
import net.minecraft.server.World;
@Mixin(value = EntityHorseAbstract.class, remap = false)
public abstract class MixinEntityHorseAbstract extends Entity {
@Shadow @Final private static DataWatcherObject<Optional<UUID>> bJ;
@Nullable private Optional<UUID> cachedOwnerId;
@Overwrite
@Nullable public UUID getOwnerUUID() {
if (cachedOwnerId == null) cachedOwnerId = datawatcher.get(bJ);
return cachedOwnerId.orNull();
}
@Overwrite
public void setOwnerUUID(@Nullable UUID uuid) {
cachedOwnerId = Optional.fromNullable(uuid);
datawatcher.set(bJ, cachedOwnerId);
}
/**
* Extends from superclass
* @param world
*/
public MixinEntityHorseAbstract(World world) {
super(world);
}
}

View File

@@ -0,0 +1,44 @@
package io.akarin.server.mixin.core;
import java.util.UUID;
import javax.annotation.Nullable;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import org.spongepowered.asm.mixin.Shadow;
import com.google.common.base.Optional;
import net.minecraft.server.DataWatcherObject;
import net.minecraft.server.Entity;
import net.minecraft.server.EntityTameableAnimal;
import net.minecraft.server.World;
@Mixin(value = EntityTameableAnimal.class, remap = false)
public abstract class MixinEntityTameableAnimal extends Entity {
@Shadow @Final protected static DataWatcherObject<Optional<UUID>> by;
@Nullable private Optional<UUID> cachedOwnerId;
@Overwrite
@Nullable public UUID getOwnerUUID() {
if (cachedOwnerId == null) cachedOwnerId = datawatcher.get(by);
return cachedOwnerId.orNull();
}
@Overwrite
public void setOwnerUUID(@Nullable UUID uuid) {
cachedOwnerId = Optional.fromNullable(uuid);
datawatcher.set(by, cachedOwnerId);
}
/**
* Extends from superclass
* @param world
*/
public MixinEntityTameableAnimal(World world) {
super(world);
}
}

View File

@@ -21,6 +21,8 @@ import io.akarin.server.core.AkarinGlobalConfig;
import io.akarin.server.core.AkarinSlackScheduler;
import net.minecraft.server.CrashReport;
import net.minecraft.server.CustomFunctionData;
import net.minecraft.server.Entity;
import net.minecraft.server.EntityTameableAnimal;
import net.minecraft.server.ITickable;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.MojangStatisticsGenerator;