1.19.4 -> 1.20-pre6

This commit is contained in:
Sollace 2023-06-03 12:40:54 +01:00
parent 3ab501e3f3
commit 43d1142f1f
135 changed files with 723 additions and 714 deletions

View file

@ -3,10 +3,10 @@ org.gradle.daemon=false
# Fabric Properties # Fabric Properties
# check these on https://fabricmc.net/develop # check these on https://fabricmc.net/develop
minecraft_version=1.19.4 minecraft_version=1.20-pre6
yarn_mappings=1.19.4+build.1 yarn_mappings=1.20-pre6+build.2
loader_version=0.14.17 loader_version=0.14.21
fabric_version=0.76.0+1.19.4 fabric_version=0.82.1+1.20
# Mod Properties # Mod Properties
group=com.minelittlepony group=com.minelittlepony
@ -15,19 +15,19 @@ org.gradle.daemon=false
description=Magical Abilities for Mine Little Pony! description=Magical Abilities for Mine Little Pony!
# Publishing # Publishing
minecraft_version_range=>=1.19.4 minecraft_version_range=>=1.20.0
modrinth_loader_type=fabric modrinth_loader_type=fabric
modrinth_project_id= modrinth_project_id=9K7RJlvM
# Dependencies # Dependencies
fabwork_version=1.1.9 fabwork_version=1.2.0
modmenu_version=6.1.0-rc.4 modmenu_version=7.0.0-beta.2
minelp_version=4.8.7 minelp_version=4.9.0-beta.2
kirin_version=1.14.0 kirin_version=1.15.0
reach_attributes_version=2.3.2 reach_attributes_version=2.3.3
trinkets_version=3.6.0 trinkets_version=3.6.0
terraformer_api_version=6.1.0 terraformer_api_version=7.0.0-beta.1
# TMI Testing # TMI Testing
tmi_type=emi tmi_type=none
emi_version=1.0.0+1.19.4 emi_version=1.0.0+1.19.3

Binary file not shown.

View file

@ -30,6 +30,6 @@ public interface EntityConvertable<E extends Entity> extends WorldConvertable {
@Override @Override
default World asWorld() { default World asWorld() {
return asEntity().world; return asEntity().getWorld();
} }
} }

View file

@ -79,7 +79,7 @@ public class InteractionManager {
*/ */
@NotNull @NotNull
public final PlayerEntity createPlayer(Entity observer, GameProfile profile) { public final PlayerEntity createPlayer(Entity observer, GameProfile profile) {
return createPlayer(observer.world, profile); return createPlayer(observer.getWorld(), profile);
} }
/** /**

View file

@ -127,7 +127,7 @@ public class ChangelingFeedAbility implements Ability<Hit> {
if (!canFeed(iplayer)) { if (!canFeed(iplayer)) {
iplayer.playSound(SoundEvents.ENTITY_PLAYER_BURP, 1, (float)player.world.random.nextTriangular(1F, 0.2F)); iplayer.playSound(SoundEvents.ENTITY_PLAYER_BURP, 1, (float)player.getWorld().random.nextTriangular(1F, 0.2F));
} else { } else {
iplayer.playSound(SoundEvents.ENTITY_GENERIC_DRINK, 0.1F, iplayer.getRandomPitch()); iplayer.playSound(SoundEvents.ENTITY_GENERIC_DRINK, 0.1F, iplayer.getRandomPitch());
} }

View file

@ -164,9 +164,9 @@ public class EarthPonyKickAbility implements Ability<Pos> {
PlayerEntity player = iplayer.asEntity(); PlayerEntity player = iplayer.asEntity();
if (BlockDestructionManager.of(player.world).getBlockDestruction(pos) + 4 >= BlockDestructionManager.MAX_DAMAGE) { if (BlockDestructionManager.of(player.getWorld()).getBlockDestruction(pos) + 4 >= BlockDestructionManager.MAX_DAMAGE) {
if (player.world.random.nextInt(30) == 0) { if (player.getWorld().random.nextInt(30) == 0) {
tree.traverse(player.world, pos, (w, state, p, recurseLevel) -> { tree.traverse(player.getWorld(), pos, (w, state, p, recurseLevel) -> {
if (recurseLevel < 5) { if (recurseLevel < 5) {
w.breakBlock(p, true); w.breakBlock(p, true);
} else { } else {
@ -196,12 +196,12 @@ public class EarthPonyKickAbility implements Ability<Pos> {
} }
private int dropApples(PlayerEntity player, BlockPos pos) { private int dropApples(PlayerEntity player, BlockPos pos) {
TreeType tree = TreeType.at(pos, player.world); TreeType tree = TreeType.at(pos, player.getWorld());
if (tree.countBlocks(player.world, pos) > 0) { if (tree.countBlocks(player.getWorld(), pos) > 0) {
List<ItemEntity> capturedDrops = new ArrayList<>(); List<ItemEntity> capturedDrops = new ArrayList<>();
tree.traverse(player.world, pos, (world, state, position, recurse) -> { tree.traverse(player.getWorld(), pos, (world, state, position, recurse) -> {
affectBlockChange(player, position); affectBlockChange(player, position);
}, (world, state, position, recurse) -> { }, (world, state, position, recurse) -> {
affectBlockChange(player, position); affectBlockChange(player, position);
@ -215,7 +215,7 @@ public class EarthPonyKickAbility implements Ability<Pos> {
} }
}); });
capturedDrops.forEach(player.world::spawnEntity); capturedDrops.forEach(player.getWorld()::spawnEntity);
return capturedDrops.size() / 3; return capturedDrops.size() / 3;
} }
@ -255,28 +255,28 @@ public class EarthPonyKickAbility implements Ability<Pos> {
} }
private void affectBlockChange(PlayerEntity player, BlockPos position) { private void affectBlockChange(PlayerEntity player, BlockPos position) {
BlockDestructionManager.of(player.world).damageBlock(position, 4); BlockDestructionManager.of(player.getWorld()).damageBlock(position, 4);
PosHelper.all(position, p -> { PosHelper.all(position, p -> {
BlockState s = player.world.getBlockState(p); BlockState s = player.getWorld().getBlockState(p);
if (s.getBlock() instanceof BeehiveBlock) { if (s.getBlock() instanceof BeehiveBlock) {
if (player.world.getBlockEntity(p) instanceof BeehiveBlockEntity hive) { if (player.getWorld().getBlockEntity(p) instanceof BeehiveBlockEntity hive) {
hive.angerBees(player, s, BeehiveBlockEntity.BeeState.EMERGENCY); hive.angerBees(player, s, BeehiveBlockEntity.BeeState.EMERGENCY);
} }
player.world.updateComparators(position, s.getBlock()); player.getWorld().updateComparators(position, s.getBlock());
Box area = new Box(position).expand(8, 6, 8); Box area = new Box(position).expand(8, 6, 8);
List<BeeEntity> nearbyBees = player.world.getNonSpectatingEntities(BeeEntity.class, area); List<BeeEntity> nearbyBees = player.getWorld().getNonSpectatingEntities(BeeEntity.class, area);
if (!nearbyBees.isEmpty()) { if (!nearbyBees.isEmpty()) {
List<PlayerEntity> nearbyPlayers = player.world.getNonSpectatingEntities(PlayerEntity.class, area); List<PlayerEntity> nearbyPlayers = player.getWorld().getNonSpectatingEntities(PlayerEntity.class, area);
int i = nearbyPlayers.size(); int i = nearbyPlayers.size();
for (BeeEntity bee : nearbyBees) { for (BeeEntity bee : nearbyBees) {
if (bee.getTarget() == null) { if (bee.getTarget() == null) {
bee.setTarget(nearbyPlayers.get(player.world.random.nextInt(i))); bee.setTarget(nearbyPlayers.get(player.getWorld().random.nextInt(i)));
} }
} }
} }

View file

@ -17,13 +17,13 @@ import com.minelittlepony.unicopia.util.PosHelper;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.Material;
import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.enchantment.EnchantmentHelper;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.LivingEntity; import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.attribute.EntityAttributes; import net.minecraft.entity.attribute.EntityAttributes;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.registry.tag.BlockTags;
import net.minecraft.server.world.ServerWorld; import net.minecraft.server.world.ServerWorld;
import net.minecraft.util.math.BlockBox; import net.minecraft.util.math.BlockBox;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
@ -148,7 +148,7 @@ public class EarthPonyStompAbility implements Ability<Hit> {
spawnEffectAround(player, center, radius, rad); spawnEffectAround(player, center, radius, rad);
ParticleUtils.spawnParticle(player.world, UParticles.GROUND_POUND, player.getX(), player.getY() - 1, player.getZ(), 0, 0, 0); ParticleUtils.spawnParticle(player.getWorld(), UParticles.GROUND_POUND, player.getX(), player.getY() - 1, player.getZ(), 0, 0, 0);
iplayer.subtractEnergyCost(rad); iplayer.subtractEnergyCost(rad);
}); });
@ -159,7 +159,7 @@ public class EarthPonyStompAbility implements Ability<Hit> {
double dist = Math.sqrt(i.getSquaredDistance(source.getX(), source.getY(), source.getZ())); double dist = Math.sqrt(i.getSquaredDistance(source.getX(), source.getY(), source.getZ()));
if (dist <= radius) { if (dist <= radius) {
spawnEffect(source.world, i, dist, range); spawnEffect(source.getWorld(), i, dist, range);
} }
}); });
} }
@ -187,7 +187,7 @@ public class EarthPonyStompAbility implements Ability<Hit> {
w.breakBlock(pos, true); w.breakBlock(pos, true);
if (w instanceof ServerWorld) { if (w instanceof ServerWorld) {
if (state.getMaterial() == Material.STONE && w.getRandom().nextInt(4) == 0) { if (state.isIn(BlockTags.BASE_STONE_OVERWORLD) && w.getRandom().nextInt(4) == 0) {
ItemStack stack = UItems.PEBBLES.getDefaultStack(); ItemStack stack = UItems.PEBBLES.getDefaultStack();
stack.setCount(1 + w.getRandom().nextInt(2)); stack.setCount(1 + w.getRandom().nextInt(2));
Block.dropStack(w, pos, stack); Block.dropStack(w, pos, stack);

View file

@ -168,7 +168,7 @@ public class UnicornTeleportAbility implements Ability<Pos> {
participant.fallDistance /= distance; participant.fallDistance /= distance;
participant.world.playSound(null, destination.pos(), USounds.ENTITY_PLAYER_UNICORN_TELEPORT, SoundCategory.PLAYERS, 1, 1); participant.getWorld().playSound(null, destination.pos(), USounds.ENTITY_PLAYER_UNICORN_TELEPORT, SoundCategory.PLAYERS, 1, 1);
} }
private boolean enterable(World w, BlockPos pos) { private boolean enterable(World w, BlockPos pos) {
@ -186,7 +186,7 @@ public class UnicornTeleportAbility implements Ability<Pos> {
Block c = state.getBlock(); Block c = state.getBlock();
return state.hasSolidTopSurface(w, pos, player) return state.hasSolidTopSurface(w, pos, player)
|| state.getMaterial().isLiquid() || state.isLiquid()
|| (c instanceof WallBlock) || (c instanceof WallBlock)
|| (c instanceof FenceBlock) || (c instanceof FenceBlock)
|| (c instanceof LeavesBlock); || (c instanceof LeavesBlock);

View file

@ -131,8 +131,8 @@ public class PlaceableSpell extends AbstractDelegatingSpell implements OrientedS
} }
entity.getSpellSlot().put(copy); entity.getSpellSlot().put(copy);
entity.setCaster(source); entity.setCaster(source);
entity.world.spawnEntity(entity); entity.getWorld().spawnEntity(entity);
Ether.get(entity.world).put(getType(), entity); Ether.get(entity.getWorld()).put(getType(), entity);
castEntity.set(entity); castEntity.set(entity);
setDirty(); setDirty();

View file

@ -5,7 +5,7 @@ import com.minelittlepony.unicopia.item.EnchantableItem;
import com.minelittlepony.unicopia.item.URecipes; import com.minelittlepony.unicopia.item.URecipes;
import com.minelittlepony.unicopia.util.InventoryUtil; import com.minelittlepony.unicopia.util.InventoryUtil;
import net.minecraft.inventory.CraftingInventory; import net.minecraft.inventory.RecipeInputInventory;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.network.PacketByteBuf; import net.minecraft.network.PacketByteBuf;
import net.minecraft.recipe.RecipeSerializer; import net.minecraft.recipe.RecipeSerializer;
@ -20,7 +20,7 @@ public class SpellShapedCraftingRecipe extends ShapedRecipe {
} }
@Override @Override
public ItemStack craft(CraftingInventory inventory, DynamicRegistryManager registries) { public ItemStack craft(RecipeInputInventory inventory, DynamicRegistryManager registries) {
return InventoryUtil.stream(inventory) return InventoryUtil.stream(inventory)
.filter(stack -> stack.getItem() instanceof EnchantableItem) .filter(stack -> stack.getItem() instanceof EnchantableItem)
.filter(EnchantableItem::isEnchanted) .filter(EnchantableItem::isEnchanted)

View file

@ -75,8 +75,8 @@ public class AttractiveSpell extends ShieldSpell implements HomingSpell, TimedSp
@Override @Override
protected boolean isValidTarget(Caster<?> source, Entity entity) { protected boolean isValidTarget(Caster<?> source, Entity entity) {
if (target.isPresent(entity.world)) { if (target.referenceEquals(entity)) {
return target.get(entity.world) == entity; return true;
} }
return getTraits().get(Trait.KNOWLEDGE) > 10 ? entity instanceof ItemEntity : super.isValidTarget(source, entity); return getTraits().get(Trait.KNOWLEDGE) > 10 ? entity instanceof ItemEntity : super.isValidTarget(source, entity);
} }
@ -114,7 +114,7 @@ public class AttractiveSpell extends ShieldSpell implements HomingSpell, TimedSp
z = 0; z = 0;
} }
if (this.target.get(target.world) == target) { if (this.target.referenceEquals(target)) {
target.fallDistance = 0; target.fallDistance = 0;
if (target.isOnGround()) { if (target.isOnGround()) {

View file

@ -41,7 +41,7 @@ public class CatapultSpell extends AbstractSpell implements ProjectileDelegate.B
@Override @Override
public void onImpact(MagicProjectileEntity projectile, BlockHitResult hit) { public void onImpact(MagicProjectileEntity projectile, BlockHitResult hit) {
if (!projectile.isClient() && projectile.canModifyAt(hit.getBlockPos())) { if (!projectile.isClient() && projectile.canModifyAt(hit.getBlockPos())) {
createBlockEntity(projectile.world, hit.getBlockPos(), e -> apply(projectile, e)); createBlockEntity(projectile.getWorld(), hit.getBlockPos(), e -> apply(projectile, e));
} }
} }

View file

@ -60,7 +60,7 @@ public class DarkVortexSpell extends AttractiveSpell implements ProjectileDelega
public void onImpact(MagicProjectileEntity projectile, BlockHitResult hit) { public void onImpact(MagicProjectileEntity projectile, BlockHitResult hit) {
if (!projectile.isClient()) { if (!projectile.isClient()) {
BlockPos pos = hit.getBlockPos(); BlockPos pos = hit.getBlockPos();
projectile.world.createExplosion(projectile, pos.getX(), pos.getY(), pos.getZ(), 3, ExplosionSourceType.NONE); projectile.getWorld().createExplosion(projectile, pos.getX(), pos.getY(), pos.getZ(), 3, ExplosionSourceType.NONE);
toPlaceable().tick(projectile, Situation.BODY); toPlaceable().tick(projectile, Situation.BODY);
} }
} }

View file

@ -110,7 +110,7 @@ public class IceSpell extends AbstractSpell {
return true; return true;
} }
if (state.getMaterial() == Material.ICE if (state.isIn(BlockTags.ICE)
&& world.random.nextInt(10) == 0 && world.random.nextInt(10) == 0
&& isSurroundedByIce(world, pos)) { && isSurroundedByIce(world, pos)) {
world.setBlockState(pos, Blocks.PACKED_ICE.getDefaultState()); world.setBlockState(pos, Blocks.PACKED_ICE.getDefaultState());
@ -122,7 +122,7 @@ public class IceSpell extends AbstractSpell {
private static boolean isSurroundedByIce(World w, BlockPos pos) { private static boolean isSurroundedByIce(World w, BlockPos pos) {
return PosHelper.adjacentNeighbours(pos).allMatch(i -> return PosHelper.adjacentNeighbours(pos).allMatch(i ->
w.getBlockState(i).getMaterial() == Material.ICE w.getBlockState(i).isIn(BlockTags.ICE)
); );
} }

View file

@ -71,7 +71,7 @@ public class LightSpell extends AbstractSpell implements TimedSpell, ProjectileD
return caster.getOriginVector().add(VecHelper.supply(() -> caster.asWorld().random.nextInt(3) - 1)); return caster.getOriginVector().add(VecHelper.supply(() -> caster.asWorld().random.nextInt(3) - 1));
})); }));
entity.setMaster(caster); entity.setMaster(caster);
entity.world.spawnEntity(entity); entity.getWorld().spawnEntity(entity);
ref.set(entity); ref.set(entity);
setDirty(); setDirty();
@ -94,7 +94,7 @@ public class LightSpell extends AbstractSpell implements TimedSpell, ProjectileD
} }
lights.forEach(ref -> { lights.forEach(ref -> {
ref.ifPresent(caster.asWorld(), e -> { ref.ifPresent(caster.asWorld(), e -> {
e.world.sendEntityStatus(e, (byte)60); e.getWorld().sendEntityStatus(e, (byte)60);
e.discard(); e.discard();
}); });
}); });

View file

@ -99,7 +99,7 @@ public class NecromancySpell extends AbstractAreaEffectSpell implements Projecti
summonedEntities.removeIf(ref -> ref.getOrEmpty(source.asWorld()).filter(e -> { summonedEntities.removeIf(ref -> ref.getOrEmpty(source.asWorld()).filter(e -> {
if (e.getPos().distanceTo(source.getOriginVector()) > radius * 2) { if (e.getPos().distanceTo(source.getOriginVector()) > radius * 2) {
e.world.sendEntityStatus(e, (byte)60); e.getWorld().sendEntityStatus(e, (byte)60);
e.discard(); e.discard();
return false; return false;
} }
@ -146,7 +146,7 @@ public class NecromancySpell extends AbstractAreaEffectSpell implements Projecti
if (master != null) { if (master != null) {
master.applyDamageEffects(master, e); master.applyDamageEffects(master, e);
} }
e.world.sendEntityStatus(e, (byte)60); e.getWorld().sendEntityStatus(e, (byte)60);
e.discard(); e.discard();
}); });
}); });

View file

@ -122,9 +122,9 @@ public class PortalSpell extends AbstractSpell implements PlaceableSpell.Placeme
entity.setYaw(entity.getYaw() + yawDifference); entity.setYaw(entity.getYaw() + yawDifference);
entity.setVelocity(entity.getVelocity().rotateY(yawDifference * MathHelper.RADIANS_PER_DEGREE)); entity.setVelocity(entity.getVelocity().rotateY(yawDifference * MathHelper.RADIANS_PER_DEGREE));
entity.world.playSoundFromEntity(null, entity, USounds.ENTITY_PLAYER_UNICORN_TELEPORT, entity.getSoundCategory(), 1, 1); entity.getWorld().playSoundFromEntity(null, entity, USounds.ENTITY_PLAYER_UNICORN_TELEPORT, entity.getSoundCategory(), 1, 1);
entity.teleport(dest.x, dest.y, dest.z); entity.teleport(dest.x, dest.y, dest.z);
entity.world.playSoundFromEntity(null, entity, USounds.ENTITY_PLAYER_UNICORN_TELEPORT, entity.getSoundCategory(), 1, 1); entity.getWorld().playSoundFromEntity(null, entity, USounds.ENTITY_PLAYER_UNICORN_TELEPORT, entity.getSoundCategory(), 1, 1);
setDirty(); setDirty();
if (!source.subtractEnergyCost(Math.sqrt(entity.getPos().subtract(dest).length()))) { if (!source.subtractEnergyCost(Math.sqrt(entity.getPos().subtract(dest).length()))) {

View file

@ -106,7 +106,7 @@ public class SiphoningSpell extends AbstractAreaEffectSpell {
} }
} else { } else {
e.heal((float)Math.min(source.getLevel().getScaled(e.getHealth()) / 2F, maxHealthGain * 0.6)); e.heal((float)Math.min(source.getLevel().getScaled(e.getHealth()) / 2F, maxHealthGain * 0.6));
ParticleUtils.spawnParticle(e.world, new FollowingParticleEffect(UParticles.HEALTH_DRAIN, e, 0.2F), e.getPos(), Vec3d.ZERO); ParticleUtils.spawnParticle(e.getWorld(), new FollowingParticleEffect(UParticles.HEALTH_DRAIN, e, 0.2F), e.getPos(), Vec3d.ZERO);
} }
}); });
} }

View file

@ -39,11 +39,11 @@ public class TransformationSpell extends AbstractSpell implements ProjectileDele
@Override @Override
public void onImpact(MagicProjectileEntity projectile, EntityHitResult hit) { public void onImpact(MagicProjectileEntity projectile, EntityHitResult hit) {
if (projectile.world.isClient) { if (projectile.getWorld().isClient) {
return; return;
} }
Entity entity = hit.getEntity(); Entity entity = hit.getEntity();
pickType(entity.getType(), entity.world).flatMap(type -> convert(entity, type)).ifPresentOrElse(e -> { pickType(entity.getType(), entity.getWorld()).flatMap(type -> convert(entity, type)).ifPresentOrElse(e -> {
entity.playSound(USounds.SPELL_TRANSFORM_TRANSMUTE_ENTITY, 1, 1); entity.playSound(USounds.SPELL_TRANSFORM_TRANSMUTE_ENTITY, 1, 1);
}, () -> { }, () -> {
ParticleUtils.spawnParticles(ParticleTypes.SMOKE, entity, 20); ParticleUtils.spawnParticles(ParticleTypes.SMOKE, entity, 20);

View file

@ -16,7 +16,7 @@ import net.minecraft.advancement.criterion.AbstractCriterionConditions;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.predicate.entity.AdvancementEntityPredicateDeserializer; import net.minecraft.predicate.entity.AdvancementEntityPredicateDeserializer;
import net.minecraft.predicate.entity.AdvancementEntityPredicateSerializer; import net.minecraft.predicate.entity.AdvancementEntityPredicateSerializer;
import net.minecraft.predicate.entity.EntityPredicate.Extended; import net.minecraft.predicate.entity.LootContextPredicate;
import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import net.minecraft.util.JsonHelper; import net.minecraft.util.JsonHelper;
@ -31,7 +31,7 @@ public class CustomEventCriterion extends AbstractCriterion<CustomEventCriterion
} }
@Override @Override
protected Conditions conditionsFromJson(JsonObject json, Extended playerPredicate, AdvancementEntityPredicateDeserializer deserializer) { protected Conditions conditionsFromJson(JsonObject json, LootContextPredicate playerPredicate, AdvancementEntityPredicateDeserializer deserializer) {
Set<Race> races = new HashSet<>(); Set<Race> races = new HashSet<>();
@ -73,7 +73,7 @@ public class CustomEventCriterion extends AbstractCriterion<CustomEventCriterion
private final int repeatCount; private final int repeatCount;
public Conditions(Extended playerPredicate, String event, Set<Race> races, Boolean flying, int repeatCount) { public Conditions(LootContextPredicate playerPredicate, String event, Set<Race> races, Boolean flying, int repeatCount) {
super(ID, playerPredicate); super(ID, playerPredicate);
this.event = event; this.event = event;
this.races = races; this.races = races;

View file

@ -10,7 +10,7 @@ import net.minecraft.advancement.criterion.AbstractCriterionConditions;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.predicate.entity.AdvancementEntityPredicateDeserializer; import net.minecraft.predicate.entity.AdvancementEntityPredicateDeserializer;
import net.minecraft.predicate.entity.AdvancementEntityPredicateSerializer; import net.minecraft.predicate.entity.AdvancementEntityPredicateSerializer;
import net.minecraft.predicate.entity.EntityPredicate.Extended; import net.minecraft.predicate.entity.LootContextPredicate;
import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import net.minecraft.util.JsonHelper; import net.minecraft.util.JsonHelper;
@ -25,7 +25,7 @@ public class RaceChangeCriterion extends AbstractCriterion<RaceChangeCriterion.C
} }
@Override @Override
protected Conditions conditionsFromJson(JsonObject json, Extended playerPredicate, AdvancementEntityPredicateDeserializer deserializer) { protected Conditions conditionsFromJson(JsonObject json, LootContextPredicate playerPredicate, AdvancementEntityPredicateDeserializer deserializer) {
return new Conditions(playerPredicate, Race.fromName(JsonHelper.getString(json, "race"), Race.EARTH)); return new Conditions(playerPredicate, Race.fromName(JsonHelper.getString(json, "race"), Race.EARTH));
} }
@ -38,7 +38,7 @@ public class RaceChangeCriterion extends AbstractCriterion<RaceChangeCriterion.C
public static class Conditions extends AbstractCriterionConditions { public static class Conditions extends AbstractCriterionConditions {
private final Race race; private final Race race;
public Conditions(Extended playerPredicate, Race race) { public Conditions(LootContextPredicate playerPredicate, Race race) {
super(ID, playerPredicate); super(ID, playerPredicate);
this.race = race; this.race = race;
} }

View file

@ -16,7 +16,8 @@ import net.minecraft.world.*;
public class BaseZapAppleLeavesBlock extends LeavesBlock implements TintedBlock { public class BaseZapAppleLeavesBlock extends LeavesBlock implements TintedBlock {
BaseZapAppleLeavesBlock() { BaseZapAppleLeavesBlock() {
super(Settings.of(Material.LEAVES) super(Settings.create()
.mapColor(MapColor.PURPLE)
.strength(500, 1200) .strength(500, 1200)
.ticksRandomly() .ticksRandomly()
.sounds(BlockSoundGroup.AZALEA_LEAVES) .sounds(BlockSoundGroup.AZALEA_LEAVES)

View file

@ -6,8 +6,9 @@ import net.minecraft.block.BlockState;
import net.minecraft.block.ButtonBlock; import net.minecraft.block.ButtonBlock;
import net.minecraft.block.LeavesBlock; import net.minecraft.block.LeavesBlock;
import net.minecraft.block.MapColor; import net.minecraft.block.MapColor;
import net.minecraft.block.Material;
import net.minecraft.block.PillarBlock; import net.minecraft.block.PillarBlock;
import net.minecraft.block.enums.Instrument;
import net.minecraft.block.piston.PistonBehavior;
import net.minecraft.entity.EntityType; import net.minecraft.entity.EntityType;
import net.minecraft.sound.BlockSoundGroup; import net.minecraft.sound.BlockSoundGroup;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
@ -20,7 +21,7 @@ interface BlockConstructionUtils {
} }
static ButtonBlock woodenButton(BlockSoundGroup soundGroup, BlockSetType setType) { static ButtonBlock woodenButton(BlockSoundGroup soundGroup, BlockSetType setType) {
return new ButtonBlock(AbstractBlock.Settings.of(Material.DECORATION).noCollision().strength(0.5f).sounds(soundGroup), setType, 30, true); return new ButtonBlock(AbstractBlock.Settings.create().noCollision().strength(0.5f).pistonBehavior(PistonBehavior.DESTROY).sounds(soundGroup), setType, 30, true);
} }
static boolean never(BlockState state, BlockView world, BlockPos pos, EntityType<?> type) { static boolean never(BlockState state, BlockView world, BlockPos pos, EntityType<?> type) {
@ -32,15 +33,15 @@ interface BlockConstructionUtils {
} }
static PillarBlock createLogBlock(MapColor topMapColor, MapColor sideMapColor) { static PillarBlock createLogBlock(MapColor topMapColor, MapColor sideMapColor) {
return new PillarBlock(AbstractBlock.Settings.of(Material.WOOD, state -> state.get(PillarBlock.AXIS) == Direction.Axis.Y ? topMapColor : sideMapColor).strength(2).sounds(BlockSoundGroup.WOOD)); return new PillarBlock(AbstractBlock.Settings.create().mapColor(state -> state.get(PillarBlock.AXIS) == Direction.Axis.Y ? topMapColor : sideMapColor).instrument(Instrument.BASS).strength(2.0f).sounds(BlockSoundGroup.WOOD).burnable());
} }
static PillarBlock createWoodBlock(MapColor mapColor) { static PillarBlock createWoodBlock(MapColor mapColor) {
return new PillarBlock(AbstractBlock.Settings.of(Material.WOOD, mapColor).strength(2).sounds(BlockSoundGroup.WOOD)); return new PillarBlock(AbstractBlock.Settings.create().mapColor(mapColor).instrument(Instrument.BASS).strength(2.0f).sounds(BlockSoundGroup.WOOD).burnable());
} }
static LeavesBlock createLeavesBlock(BlockSoundGroup soundGroup) { static LeavesBlock createLeavesBlock(BlockSoundGroup soundGroup) {
return new LeavesBlock(AbstractBlock.Settings.of(Material.LEAVES).strength(0.2F).ticksRandomly().sounds(soundGroup).nonOpaque().allowsSpawning(BlockConstructionUtils::canSpawnOnLeaves).suffocates(BlockConstructionUtils::never).blockVision(BlockConstructionUtils::never)); return new LeavesBlock(AbstractBlock.Settings.create().mapColor(MapColor.DARK_GREEN).strength(0.2f).ticksRandomly().sounds(soundGroup).nonOpaque().allowsSpawning(BlockConstructionUtils::canSpawnOnLeaves).suffocates(BlockConstructionUtils::never).blockVision(BlockConstructionUtils::never).burnable().pistonBehavior(PistonBehavior.DESTROY).solidBlock(BlockConstructionUtils::never));
} }
static Boolean canSpawnOnLeaves(BlockState state, BlockView world, BlockPos pos, EntityType<?> type) { static Boolean canSpawnOnLeaves(BlockState state, BlockView world, BlockPos pos, EntityType<?> type) {

View file

@ -7,7 +7,6 @@ import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks; import net.minecraft.block.Blocks;
import net.minecraft.block.FrostedIceBlock; import net.minecraft.block.FrostedIceBlock;
import net.minecraft.block.entity.BlockEntity; import net.minecraft.block.entity.BlockEntity;
import net.minecraft.block.piston.PistonBehavior;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.stat.Stats; import net.minecraft.stat.Stats;
@ -35,9 +34,4 @@ public class FrostedObsidianBlock extends FrostedIceBlock {
world.setBlockState(pos, Blocks.LAVA.getDefaultState()); world.setBlockState(pos, Blocks.LAVA.getDefaultState());
world.updateNeighbor(pos, Blocks.LAVA, pos); world.updateNeighbor(pos, Blocks.LAVA, pos);
} }
@Override
public PistonBehavior getPistonBehavior(BlockState state) {
return PistonBehavior.BLOCK;
}
} }

View file

@ -6,8 +6,10 @@ import com.minelittlepony.unicopia.ability.EarthPonyKickAbility.Buckable;
import net.fabricmc.fabric.api.registry.FlammableBlockRegistry; import net.fabricmc.fabric.api.registry.FlammableBlockRegistry;
import net.minecraft.block.*; import net.minecraft.block.*;
import net.minecraft.block.piston.PistonBehavior;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.server.world.ServerWorld; import net.minecraft.server.world.ServerWorld;
import net.minecraft.sound.BlockSoundGroup;
import net.minecraft.util.math.*; import net.minecraft.util.math.*;
import net.minecraft.util.math.random.Random; import net.minecraft.util.math.random.Random;
import net.minecraft.util.shape.VoxelShape; import net.minecraft.util.shape.VoxelShape;
@ -30,7 +32,7 @@ public class FruitBlock extends Block implements Buckable {
} }
public FruitBlock(Settings settings, Direction attachmentFace, Block stem, VoxelShape shape) { public FruitBlock(Settings settings, Direction attachmentFace, Block stem, VoxelShape shape) {
this(settings, attachmentFace, stem, shape, true); this(settings.sounds(BlockSoundGroup.WOOD).pistonBehavior(PistonBehavior.DESTROY), attachmentFace, stem, shape, true);
} }
public FruitBlock(Settings settings, Direction attachmentFace, Block stem, VoxelShape shape, boolean flammable) { public FruitBlock(Settings settings, Direction attachmentFace, Block stem, VoxelShape shape, boolean flammable) {

View file

@ -5,6 +5,7 @@ import java.util.function.Supplier;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import net.minecraft.block.*; import net.minecraft.block.*;
import net.minecraft.block.piston.PistonBehavior;
import net.minecraft.item.ItemConvertible; import net.minecraft.item.ItemConvertible;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.server.world.ServerWorld; import net.minecraft.server.world.ServerWorld;
@ -34,7 +35,12 @@ public class SproutBlock extends CropBlock implements TintedBlock {
private final int overlay; private final int overlay;
public SproutBlock(int overlay, ItemConvertible seeds, Supplier<BlockState> matureState) { public SproutBlock(int overlay, ItemConvertible seeds, Supplier<BlockState> matureState) {
super(Settings.of(Material.PLANT).noCollision().ticksRandomly().breakInstantly().sounds(BlockSoundGroup.STEM)); super(Settings.create()
.noCollision()
.ticksRandomly()
.breakInstantly()
.sounds(BlockSoundGroup.STEM)
.pistonBehavior(PistonBehavior.DESTROY));
this.seeds = seeds; this.seeds = seeds;
this.matureState = matureState; this.matureState = matureState;
this.overlay = overlay; this.overlay = overlay;

View file

@ -9,25 +9,27 @@ import com.minelittlepony.unicopia.item.group.ItemGroupRegistry;
import com.minelittlepony.unicopia.server.world.UTreeGen; import com.minelittlepony.unicopia.server.world.UTreeGen;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricMaterialBuilder;
import net.fabricmc.fabric.api.registry.FlammableBlockRegistry; import net.fabricmc.fabric.api.registry.FlammableBlockRegistry;
import net.fabricmc.fabric.api.registry.StrippableBlockRegistry; import net.fabricmc.fabric.api.registry.StrippableBlockRegistry;
import net.minecraft.block.*; import net.minecraft.block.*;
import net.minecraft.block.AbstractBlock.Settings; import net.minecraft.block.AbstractBlock.Settings;
import net.minecraft.block.piston.PistonBehavior;
import net.minecraft.item.*; import net.minecraft.item.*;
import net.minecraft.sound.BlockSoundGroup; import net.minecraft.sound.BlockSoundGroup;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import net.minecraft.util.math.Direction; import net.minecraft.util.math.Direction;
import net.minecraft.util.shape.VoxelShapes; import net.minecraft.util.shape.VoxelShapes;
import net.minecraft.registry.Registry; import net.minecraft.registry.Registry;
import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.Registries; import net.minecraft.registry.Registries;
public interface UBlocks { public interface UBlocks {
List<Block> TRANSLUCENT_BLOCKS = new ArrayList<>(); List<Block> TRANSLUCENT_BLOCKS = new ArrayList<>();
Block ROCKS = register("rocks", new RockCropBlock(FabricBlockSettings.of( Block ROCKS = register("rocks", new RockCropBlock(Settings.create()
new FabricMaterialBuilder(MapColor.STONE_GRAY).allowsMovement().lightPassesThrough().notSolid().destroyedByPiston().build() .mapColor(MapColor.STONE_GRAY)
) .nonOpaque()
.pistonBehavior(PistonBehavior.DESTROY)
.requiresTool() .requiresTool()
.ticksRandomly() .ticksRandomly()
.strength(2) .strength(2)
@ -44,22 +46,22 @@ public interface UBlocks {
Block ZAP_LEAVES = register("zap_leaves", new ZapAppleLeavesBlock(), ItemGroups.NATURAL); Block ZAP_LEAVES = register("zap_leaves", new ZapAppleLeavesBlock(), ItemGroups.NATURAL);
Block FLOWERING_ZAP_LEAVES = register("flowering_zap_leaves", new BaseZapAppleLeavesBlock(), ItemGroups.NATURAL); Block FLOWERING_ZAP_LEAVES = register("flowering_zap_leaves", new BaseZapAppleLeavesBlock(), ItemGroups.NATURAL);
Block ZAP_LEAVES_PLACEHOLDER = register("zap_leaves_placeholder", new ZapAppleLeavesPlaceholderBlock()); Block ZAP_LEAVES_PLACEHOLDER = register("zap_leaves_placeholder", new ZapAppleLeavesPlaceholderBlock());
Block ZAP_BULB = register("zap_bulb", new FruitBlock(FabricBlockSettings.of(Material.GOURD, MapColor.GRAY).strength(500, 1200).sounds(BlockSoundGroup.AZALEA_LEAVES), Direction.DOWN, ZAP_LEAVES, FruitBlock.DEFAULT_SHAPE, false)); Block ZAP_BULB = register("zap_bulb", new FruitBlock(Settings.create().mapColor(MapColor.GRAY).strength(500, 1200).sounds(BlockSoundGroup.AZALEA_LEAVES), Direction.DOWN, ZAP_LEAVES, FruitBlock.DEFAULT_SHAPE, false));
Block ZAP_APPLE = register("zap_apple", new FruitBlock(FabricBlockSettings.of(Material.GOURD, MapColor.GRAY).sounds(BlockSoundGroup.AZALEA_LEAVES), Direction.DOWN, ZAP_LEAVES, FruitBlock.DEFAULT_SHAPE, false)); Block ZAP_APPLE = register("zap_apple", new FruitBlock(Settings.create().mapColor(MapColor.GRAY).sounds(BlockSoundGroup.AZALEA_LEAVES), Direction.DOWN, ZAP_LEAVES, FruitBlock.DEFAULT_SHAPE, false));
Block PALM_LOG = register("palm_log", BlockConstructionUtils.createLogBlock(MapColor.OFF_WHITE, MapColor.SPRUCE_BROWN), ItemGroups.BUILDING_BLOCKS); Block PALM_LOG = register("palm_log", BlockConstructionUtils.createLogBlock(MapColor.OFF_WHITE, MapColor.SPRUCE_BROWN), ItemGroups.BUILDING_BLOCKS);
Block PALM_WOOD = register("palm_wood", BlockConstructionUtils.createWoodBlock(MapColor.OFF_WHITE), ItemGroups.BUILDING_BLOCKS); Block PALM_WOOD = register("palm_wood", BlockConstructionUtils.createWoodBlock(MapColor.OFF_WHITE), ItemGroups.BUILDING_BLOCKS);
Block STRIPPED_PALM_LOG = register("stripped_palm_log", BlockConstructionUtils.createLogBlock(MapColor.OFF_WHITE, MapColor.OFF_WHITE), ItemGroups.BUILDING_BLOCKS); Block STRIPPED_PALM_LOG = register("stripped_palm_log", BlockConstructionUtils.createLogBlock(MapColor.OFF_WHITE, MapColor.OFF_WHITE), ItemGroups.BUILDING_BLOCKS);
Block STRIPPED_PALM_WOOD = register("stripped_palm_wood", BlockConstructionUtils.createWoodBlock(MapColor.OFF_WHITE), ItemGroups.BUILDING_BLOCKS); Block STRIPPED_PALM_WOOD = register("stripped_palm_wood", BlockConstructionUtils.createWoodBlock(MapColor.OFF_WHITE), ItemGroups.BUILDING_BLOCKS);
Block PALM_PLANKS = register("palm_planks", new Block(Settings.of(Material.WOOD, MapColor.OFF_WHITE).strength(2, 3).sounds(BlockSoundGroup.WOOD)), ItemGroups.BUILDING_BLOCKS); Block PALM_PLANKS = register("palm_planks", new Block(Settings.create().mapColor(MapColor.OFF_WHITE).strength(2, 3).sounds(BlockSoundGroup.WOOD).pistonBehavior(PistonBehavior.NORMAL)), ItemGroups.BUILDING_BLOCKS);
Block PALM_STAIRS = register("palm_stairs", new StairsBlock(PALM_PLANKS.getDefaultState(), Settings.copy(PALM_PLANKS)), ItemGroups.BUILDING_BLOCKS); Block PALM_STAIRS = register("palm_stairs", new StairsBlock(PALM_PLANKS.getDefaultState(), Settings.copy(PALM_PLANKS).pistonBehavior(PistonBehavior.NORMAL)), ItemGroups.BUILDING_BLOCKS);
Block PALM_SLAB = register("palm_slab", new SlabBlock(Settings.of(Material.WOOD, PALM_PLANKS.getDefaultMapColor()).strength(2, 3).sounds(BlockSoundGroup.WOOD)), ItemGroups.BUILDING_BLOCKS); Block PALM_SLAB = register("palm_slab", new SlabBlock(Settings.create().mapColor(PALM_PLANKS.getDefaultMapColor()).strength(2, 3).sounds(BlockSoundGroup.WOOD).pistonBehavior(PistonBehavior.NORMAL)), ItemGroups.BUILDING_BLOCKS);
Block PALM_FENCE = register("palm_fence", new FenceBlock(Settings.of(Material.WOOD, PALM_PLANKS.getDefaultMapColor()).strength(2, 3).sounds(BlockSoundGroup.WOOD)), ItemGroups.BUILDING_BLOCKS); Block PALM_FENCE = register("palm_fence", new FenceBlock(Settings.create().mapColor(PALM_PLANKS.getDefaultMapColor()).strength(2, 3).sounds(BlockSoundGroup.WOOD).pistonBehavior(PistonBehavior.NORMAL)), ItemGroups.BUILDING_BLOCKS);
Block PALM_FENCE_GATE = register("palm_fence_gate", new FenceGateBlock(Settings.of(Material.WOOD, PALM_PLANKS.getDefaultMapColor()).strength(2, 3).sounds(BlockSoundGroup.WOOD), WoodType.OAK), ItemGroups.BUILDING_BLOCKS); Block PALM_FENCE_GATE = register("palm_fence_gate", new FenceGateBlock(Settings.create().mapColor(PALM_PLANKS.getDefaultMapColor()).strength(2, 3).sounds(BlockSoundGroup.WOOD).pistonBehavior(PistonBehavior.NORMAL), WoodType.OAK), ItemGroups.BUILDING_BLOCKS);
// Block PALM_DOOR = register("palm_door", new DoorBlock(Settings.of(Material.WOOD, PALM_PLANKS.getDefaultMapColor()).strength(3.0f).sounds(BlockSoundGroup.WOOD).nonOpaque(), SoundEvents.BLOCK_WOODEN_DOOR_CLOSE, SoundEvents.BLOCK_WOODEN_DOOR_OPEN), ItemGroups.BUILDING_BLOCKS); // Block PALM_DOOR = register("palm_door", new DoorBlock(Settings.of(Material.WOOD, PALM_PLANKS.getDefaultMapColor()).strength(3.0f).sounds(BlockSoundGroup.WOOD).nonOpaque(), SoundEvents.BLOCK_WOODEN_DOOR_CLOSE, SoundEvents.BLOCK_WOODEN_DOOR_OPEN), ItemGroups.BUILDING_BLOCKS);
// Block PALM_TRAPDOOR = register("palm_trapdoor", new TrapdoorBlock(Settings.of(Material.WOOD, PALM_PLANKS.getDefaultMapColor()).strength(3.0f).sounds(BlockSoundGroup.WOOD).nonOpaque().allowsSpawning(UBlocks::never), SoundEvents.BLOCK_WOODEN_TRAPDOOR_CLOSE, SoundEvents.BLOCK_WOODEN_TRAPDOOR_OPEN), ItemGroups.BUILDING_BLOCKS); // Block PALM_TRAPDOOR = register("palm_trapdoor", new TrapdoorBlock(Settings.of(Material.WOOD, PALM_PLANKS.getDefaultMapColor()).strength(3.0f).sounds(BlockSoundGroup.WOOD).nonOpaque().allowsSpawning(UBlocks::never), SoundEvents.BLOCK_WOODEN_TRAPDOOR_CLOSE, SoundEvents.BLOCK_WOODEN_TRAPDOOR_OPEN), ItemGroups.BUILDING_BLOCKS);
Block PALM_PRESSURE_PLATE = register("palm_pressure_plate", new PressurePlateBlock(PressurePlateBlock.ActivationRule.EVERYTHING, Settings.of(Material.WOOD, PALM_PLANKS.getDefaultMapColor()).noCollision().strength(0.5f).sounds(BlockSoundGroup.WOOD), BlockSetType.OAK), ItemGroups.BUILDING_BLOCKS); Block PALM_PRESSURE_PLATE = register("palm_pressure_plate", new PressurePlateBlock(PressurePlateBlock.ActivationRule.EVERYTHING, Settings.create().mapColor(PALM_PLANKS.getDefaultMapColor()).noCollision().strength(0.5f).sounds(BlockSoundGroup.WOOD).pistonBehavior(PistonBehavior.DESTROY), BlockSetType.OAK), ItemGroups.BUILDING_BLOCKS);
Block PALM_BUTTON = register("palm_button", BlockConstructionUtils.woodenButton(), ItemGroups.BUILDING_BLOCKS); Block PALM_BUTTON = register("palm_button", BlockConstructionUtils.woodenButton(), ItemGroups.BUILDING_BLOCKS);
// Block PALM_SIGN = register("palm_sign", new SignBlock(Settings.of(Material.WOOD).noCollision().strength(1.0f).sounds(BlockSoundGroup.WOOD), PALM_SIGN_TYPE), ItemGroups.BUILDING_BLOCKS); // Block PALM_SIGN = register("palm_sign", new SignBlock(Settings.of(Material.WOOD).noCollision().strength(1.0f).sounds(BlockSoundGroup.WOOD), PALM_SIGN_TYPE), ItemGroups.BUILDING_BLOCKS);
// //
@ -69,16 +71,16 @@ public interface UBlocks {
Block PALM_LEAVES = register("palm_leaves", BlockConstructionUtils.createLeavesBlock(BlockSoundGroup.GRASS), ItemGroups.BUILDING_BLOCKS); Block PALM_LEAVES = register("palm_leaves", BlockConstructionUtils.createLeavesBlock(BlockSoundGroup.GRASS), ItemGroups.BUILDING_BLOCKS);
Block BANANAS = register("bananas", new FruitBlock(FabricBlockSettings.of(Material.GOURD, MapColor.YELLOW).sounds(BlockSoundGroup.WOOD).hardness(3), Direction.DOWN, PALM_LEAVES, VoxelShapes.fullCube())); Block BANANAS = register("bananas", new FruitBlock(Settings.create().mapColor(MapColor.YELLOW).sounds(BlockSoundGroup.WOOD).hardness(3).pistonBehavior(PistonBehavior.DESTROY), Direction.DOWN, PALM_LEAVES, VoxelShapes.fullCube()));
Block WEATHER_VANE = register("weather_vane", new WeatherVaneBlock(FabricBlockSettings.of(Material.METAL, MapColor.BLACK).requiresTool().strength(3.0f, 6.0f).sounds(BlockSoundGroup.METAL).nonOpaque()), ItemGroups.TOOLS); Block WEATHER_VANE = register("weather_vane", new WeatherVaneBlock(Settings.create().mapColor(MapColor.BLACK).requiresTool().strength(3.0f, 6.0f).sounds(BlockSoundGroup.METAL).nonOpaque().pistonBehavior(PistonBehavior.BLOCK)), ItemGroups.TOOLS);
Block GREEN_APPLE_LEAVES = register("green_apple_leaves", new FruitBearingBlock(FabricBlockSettings.copy(Blocks.OAK_LEAVES), Block GREEN_APPLE_LEAVES = register("green_apple_leaves", new FruitBearingBlock(FabricBlockSettings.copy(Blocks.OAK_LEAVES),
0xE5FFFF88, 0xE5FFFF88,
() -> UBlocks.GREEN_APPLE, () -> UBlocks.GREEN_APPLE,
() -> UItems.GREEN_APPLE.getDefaultStack() () -> UItems.GREEN_APPLE.getDefaultStack()
), ItemGroups.NATURAL); ), ItemGroups.NATURAL);
Block GREEN_APPLE = register("green_apple", new FruitBlock(FabricBlockSettings.of(Material.GOURD, MapColor.GREEN).sounds(BlockSoundGroup.WOOD), Direction.DOWN, GREEN_APPLE_LEAVES, FruitBlock.DEFAULT_SHAPE)); Block GREEN_APPLE = register("green_apple", new FruitBlock(Settings.create().mapColor(MapColor.GREEN), Direction.DOWN, GREEN_APPLE_LEAVES, FruitBlock.DEFAULT_SHAPE));
Block GREEN_APPLE_SPROUT = register("green_apple_sprout", new SproutBlock(0xE5FFFF88, () -> UItems.GREEN_APPLE_SEEDS, () -> UTreeGen.GREEN_APPLE_TREE.sapling().map(Block::getDefaultState).get())); Block GREEN_APPLE_SPROUT = register("green_apple_sprout", new SproutBlock(0xE5FFFF88, () -> UItems.GREEN_APPLE_SEEDS, () -> UTreeGen.GREEN_APPLE_TREE.sapling().map(Block::getDefaultState).get()));
Block SWEET_APPLE_LEAVES = register("sweet_apple_leaves", new FruitBearingBlock(FabricBlockSettings.copy(Blocks.OAK_LEAVES), Block SWEET_APPLE_LEAVES = register("sweet_apple_leaves", new FruitBearingBlock(FabricBlockSettings.copy(Blocks.OAK_LEAVES),
@ -86,7 +88,7 @@ public interface UBlocks {
() -> UBlocks.SWEET_APPLE, () -> UBlocks.SWEET_APPLE,
() -> UItems.SWEET_APPLE.getDefaultStack() () -> UItems.SWEET_APPLE.getDefaultStack()
), ItemGroups.NATURAL); ), ItemGroups.NATURAL);
Block SWEET_APPLE = register("sweet_apple", new FruitBlock(FabricBlockSettings.of(Material.GOURD, MapColor.GREEN).sounds(BlockSoundGroup.WOOD), Direction.DOWN, SWEET_APPLE_LEAVES, FruitBlock.DEFAULT_SHAPE)); Block SWEET_APPLE = register("sweet_apple", new FruitBlock(Settings.create().mapColor(MapColor.GREEN), Direction.DOWN, SWEET_APPLE_LEAVES, FruitBlock.DEFAULT_SHAPE));
Block SWEET_APPLE_SPROUT = register("sweet_apple_sprout", new SproutBlock(0xE5FFCC88, () -> UItems.SWEET_APPLE_SEEDS, () -> UTreeGen.SWEET_APPLE_TREE.sapling().map(Block::getDefaultState).get())); Block SWEET_APPLE_SPROUT = register("sweet_apple_sprout", new SproutBlock(0xE5FFCC88, () -> UItems.SWEET_APPLE_SEEDS, () -> UTreeGen.SWEET_APPLE_TREE.sapling().map(Block::getDefaultState).get()));
Block SOUR_APPLE_LEAVES = register("sour_apple_leaves", new FruitBearingBlock(FabricBlockSettings.copy(Blocks.OAK_LEAVES), Block SOUR_APPLE_LEAVES = register("sour_apple_leaves", new FruitBearingBlock(FabricBlockSettings.copy(Blocks.OAK_LEAVES),
@ -94,10 +96,10 @@ public interface UBlocks {
() -> UBlocks.SOUR_APPLE, () -> UBlocks.SOUR_APPLE,
() -> UItems.SOUR_APPLE.getDefaultStack() () -> UItems.SOUR_APPLE.getDefaultStack()
), ItemGroups.NATURAL); ), ItemGroups.NATURAL);
Block SOUR_APPLE = register("sour_apple", new FruitBlock(FabricBlockSettings.of(Material.GOURD, MapColor.GREEN).sounds(BlockSoundGroup.WOOD), Direction.DOWN, SOUR_APPLE_LEAVES, FruitBlock.DEFAULT_SHAPE)); Block SOUR_APPLE = register("sour_apple", new FruitBlock(Settings.create().mapColor(MapColor.GREEN), Direction.DOWN, SOUR_APPLE_LEAVES, FruitBlock.DEFAULT_SHAPE));
Block SOUR_APPLE_SPROUT = register("sour_apple_sprout", new SproutBlock(0xE5FFCC88, () -> UItems.SOUR_APPLE_SEEDS, () -> UTreeGen.SOUR_APPLE_TREE.sapling().map(Block::getDefaultState).get())); Block SOUR_APPLE_SPROUT = register("sour_apple_sprout", new SproutBlock(0xE5FFCC88, () -> UItems.SOUR_APPLE_SEEDS, () -> UTreeGen.SOUR_APPLE_TREE.sapling().map(Block::getDefaultState).get()));
Block APPLE_PIE = register("apple_pie", new PieBlock(FabricBlockSettings.of(Material.CAKE, MapColor.ORANGE).strength(0.5F).sounds(BlockSoundGroup.WET_GRASS), () -> UItems.APPLE_PIE_SLICE)); Block APPLE_PIE = register("apple_pie", new PieBlock(Settings.create().solid().mapColor(MapColor.ORANGE).strength(0.5F).sounds(BlockSoundGroup.WET_GRASS).pistonBehavior(PistonBehavior.DESTROY), () -> UItems.APPLE_PIE_SLICE));
SegmentedCropBlock OATS = register("oats", SegmentedCropBlock.create(11, 5, AbstractBlock.Settings.copy(Blocks.WHEAT), () -> UItems.OAT_SEEDS, null, () -> UBlocks.OATS_STEM)); SegmentedCropBlock OATS = register("oats", SegmentedCropBlock.create(11, 5, AbstractBlock.Settings.copy(Blocks.WHEAT), () -> UItems.OAT_SEEDS, null, () -> UBlocks.OATS_STEM));
SegmentedCropBlock OATS_STEM = register("oats_stem", OATS.createNext(5)); SegmentedCropBlock OATS_STEM = register("oats_stem", OATS.createNext(5));
@ -107,11 +109,11 @@ public interface UBlocks {
return register(Unicopia.id(name), item); return register(Unicopia.id(name), item);
} }
static <T extends Block> T register(String name, T block, ItemGroup group) { static <T extends Block> T register(String name, T block, RegistryKey<ItemGroup> group) {
return register(Unicopia.id(name), block, group); return register(Unicopia.id(name), block, group);
} }
static <T extends Block> T register(Identifier id, T block, ItemGroup group) { static <T extends Block> T register(Identifier id, T block, RegistryKey<ItemGroup> group) {
UItems.register(id, ItemGroupRegistry.register(new BlockItem(block, new Item.Settings()), group)); UItems.register(id, ItemGroupRegistry.register(new BlockItem(block, new Item.Settings()), group));
return register(id, block); return register(id, block);
} }

View file

@ -10,7 +10,7 @@ import net.minecraft.util.math.random.Random;
public class ZapAppleLeavesPlaceholderBlock extends AirBlock { public class ZapAppleLeavesPlaceholderBlock extends AirBlock {
ZapAppleLeavesPlaceholderBlock() { ZapAppleLeavesPlaceholderBlock() {
super(AbstractBlock.Settings.of(Material.AIR).noCollision().dropsNothing().air()); super(Settings.create().replaceable().noCollision().dropsNothing().air());
} }
@Override @Override

View file

@ -3,6 +3,7 @@ package com.minelittlepony.unicopia.block;
import com.minelittlepony.unicopia.entity.player.Pony; import com.minelittlepony.unicopia.entity.player.Pony;
import net.minecraft.block.*; import net.minecraft.block.*;
import net.minecraft.block.enums.Instrument;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemPlacementContext; import net.minecraft.item.ItemPlacementContext;
import net.minecraft.sound.BlockSoundGroup; import net.minecraft.sound.BlockSoundGroup;
@ -18,11 +19,13 @@ public class ZapAppleLogBlock extends PillarBlock {
private final Block artifialModelBlock; private final Block artifialModelBlock;
ZapAppleLogBlock(Block artifialModelBlock, MapColor topMapColor, MapColor sideMapColor) { ZapAppleLogBlock(Block artifialModelBlock, MapColor topMapColor, MapColor sideMapColor) {
super(AbstractBlock.Settings.of(Material.WOOD, super(AbstractBlock.Settings.create().mapColor(
state -> state.get(PillarBlock.AXIS) == Direction.Axis.Y ? topMapColor : sideMapColor state -> state.get(PillarBlock.AXIS) == Direction.Axis.Y ? topMapColor : sideMapColor
) )
.instrument(Instrument.BASS)
.strength(2.0f)
.sounds(BlockSoundGroup.WOOD) .sounds(BlockSoundGroup.WOOD)
.strength(500, 1200)); .burnable());
setDefaultState(getDefaultState().with(NATURAL, true)); setDefaultState(getDefaultState().with(NATURAL, true));
this.artifialModelBlock = artifialModelBlock; this.artifialModelBlock = artifialModelBlock;
} }

View file

@ -20,6 +20,7 @@ import net.minecraft.util.JsonHelper;
import net.minecraft.registry.Registries; import net.minecraft.registry.Registries;
import net.minecraft.registry.RegistryKeys; import net.minecraft.registry.RegistryKeys;
import net.minecraft.registry.entry.RegistryEntry; import net.minecraft.registry.entry.RegistryEntry;
import net.minecraft.registry.tag.FluidTags;
import net.minecraft.registry.tag.TagKey; import net.minecraft.registry.tag.TagKey;
import net.minecraft.world.World; import net.minecraft.world.World;
@ -123,11 +124,11 @@ public abstract class StatePredicate implements Predicate<BlockState> {
} }
static boolean isWater(BlockState s) { static boolean isWater(BlockState s) {
return s.getMaterial() == Material.WATER; return s.isLiquid() && s.getFluidState().isIn(FluidTags.WATER);
} }
static boolean isLava(BlockState s) { static boolean isLava(BlockState s) {
return s.getMaterial() == Material.LAVA; return s.isLiquid() && s.getFluidState().isIn(FluidTags.LAVA);
} }
public static Predicate<BlockState> ofState(String state) { public static Predicate<BlockState> ofState(String state) {

View file

@ -7,7 +7,7 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import org.spongepowered.include.com.google.common.base.Objects; import org.spongepowered.include.com.google.common.base.Objects;
import net.minecraft.client.gui.DrawableHelper; import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.render.GameRenderer; import net.minecraft.client.render.GameRenderer;
import net.minecraft.client.toast.Toast; import net.minecraft.client.toast.Toast;
import net.minecraft.client.toast.ToastManager; import net.minecraft.client.toast.ToastManager;
@ -26,7 +26,7 @@ public class DiscoveryToast implements Toast {
private boolean justUpdated; private boolean justUpdated;
@Override @Override
public Toast.Visibility draw(MatrixStack matrices, ToastManager manager, long startTime) { public Toast.Visibility draw(DrawContext context, ToastManager manager, long startTime) {
if (justUpdated) { if (justUpdated) {
this.startTime = startTime; this.startTime = startTime;
justUpdated = false; justUpdated = false;
@ -37,26 +37,21 @@ public class DiscoveryToast implements Toast {
} }
RenderSystem.setShader(GameRenderer::getPositionTexProgram); RenderSystem.setShader(GameRenderer::getPositionTexProgram);
RenderSystem.setShaderTexture(0, TEXTURE);
RenderSystem.setShaderColor(1.0F, 1, 1, 1); RenderSystem.setShaderColor(1.0F, 1, 1, 1);
ToastManager.drawTexture(matrices, 0, 0, 0, 32, getWidth(), getHeight());
manager.getClient().textRenderer.draw(matrices, TITLE, 30, 7, -11534256); context.drawTexture(TEXTURE, 0, 0, 0, 32, getWidth(), getHeight());
manager.getClient().textRenderer.draw(matrices, DESCRIPTION, 30, 18, -16777216); context.drawText(manager.getClient().textRenderer, TITLE, 30, 7, -11534256, false);
context.drawText(manager.getClient().textRenderer, DESCRIPTION, 30, 18, -16777216, false);
Identifier icon = discoveries.get((int)(startTime / Math.max(1L, MAX_AGE / discoveries.size()) % discoveries.size())); Identifier icon = discoveries.get((int)(startTime / Math.max(1L, MAX_AGE / discoveries.size()) % discoveries.size()));
MatrixStack matrixStack = RenderSystem.getModelViewStack(); MatrixStack matrices = context.getMatrices();
matrixStack.push(); matrices.push();
matrixStack.scale(0.6F, 0.6F, 1); matrices.scale(0.6F, 0.6F, 1);
RenderSystem.applyModelViewMatrix(); context.drawItem(UItems.SPELLBOOK.getDefaultStack(), 3, 3);
manager.getClient().getItemRenderer().renderInGui(matrixStack, UItems.SPELLBOOK.getDefaultStack(), 3, 3); matrices.pop();
matrixStack.pop();
RenderSystem.applyModelViewMatrix();
RenderSystem.setShaderTexture(0, icon); context.drawTexture(icon, 8, 8, 1, 0, 0, 16, 16, 16, 16);
DrawableHelper.drawTexture(matrices, 8, 8, 1, 0, 0, 16, 16, 16, 16);
// manager.getClient().getItemRenderer().renderInGui(recipe.getOutput(), 8, 8);
return startTime - this.startTime >= MAX_AGE ? Toast.Visibility.HIDE : Toast.Visibility.SHOW; return startTime - this.startTime >= MAX_AGE ? Toast.Visibility.HIDE : Toast.Visibility.SHOW;
} }

View file

@ -72,21 +72,22 @@ public class DismissSpellScreen extends GameGui {
} }
@Override @Override
public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) { public void render(DrawContext context, int mouseX, int mouseY, float delta) {
fillGradient(matrices, 0, 0, width, height / 2, 0xF0101010, 0x80101010); context.fillGradient(0, 0, width, height / 2, 0xF0101010, 0x80101010);
fillGradient(matrices, 0, height / 2, width, height, 0x80101010, 0xF0101010); context.fillGradient(0, height / 2, width, height, 0x80101010, 0xF0101010);
relativeMouseX = -width + mouseX * 2; relativeMouseX = -width + mouseX * 2;
relativeMouseY = -height + mouseY * 2; relativeMouseY = -height + mouseY * 2;
MatrixStack matrices = context.getMatrices();
matrices.push(); matrices.push();
matrices.translate(width - mouseX, height - mouseY, 0); matrices.translate(width - mouseX, height - mouseY, 0);
DrawableUtil.drawLine(matrices, 0, 0, relativeMouseX, relativeMouseY, 0xFFFFFF88); DrawableUtil.drawLine(matrices, 0, 0, relativeMouseX, relativeMouseY, 0xFFFFFF88);
DrawableUtil.drawArc(matrices, 40, 80, 0, DrawableUtil.TAU, 0x00000010, false); DrawableUtil.drawArc(matrices, 40, 80, 0, DrawableUtil.TAU, 0x00000010, false);
DrawableUtil.drawArc(matrices, 160, 1600, 0, DrawableUtil.TAU, 0x00000020, false); DrawableUtil.drawArc(matrices, 160, 1600, 0, DrawableUtil.TAU, 0x00000020, false);
super.render(matrices, mouseX, mouseY, delta); super.render(context, mouseX, mouseY, delta);
DrawableUtil.renderRaceIcon(matrices, pony.getObservedSpecies(), 0, 0, 16); DrawableUtil.renderRaceIcon(context, pony.getObservedSpecies(), 0, 0, 16);
matrices.pop(); matrices.pop();
DrawableUtil.drawLine(matrices, mouseX, mouseY - 4, mouseX, mouseY + 4, 0xFFAAFF99); DrawableUtil.drawLine(matrices, mouseX, mouseY - 4, mouseX, mouseY + 4, 0xFFAAFF99);
@ -95,7 +96,7 @@ public class DismissSpellScreen extends GameGui {
matrices.push(); matrices.push();
matrices.translate(0, 0, 300); matrices.translate(0, 0, 300);
Text cancel = Text.literal("Press ESC to cancel"); Text cancel = Text.literal("Press ESC to cancel");
getFont().drawWithShadow(matrices, cancel, (width - getFont().getWidth(cancel)) / 2, height - 30, 0xFFFFFFFF); context.drawText(getFont(), cancel, (width - getFont().getWidth(cancel)) / 2, height - 30, 0xFFFFFFFF, true);
matrices.pop(); matrices.pop();
} }
@ -159,14 +160,15 @@ public class DismissSpellScreen extends GameGui {
} }
@Override @Override
public void render(MatrixStack matrices, int mouseX, int mouseY, float tickDelta) { public void render(DrawContext context, int mouseX, int mouseY, float tickDelta) {
MatrixStack matrices = context.getMatrices();
copy.set(x, y, z, w); copy.set(x, y, z, w);
copy.mul(matrices.peek().getPositionMatrix()); copy.mul(matrices.peek().getPositionMatrix());
var type = actualSpell.getType().withTraits(actualSpell.getTraits()); var type = actualSpell.getType().withTraits(actualSpell.getTraits());
DrawableUtil.drawLine(matrices, 0, 0, (int)x, (int)y, 0xFFAAFF99); DrawableUtil.drawLine(matrices, 0, 0, (int)x, (int)y, 0xFFAAFF99);
DrawableUtil.renderItemIcon(actualSpell.isDead() ? UItems.BOTCHED_GEM.getDefaultStack() : type.getDefaultStack(), DrawableUtil.renderItemIcon(context, actualSpell.isDead() ? UItems.BOTCHED_GEM.getDefaultStack() : type.getDefaultStack(),
copy.x - 8 + copy.z / 20F, copy.x - 8 + copy.z / 20F,
copy.y - 8 + copy.z / 20F, copy.y - 8 + copy.z / 20F,
1 1
@ -199,7 +201,7 @@ public class DismissSpellScreen extends GameGui {
} }
tooltip.add(ScreenTexts.EMPTY); tooltip.add(ScreenTexts.EMPTY);
tooltip.add(Text.translatable("[Click to Discard]")); tooltip.add(Text.translatable("[Click to Discard]"));
renderTooltip(matrices, tooltip, 0, 0); context.drawTooltip(getFont(), tooltip, 0, 0);
if (!lastMouseOver) { if (!lastMouseOver) {
lastMouseOver = true; lastMouseOver = true;

View file

@ -6,7 +6,7 @@ import com.minelittlepony.unicopia.Race;
import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.systems.RenderSystem;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.DrawableHelper; import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.render.BufferBuilder; import net.minecraft.client.render.BufferBuilder;
import net.minecraft.client.render.BufferRenderer; import net.minecraft.client.render.BufferRenderer;
import net.minecraft.client.render.GameRenderer; import net.minecraft.client.render.GameRenderer;
@ -24,32 +24,29 @@ public interface DrawableUtil {
double NUM_RINGS = 300; double NUM_RINGS = 300;
double INCREMENT = TAU / NUM_RINGS; double INCREMENT = TAU / NUM_RINGS;
static void drawScaledText(MatrixStack matrices, Text text, int x, int y, float size, int color) { static void drawScaledText(DrawContext context, Text text, int x, int y, float size, int color) {
MatrixStack matrices = context.getMatrices();
matrices.push(); matrices.push();
matrices.translate(x, y, 0); matrices.translate(x, y, 0);
matrices.scale(size, size, 1); matrices.scale(size, size, 1);
MinecraftClient.getInstance().textRenderer.draw(matrices, text, 0, 0, color); context.drawText(MinecraftClient.getInstance().textRenderer, text, 0, 0, color, false);
matrices.pop(); matrices.pop();
} }
static void renderItemIcon(ItemStack stack, double x, double y, float scale) { static void renderItemIcon(DrawContext context ,ItemStack stack, double x, double y, float scale) {
MatrixStack modelStack = RenderSystem.getModelViewStack(); MatrixStack modelStack = context.getMatrices();
modelStack.push(); modelStack.push();
modelStack.translate(x, y, 0); modelStack.translate(x, y, 0);
if (scale != 1) { if (scale != 1) {
modelStack.scale(scale, scale, 1); modelStack.scale(scale, scale, 1);
} }
RenderSystem.applyModelViewMatrix(); context.drawItem(stack, 0, 0);
MinecraftClient.getInstance().getItemRenderer().renderGuiItemIcon(modelStack, stack, 0, 0);
modelStack.pop(); modelStack.pop();
RenderSystem.applyModelViewMatrix();
} }
static void renderRaceIcon(MatrixStack matrices, Race race, int x, int y, int size) { static void renderRaceIcon(DrawContext context, Race race, int x, int y, int size) {
RenderSystem.setShaderTexture(0, race.getIcon()); context.drawTexture(race.getIcon(), x - size / 2, y - size / 2, 0, 0, 0, size, size, size, size);
DrawableHelper.drawTexture(matrices, x - size / 2, y - size / 2, 0, 0, 0, size, size, size, size);
} }
static void drawLine(MatrixStack matrices, int x1, int y1, int x2, int y2, int color) { static void drawLine(MatrixStack matrices, int x1, int y1, int x2, int y2, int color) {

View file

@ -6,16 +6,14 @@ import java.util.List;
import com.minelittlepony.unicopia.Unicopia; import com.minelittlepony.unicopia.Unicopia;
import com.minelittlepony.unicopia.ability.magic.spell.trait.*; import com.minelittlepony.unicopia.ability.magic.spell.trait.*;
import com.minelittlepony.unicopia.entity.player.Pony; import com.minelittlepony.unicopia.entity.player.Pony;
import com.mojang.blaze3d.systems.RenderSystem;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.font.TextRenderer; import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.font.TextRenderer.TextLayerType; import net.minecraft.client.font.TextRenderer.TextLayerType;
import net.minecraft.client.gui.DrawableHelper; import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.tooltip.TooltipComponent; import net.minecraft.client.gui.tooltip.TooltipComponent;
import net.minecraft.client.render.Tessellator; import net.minecraft.client.render.Tessellator;
import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.VertexConsumerProvider;
import net.minecraft.client.render.item.ItemRenderer;
import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.text.*; import net.minecraft.text.*;
@ -54,12 +52,12 @@ public class ItemTraitsTooltipRenderer implements Text, OrderedText, TooltipComp
} }
@Override @Override
public void drawItems(TextRenderer textRenderer, int x, int y, MatrixStack matrices, ItemRenderer itemRenderer) { public void drawItems(TextRenderer textRenderer, int x, int y, DrawContext context) {
int columns = getColumns(); int columns = getColumns();
int i = 0; int i = 0;
for (var entry : traits) { for (var entry : traits) {
renderTraitIcon(entry.getKey(), entry.getValue(), matrices, renderTraitIcon(entry.getKey(), entry.getValue(), context,
x + (i % columns) * 17, x + (i % columns) * 17,
y + (i / columns) * 17 y + (i / columns) * 17
); );
@ -82,11 +80,11 @@ public class ItemTraitsTooltipRenderer implements Text, OrderedText, TooltipComp
return Text.empty(); return Text.empty();
} }
public static void renderStackTraits(ItemStack stack, MatrixStack matrices, float x, float y, float weight, float delta, int seed) { public static void renderStackTraits(ItemStack stack, DrawContext context, float x, float y, float weight, float delta, int seed) {
renderStackTraits(SpellTraits.of(stack), matrices, x, y, weight, delta, seed, false); renderStackTraits(SpellTraits.of(stack), context, x, y, weight, delta, seed, false);
} }
public static void renderStackTraits(SpellTraits traits, MatrixStack matrices, float x, float y, float weight, float delta, int seed, boolean revealAll) { public static void renderStackTraits(SpellTraits traits, DrawContext context, float x, float y, float weight, float delta, int seed, boolean revealAll) {
float time = MathHelper.cos((MinecraftClient.getInstance().player.age + delta + seed) / 2F) * 0.7F; float time = MathHelper.cos((MinecraftClient.getInstance().player.age + delta + seed) / 2F) * 0.7F;
float angle = 0.7F + (time / 30F) % MathHelper.TAU; float angle = 0.7F + (time / 30F) % MathHelper.TAU;
@ -95,7 +93,7 @@ public class ItemTraitsTooltipRenderer implements Text, OrderedText, TooltipComp
for (var entry : traits) { for (var entry : traits) {
if (revealAll || isKnown(entry.getKey())) { if (revealAll || isKnown(entry.getKey())) {
ItemTraitsTooltipRenderer.renderTraitIcon(entry.getKey(), entry.getValue() * weight, matrices, ItemTraitsTooltipRenderer.renderTraitIcon(entry.getKey(), entry.getValue() * weight, context,
x + r * MathHelper.sin(angle), x + r * MathHelper.sin(angle),
y + r * MathHelper.cos(angle), y + r * MathHelper.cos(angle),
revealAll || isKnown(entry.getKey()) revealAll || isKnown(entry.getKey())
@ -110,21 +108,20 @@ public class ItemTraitsTooltipRenderer implements Text, OrderedText, TooltipComp
|| Pony.of(MinecraftClient.getInstance().player).getDiscoveries().isKnown(trait); || Pony.of(MinecraftClient.getInstance().player).getDiscoveries().isKnown(trait);
} }
public static void renderTraitIcon(Trait trait, float value, MatrixStack matrices, float xx, float yy) { public static void renderTraitIcon(Trait trait, float value, DrawContext context, float xx, float yy) {
renderTraitIcon(trait, value, matrices, xx, yy, isKnown(trait)); renderTraitIcon(trait, value, context, xx, yy, isKnown(trait));
} }
public static void renderTraitIcon(Trait trait, float value, MatrixStack matrices, float xx, float yy, boolean reveal) { public static void renderTraitIcon(Trait trait, float value, DrawContext context, float xx, float yy, boolean reveal) {
TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer; TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer;
int size = 12; int size = 12;
RenderSystem.setShaderTexture(0, reveal ? trait.getSprite() : UNKNOWN); MatrixStack matrices = context.getMatrices();
matrices.push(); matrices.push();
matrices.translate(xx, yy, 300F); matrices.translate(xx, yy, 300F);
DrawableHelper.drawTexture(matrices, 2, 1, 0, 0, 0, size, size, size, size); context.drawTexture(reveal ? trait.getSprite() : UNKNOWN, 2, 1, 0, 0, 0, size, size, size, size);
matrices.translate(9, 3 + size / 2, 0); matrices.translate(9, 3 + size / 2, 0);
matrices.scale(0.5F, 0.5F, 1); matrices.scale(0.5F, 0.5F, 1);

View file

@ -15,8 +15,8 @@ import com.minelittlepony.unicopia.Config;
import com.minelittlepony.unicopia.Race; import com.minelittlepony.unicopia.Race;
import com.minelittlepony.unicopia.Unicopia; import com.minelittlepony.unicopia.Unicopia;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.server.integrated.IntegratedServer; import net.minecraft.server.integrated.IntegratedServer;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import net.minecraft.util.Formatting; import net.minecraft.util.Formatting;
@ -135,10 +135,10 @@ public class LanSettingsScreen extends GameGui {
} }
@Override @Override
public void render(MatrixStack matrices, int mouseX, int mouseY, float tickDelta) { public void render(DrawContext context, int mouseX, int mouseY, float tickDelta) {
renderBackground(matrices); renderBackground(context);
super.render(matrices, mouseX, mouseY, tickDelta); super.render(context, mouseX, mouseY, tickDelta);
content.render(matrices, mouseX, mouseY, tickDelta); content.render(context, mouseX, mouseY, tickDelta);
} }
@Override @Override

View file

@ -7,6 +7,7 @@ import com.minelittlepony.unicopia.entity.player.MagicReserves;
import com.minelittlepony.unicopia.entity.player.Pony; import com.minelittlepony.unicopia.entity.player.Pony;
import com.minelittlepony.unicopia.entity.player.MagicReserves.Bar; import com.minelittlepony.unicopia.entity.player.MagicReserves.Bar;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.util.math.MatrixStack;
class ManaRingSlot extends Slot { class ManaRingSlot extends Slot {
@ -18,7 +19,8 @@ class ManaRingSlot extends Slot {
} }
@Override @Override
protected void renderContents(MatrixStack matrices, AbilityDispatcher abilities, boolean bSwap, float tickDelta) { protected void renderContents(DrawContext context, AbilityDispatcher abilities, boolean bSwap, float tickDelta) {
MatrixStack matrices = context.getMatrices();
matrices.push(); matrices.push();
matrices.translate(24.5, 25.5, 0); matrices.translate(24.5, 25.5, 0);
@ -58,7 +60,7 @@ class ManaRingSlot extends Slot {
matrices.pop(); matrices.pop();
super.renderContents(matrices, abilities, bSwap, tickDelta); super.renderContents(context, abilities, bSwap, tickDelta);
} }
private double renderRing(MatrixStack matrices, double outerRadius, double innerRadius, double offsetAngle, Bar bar, int color, float tickDelta) { private double renderRing(MatrixStack matrices, double outerRadius, double innerRadius, double offsetAngle, Bar bar, int color, float tickDelta) {

View file

@ -13,8 +13,8 @@ import com.minelittlepony.unicopia.util.RegistryIndexer;
import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.server.integrated.IntegratedServer; import net.minecraft.server.integrated.IntegratedServer;
import net.minecraft.server.world.ServerWorld; import net.minecraft.server.world.ServerWorld;
import net.minecraft.text.Text; import net.minecraft.text.Text;
@ -81,7 +81,7 @@ public class SettingsScreen extends GameGui {
row += 20; row += 20;
content.addButton(new Label(LEFT, row)).getStyle().setText("unicopia.options.world"); content.addButton(new Label(LEFT, row)).getStyle().setText("unicopia.options.world");
WorldTribeManager tribes = WorldTribeManager.forWorld((ServerWorld)server.getPlayerManager().getPlayer(MinecraftClient.getInstance().player.getUuid()).world); WorldTribeManager tribes = WorldTribeManager.forWorld((ServerWorld)server.getPlayerManager().getPlayer(MinecraftClient.getInstance().player.getUuid()).getWorld());
content.addButton(new Slider(LEFT, row += 20, 0, races.size(), races.indexOf(tribes.getDefaultRace()))) content.addButton(new Slider(LEFT, row += 20, 0, races.size(), races.indexOf(tribes.getDefaultRace())))
.onChange(races.createSetter(tribes::setDefaultRace)) .onChange(races.createSetter(tribes::setDefaultRace))
@ -105,10 +105,10 @@ public class SettingsScreen extends GameGui {
} }
@Override @Override
public void render(MatrixStack matrices, int mouseX, int mouseY, float tickDelta) { public void render(DrawContext context, int mouseX, int mouseY, float tickDelta) {
renderBackground(matrices); renderBackground(context);
super.render(matrices, mouseX, mouseY, tickDelta); super.render(context, mouseX, mouseY, tickDelta);
content.render(matrices, mouseX, mouseY, tickDelta); content.render(context, mouseX, mouseY, tickDelta);
} }
@Override @Override

View file

@ -5,6 +5,7 @@ import com.minelittlepony.unicopia.ability.AbilitySlot;
import com.minelittlepony.unicopia.client.KeyBindingsHandler; import com.minelittlepony.unicopia.client.KeyBindingsHandler;
import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.systems.RenderSystem;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.MathHelper;
@ -74,7 +75,7 @@ class Slot {
return y; return y;
} }
void renderBackground(MatrixStack matrices, AbilityDispatcher abilities, boolean bSwap, float tickDelta) { void renderBackground(DrawContext context, AbilityDispatcher abilities, boolean bSwap, float tickDelta) {
if (aSlot != bSlot) { if (aSlot != bSlot) {
bSwap |= !abilities.isFilled(aSlot); bSwap |= !abilities.isFilled(aSlot);
@ -83,17 +84,17 @@ class Slot {
RenderSystem.setShaderColor(1, 1, 1, 1); RenderSystem.setShaderColor(1, 1, 1, 1);
RenderSystem.enableBlend(); RenderSystem.enableBlend();
MatrixStack matrices = context.getMatrices();
matrices.push(); matrices.push();
matrices.translate(getX(), getY(), 0); matrices.translate(getX(), getY(), 0);
// background // background
UHud.drawTexture(matrices, 0, 0, backgroundU, backgroundV, size, size, 128, 128); context.drawTexture(UHud.HUD_TEXTURE, 0, 0, backgroundU, backgroundV, size, size, 128, 128);
AbilityDispatcher.Stat stat = abilities.getStat(bSwap ? bSlot : aSlot); AbilityDispatcher.Stat stat = abilities.getStat(bSwap ? bSlot : aSlot);
int sz = iconSize - slotPadding; int sz = iconSize - slotPadding;
uHud.renderAbilityIcon(matrices, stat, slotPadding, slotPadding, sz, sz, sz, sz); uHud.renderAbilityIcon(context, stat, slotPadding, slotPadding, sz, sz, sz, sz);
float cooldown = stat.getFillProgress(); float cooldown = stat.getFillProgress();
@ -107,21 +108,22 @@ class Slot {
int progressTop = progressBottom - (int)(progressMax * cooldown); int progressTop = progressBottom - (int)(progressMax * cooldown);
// progress // progress
UHud.fill(matrices, slotPadding, progressTop, size - slotPadding, progressBottom, 0xCFFFFFFF); context.fill(slotPadding, progressTop, size - slotPadding, progressBottom, 0xCFFFFFFF);
} }
renderContents(matrices, abilities, bSwap, tickDelta); renderContents(context, abilities, bSwap, tickDelta);
matrices.pop(); matrices.pop();
} }
protected void renderContents(MatrixStack matrices, AbilityDispatcher abilities, boolean bSwap, float tickDelta) { protected void renderContents(DrawContext context, AbilityDispatcher abilities, boolean bSwap, float tickDelta) {
// contents // contents
UHud.drawTexture(matrices, 0, 0, foregroundU, foregroundV, size, size, 128, 128); context.drawTexture(UHud.HUD_TEXTURE, 0, 0, foregroundU, foregroundV, size, size, 128, 128);
} }
void renderLabel(MatrixStack matrices, AbilityDispatcher abilities, float tickDelta) { void renderLabel(DrawContext context, AbilityDispatcher abilities, float tickDelta) {
Text label = KeyBindingsHandler.INSTANCE.getBinding(aSlot).getLabel(); Text label = KeyBindingsHandler.INSTANCE.getBinding(aSlot).getLabel();
MatrixStack matrices = context.getMatrices();
matrices.push(); matrices.push();
int x = getX(); int x = getX();
@ -135,7 +137,7 @@ class Slot {
matrices.translate(x, getY() + labelY, 0); matrices.translate(x, getY() + labelY, 0);
matrices.scale(0.5F, 0.5F, 0.5F); matrices.scale(0.5F, 0.5F, 0.5F);
UHud.drawTextWithShadow(matrices, uHud.font, label, 0, 0, 0xFFFFFF); context.drawText(uHud.font, label, 0, 0, 0xFFFFFF, true);
matrices.pop(); matrices.pop();
} }

View file

@ -4,7 +4,7 @@ import com.minelittlepony.common.client.gui.dimension.Bounds;
import com.minelittlepony.common.client.gui.element.Label; import com.minelittlepony.common.client.gui.element.Label;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.gui.DrawContext;
import net.minecraft.text.OrderedText; import net.minecraft.text.OrderedText;
public class TextBlock extends Label { public class TextBlock extends Label {
@ -24,11 +24,11 @@ public class TextBlock extends Label {
} }
@Override @Override
public void render(MatrixStack matrices, int mouseX, int mouseY, float partialTicks) { public void render(DrawContext context, int mouseX, int mouseY, float partialTicks) {
int textY = (int)(getY() + MinecraftClient.getInstance().textRenderer.fontHeight/1.5F); int textY = (int)(getY() + MinecraftClient.getInstance().textRenderer.fontHeight/1.5F);
for (OrderedText line : getFont().wrapLines(getStyle().getText(), maxWidth)) { for (OrderedText line : getFont().wrapLines(getStyle().getText(), maxWidth)) {
getFont().drawWithShadow(matrices, line, getX(), textY, getStyle().getColor()); context.drawText(getFont(), line, getX(), textY, getStyle().getColor(), true);
textY += getFont().fontHeight; textY += getFont().fontHeight;
} }
} }

View file

@ -8,8 +8,8 @@ import com.mojang.blaze3d.platform.GlStateManager;
import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.systems.RenderSystem;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.render.GameRenderer; import net.minecraft.client.render.GameRenderer;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.MathHelper;
@ -28,9 +28,8 @@ public class TribeButton extends Button {
} }
@Override @Override
public void renderButton(MatrixStack matrices, int mouseX, int mouseY, float partialTicks) { public void renderButton(DrawContext context, int mouseX, int mouseY, float partialTicks) {
RenderSystem.setShader(GameRenderer::getPositionTexProgram); RenderSystem.setShader(GameRenderer::getPositionTexProgram);
RenderSystem.setShaderTexture(0, TribeSelectionScreen.TEXTURE);
RenderSystem.setShaderColor(1, 1, 1, alpha); RenderSystem.setShaderColor(1, 1, 1, alpha);
RenderSystem.enableBlend(); RenderSystem.enableBlend();
RenderSystem.defaultBlendFunc(); RenderSystem.defaultBlendFunc();
@ -41,18 +40,18 @@ public class TribeButton extends Button {
MinecraftClient mc = MinecraftClient.getInstance(); MinecraftClient mc = MinecraftClient.getInstance();
drawTexture(matrices, getX() - 3, getY() - 13, 0, 0, 76, 69); context.drawTexture(TribeSelectionScreen.TEXTURE, getX() - 3, getY() - 13, 0, 0, 76, 69);
if (isHovered()) { if (isHovered()) {
drawTexture(matrices, getX() - 4, getY() - 14, 76, 0, 78, 71); context.drawTexture(TribeSelectionScreen.TEXTURE, getX() - 4, getY() - 14, 76, 0, 78, 71);
if (hovered && screenWidth > 0) { if (hovered && screenWidth > 0) {
Identifier id = Race.REGISTRY.getId(race); Identifier id = Race.REGISTRY.getId(race);
drawCenteredTextWithShadow(matrices, getFont(), Text.translatable("gui.unicopia.tribe_selection.describe." + id.getNamespace() + "." + id.getPath()), screenWidth / 2, getY() + height, 0xFFFFFFFF); context.drawCenteredTextWithShadow(getFont(), Text.translatable("gui.unicopia.tribe_selection.describe." + id.getNamespace() + "." + id.getPath()), screenWidth / 2, getY() + height, 0xFFFFFFFF);
} }
} }
if (getStyle().hasIcon()) { if (getStyle().hasIcon()) {
getStyle().getIcon().render(matrices, getX(), getY(), mouseX, mouseY, partialTicks); getStyle().getIcon().render(context, getX(), getY(), mouseX, mouseY, partialTicks);
} }
int foreColor = getStyle().getColor(); int foreColor = getStyle().getColor();
@ -65,7 +64,7 @@ public class TribeButton extends Button {
setMessage(getStyle().getText()); setMessage(getStyle().getText());
renderForground(matrices, mc, mouseX, mouseY, foreColor | MathHelper.ceil(alpha * 255.0F) << 24); renderForground(context, mc, mouseX, mouseY, foreColor | MathHelper.ceil(alpha * 255.0F) << 24);
} }
public static ISprite createSprite(Race race, int x, int y, int size) { public static ISprite createSprite(Race race, int x, int y, int size) {

View file

@ -6,10 +6,9 @@ import com.minelittlepony.common.client.gui.GameGui;
import com.minelittlepony.common.client.gui.element.Button; import com.minelittlepony.common.client.gui.element.Button;
import com.minelittlepony.common.client.gui.element.Label; import com.minelittlepony.common.client.gui.element.Label;
import com.minelittlepony.unicopia.Race; import com.minelittlepony.unicopia.Race;
import com.mojang.blaze3d.systems.RenderSystem;
import it.unimi.dsi.fastutil.booleans.BooleanConsumer; import it.unimi.dsi.fastutil.booleans.BooleanConsumer;
import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.gui.DrawContext;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import net.minecraft.util.*; import net.minecraft.util.*;
@ -82,10 +81,8 @@ public class TribeConfirmationScreen extends GameGui implements HidesHud {
} }
@Override @Override
public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) { public void render(DrawContext context, int mouseX, int mouseY, float delta) {
renderBackground(matrices); renderBackground(context);
RenderSystem.setShaderTexture(0, TribeSelectionScreen.TEXTURE);
final int columnHeight = 180; final int columnHeight = 180;
final int columnWidth = 310; final int columnWidth = 310;
@ -98,23 +95,23 @@ public class TribeConfirmationScreen extends GameGui implements HidesHud {
final int zOffset = 0; final int zOffset = 0;
drawTexture(matrices, left + zOffset, top, 0, 70, 123, columnHeight); context.drawTexture(TribeSelectionScreen.TEXTURE, left + zOffset, top, 0, 70, 123, columnHeight);
drawTexture(matrices, left + segmentWidth + zOffset, top, 20, 70, 123, columnHeight); context.drawTexture(TribeSelectionScreen.TEXTURE, left + segmentWidth + zOffset, top, 20, 70, 123, columnHeight);
drawTexture(matrices, width - left - segmentWidth + zOffset, top, 10, 70, 123, columnHeight); context.drawTexture(TribeSelectionScreen.TEXTURE, width - left - segmentWidth + zOffset, top, 10, 70, 123, columnHeight);
top -= 31; top -= 31;
left = width / 2; left = width / 2;
drawTexture(matrices, left - 55, top, 140, 70, 21, 50); context.drawTexture(TribeSelectionScreen.TEXTURE, left - 55, top, 140, 70, 21, 50);
drawTexture(matrices, left - 35, top, 10, 70, 69, 50); context.drawTexture(TribeSelectionScreen.TEXTURE, left - 35, top, 10, 70, 69, 50);
drawTexture(matrices, left + 35, top, 148, 70, 21, 50); context.drawTexture(TribeSelectionScreen.TEXTURE, left + 35, top, 148, 70, 21, 50);
super.render(matrices, mouseX, mouseY, delta); super.render(context, mouseX, mouseY, delta);
} }
@Override @Override

View file

@ -10,7 +10,7 @@ import com.minelittlepony.unicopia.Unicopia;
import com.minelittlepony.unicopia.network.Channel; import com.minelittlepony.unicopia.network.Channel;
import com.minelittlepony.unicopia.network.MsgRequestSpeciesChange; import com.minelittlepony.unicopia.network.MsgRequestSpeciesChange;
import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.gui.DrawContext;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import net.minecraft.util.Formatting; import net.minecraft.util.Formatting;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
@ -93,9 +93,9 @@ public class TribeSelectionScreen extends GameGui implements HidesHud {
} }
@Override @Override
public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) { public void render(DrawContext context, int mouseX, int mouseY, float delta) {
renderBackground(matrices); renderBackground(context);
super.render(matrices, mouseX, mouseY, delta); super.render(context, mouseX, mouseY, delta);
} }
@Override @Override

View file

@ -22,7 +22,7 @@ import com.mojang.blaze3d.systems.RenderSystem;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.font.TextRenderer; import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawableHelper; import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.hud.InGameHud; import net.minecraft.client.gui.hud.InGameHud;
import net.minecraft.client.gui.screen.ingame.InventoryScreen; import net.minecraft.client.gui.screen.ingame.InventoryScreen;
import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.util.math.MatrixStack;
@ -35,7 +35,7 @@ import net.minecraft.util.*;
import net.minecraft.util.math.*; import net.minecraft.util.math.*;
import net.minecraft.util.math.random.Random; import net.minecraft.util.math.random.Random;
public class UHud extends DrawableHelper { public class UHud {
public static final UHud INSTANCE = new UHud(); public static final UHud INSTANCE = new UHud();
@ -70,7 +70,7 @@ public class UHud extends DrawableHelper {
private boolean prevReplacing; private boolean prevReplacing;
private SpellType<?> focusedType = SpellType.empty(); private SpellType<?> focusedType = SpellType.empty();
public void render(InGameHud hud, MatrixStack matrices, float tickDelta) { public void render(InGameHud hud, DrawContext context, float tickDelta) {
if (client.player == null) { if (client.player == null) {
return; return;
@ -81,7 +81,7 @@ public class UHud extends DrawableHelper {
Pony pony = Pony.of(client.player); Pony pony = Pony.of(client.player);
renderViewEffects(pony, matrices, scaledWidth, scaledHeight, tickDelta); renderViewEffects(pony, context, scaledWidth, scaledHeight, tickDelta);
if (client.currentScreen instanceof HidesHud || client.player.isSpectator() || client.options.hudHidden) { if (client.currentScreen instanceof HidesHud || client.player.isSpectator() || client.options.hudHidden) {
return; return;
@ -90,6 +90,7 @@ public class UHud extends DrawableHelper {
font = client.textRenderer; font = client.textRenderer;
xDirection = client.player.getMainArm() == Arm.LEFT ? -1 : 1; xDirection = client.player.getMainArm() == Arm.LEFT ? -1 : 1;
MatrixStack matrices = context.getMatrices();
matrices.push(); matrices.push();
int hudX = ((scaledWidth - 50) / 2) + (104 * xDirection); int hudX = ((scaledWidth - 50) / 2) + (104 * xDirection);
@ -111,7 +112,7 @@ public class UHud extends DrawableHelper {
AbilityDispatcher abilities = pony.getAbilities(); AbilityDispatcher abilities = pony.getAbilities();
if (message != null && messageTime > 0) { if (message != null && messageTime > 0) {
renderMessage(matrices, tickDelta); renderMessage(context, tickDelta);
} }
RenderSystem.setShaderColor(1, 1, 1,1); RenderSystem.setShaderColor(1, 1, 1,1);
@ -120,7 +121,7 @@ public class UHud extends DrawableHelper {
boolean swap = client.options.sneakKey.isPressed(); boolean swap = client.options.sneakKey.isPressed();
slots.forEach(slot -> slot.renderBackground(matrices, abilities, swap, tickDelta)); slots.forEach(slot -> slot.renderBackground(context, abilities, swap, tickDelta));
if (pony.getObservedSpecies().canCast()) { if (pony.getObservedSpecies().canCast()) {
AbilitySlot slot = swap ? AbilitySlot.PASSIVE : AbilitySlot.PRIMARY; AbilitySlot slot = swap ? AbilitySlot.PASSIVE : AbilitySlot.PRIMARY;
@ -145,18 +146,18 @@ public class UHud extends DrawableHelper {
matrices.multiply(RotationAxis.POSITIVE_Z.rotationDegrees(-26)); matrices.multiply(RotationAxis.POSITIVE_Z.rotationDegrees(-26));
matrices.scale(0.8F, 0.8F, 1); matrices.scale(0.8F, 0.8F, 1);
int u = replacing ? 16 : 3; int u = replacing ? 16 : 3;
UHud.drawTexture(matrices, 0, 0, u, 120, 13, 7, 128, 128); context.drawTexture(HUD_TEXTURE, 0, 0, u, 120, 13, 7, 128, 128);
matrices.pop(); matrices.pop();
} }
} }
slots.forEach(slot -> slot.renderLabel(matrices, abilities, tickDelta)); slots.forEach(slot -> slot.renderLabel(context, abilities, tickDelta));
matrices.pop(); matrices.pop();
if (pony.getObservedSpecies().canCast()) { if (pony.getObservedSpecies().canCast()) {
renderSpell(pony.getCharms().getEquippedSpell(Hand.MAIN_HAND), hudX + 10 - xDirection * 13, hudY + 2); renderSpell(context, pony.getCharms().getEquippedSpell(Hand.MAIN_HAND), hudX + 10 - xDirection * 13, hudY + 2);
renderSpell(pony.getCharms().getEquippedSpell(Hand.OFF_HAND), hudX + 8 - xDirection * 2, hudY - 6); renderSpell(context, pony.getCharms().getEquippedSpell(Hand.OFF_HAND), hudX + 8 - xDirection * 2, hudY - 6);
} }
RenderSystem.disableBlend(); RenderSystem.disableBlend();
@ -176,19 +177,16 @@ public class UHud extends DrawableHelper {
int x = scaledWidth / 2 + xDirection * 67; int x = scaledWidth / 2 + xDirection * 67;
int y = (int)(scaledHeight - 18 - dims.height/2F); int y = (int)(scaledHeight - 18 - dims.height/2F);
MatrixStack view = RenderSystem.getModelViewStack(); matrices.push();
matrices.translate(x, y, 0);
view.push(); matrices.multiply(RotationAxis.POSITIVE_X.rotationDegrees(xDirection * 45));
view.translate(x, y, 0); InventoryScreen.drawEntity(context, 0, 0, scale, 0, -20, client.player);
view.multiply(RotationAxis.POSITIVE_X.rotationDegrees(xDirection * 45)); matrices.pop();
InventoryScreen.drawEntity(view, 0, 0, scale, 0, -20, client.player);
view.pop();
RenderSystem.applyModelViewMatrix();
}); });
} }
} }
public void renderSpell(CustomisedSpellType<?> spell, double x, double y) { public void renderSpell(DrawContext context, CustomisedSpellType<?> spell, double x, double y) {
if (spell.isEmpty()) { if (spell.isEmpty()) {
return; return;
} }
@ -196,7 +194,7 @@ public class UHud extends DrawableHelper {
Pony pony = Pony.of(client.player); Pony pony = Pony.of(client.player);
if (spell.isOn(pony)) { if (spell.isOn(pony)) {
MatrixStack modelStack = new MatrixStack(); MatrixStack modelStack = context.getMatrices();
modelStack.push(); modelStack.push();
modelStack.translate(x + 5.5, y + 5.5, 0); modelStack.translate(x + 5.5, y + 5.5, 0);
@ -215,17 +213,17 @@ public class UHud extends DrawableHelper {
modelStack.push(); modelStack.push();
modelStack.translate(1, 1, 900); modelStack.translate(1, 1, 900);
modelStack.scale(0.8F, 0.8F, 0.8F); modelStack.scale(0.8F, 0.8F, 0.8F);
font.drawWithShadow(modelStack, count > 64 ? "64+" : String.valueOf(count), 0, 0, 0xFFFFFFFF); context.drawText(font, count > 64 ? "64+" : String.valueOf(count), 0, 0, 0xFFFFFFFF, true);
modelStack.pop(); modelStack.pop();
} }
modelStack.pop(); modelStack.pop();
} }
DrawableUtil.renderItemIcon(spell.getDefaultStack(), x, y, EQUIPPED_GEMSTONE_SCALE); DrawableUtil.renderItemIcon(context, spell.getDefaultStack(), x, y, EQUIPPED_GEMSTONE_SCALE);
} }
private void renderMessage(MatrixStack matrices, float tickDelta) { private void renderMessage(DrawContext context, float tickDelta) {
float time = messageTime - tickDelta; float time = messageTime - tickDelta;
int progress = Math.min(255, (int)(time * 255F / 20F)); int progress = Math.min(255, (int)(time * 255F / 20F));
@ -235,11 +233,11 @@ public class UHud extends DrawableHelper {
color |= alpha; color |= alpha;
drawCenteredTextWithShadow(matrices, client.textRenderer, message, 25, -15, color); context.drawCenteredTextWithShadow(font, message, 25, -15, color);
} }
} }
protected void renderViewEffects(Pony pony, MatrixStack matrices, int scaledWidth, int scaledHeight, float tickDelta) { protected void renderViewEffects(Pony pony, DrawContext context, int scaledWidth, int scaledHeight, float tickDelta) {
boolean hasEffect = client.player.hasStatusEffect(UEffects.SUN_BLINDNESS); boolean hasEffect = client.player.hasStatusEffect(UEffects.SUN_BLINDNESS);
@ -258,12 +256,12 @@ public class UHud extends DrawableHelper {
int color = 0xFFFFFF; int color = 0xFFFFFF;
if (hasEffect) { if (hasEffect) {
GradientUtil.fillRadialGradient(matrices, 0, 0, scaledWidth, scaledHeight, GradientUtil.fillRadialGradient(context.getMatrices(), 0, 0, scaledWidth, scaledHeight,
color | (alpha1 << 24), color | (alpha1 << 24),
color | (alpha2 << 24), color | (alpha2 << 24),
0, 1); 0, 1);
} else { } else {
GradientUtil.fillVerticalGradient(matrices, 0, 0, scaledHeight / 2, scaledWidth, scaledHeight, GradientUtil.fillVerticalGradient(context.getMatrices(), 0, 0, scaledHeight / 2, scaledWidth, scaledHeight,
color | (alpha1 << 24), color | (alpha1 << 24),
color | (alpha2 << 24), color | (alpha2 << 24),
color | (alpha1 << 24), color | (alpha1 << 24),
@ -277,7 +275,7 @@ public class UHud extends DrawableHelper {
final int delay = 7; final int delay = 7;
final int current = client.player.age / delay; final int current = client.player.age / delay;
final int tint = DyeColor.byId(current % DyeColor.values().length).getSignColor(); final int tint = DyeColor.byId(current % DyeColor.values().length).getSignColor();
fillGradient(matrices, 0, 0, scaledWidth, scaledHeight, 0x1F000000 | tint, 0x5F000000 | tint); context.fillGradient(0, 0, scaledWidth, scaledHeight, 0x1F000000 | tint, 0x5F000000 | tint);
if (partySound == null || partySound.isDone()) { if (partySound == null || partySound.isDone()) {
client.getSoundManager().play( client.getSoundManager().play(
@ -292,7 +290,7 @@ public class UHud extends DrawableHelper {
if (partySound != null) { if (partySound != null) {
partySound.setMuted(true); partySound.setMuted(true);
} }
fillGradient(matrices, 0, 0, scaledWidth, scaledHeight, 0x0A000088, 0x7E000000); context.fillGradient(0, 0, scaledWidth, scaledHeight, 0x0A000088, 0x7E000000);
} }
} else { } else {
if (partySound != null) { if (partySound != null) {
@ -302,7 +300,7 @@ public class UHud extends DrawableHelper {
if (UItems.ALICORN_AMULET.isApplicable(client.player)) { if (UItems.ALICORN_AMULET.isApplicable(client.player)) {
float radius = (float)pony.getArmour().getTicks(UItems.ALICORN_AMULET) / (5 * ItemTracker.DAYS); float radius = (float)pony.getArmour().getTicks(UItems.ALICORN_AMULET) / (5 * ItemTracker.DAYS);
renderVignette(matrices, 0x000000, radius, radius, scaledWidth, scaledHeight); renderVignette(context, 0x000000, radius, radius, scaledWidth, scaledHeight);
} }
float exhaustion = MathHelper.clamp(pony.getMagicalReserves().getExhaustion().getPercentFill(), 0, 0.6F); float exhaustion = MathHelper.clamp(pony.getMagicalReserves().getExhaustion().getPercentFill(), 0, 0.6F);
@ -319,11 +317,11 @@ public class UHud extends DrawableHelper {
float rate = exhaustion > 0.5F ? 2.5F : 7F; float rate = exhaustion > 0.5F ? 2.5F : 7F;
float radius = (1 + (float)Math.sin(client.player.age / rate)) / 2F; float radius = (1 + (float)Math.sin(client.player.age / rate)) / 2F;
renderVignette(matrices, 0x880000, exhaustion * radius, 0.1F + radius * 0.3F, scaledWidth, scaledHeight); renderVignette(context, 0x880000, exhaustion * radius, 0.1F + radius * 0.3F, scaledWidth, scaledHeight);
} }
} }
private void renderVignette(MatrixStack matrices, int color, float alpha, float radius, int scaledWidth, int scaledHeight) { private void renderVignette(DrawContext context, int color, float alpha, float radius, int scaledWidth, int scaledHeight) {
if (radius <= 0) { if (radius <= 0) {
return; return;
} }
@ -331,7 +329,7 @@ public class UHud extends DrawableHelper {
color &= 0xFFFFFF; color &= 0xFFFFFF;
float alpha2 = MathHelper.clamp(radius - 1, 0, 1) * 255; float alpha2 = MathHelper.clamp(radius - 1, 0, 1) * 255;
float alpha1 = Math.max(alpha2, MathHelper.clamp(alpha * 2, 0, 1) * 205); float alpha1 = Math.max(alpha2, MathHelper.clamp(alpha * 2, 0, 1) * 205);
GradientUtil.fillRadialGradient(matrices, 0, 0, scaledWidth, scaledHeight, GradientUtil.fillRadialGradient(context.getMatrices(), 0, 0, scaledWidth, scaledHeight,
color | (int)alpha1 << 24, color | (int)alpha1 << 24,
color | (int)alpha2 << 24, color | (int)alpha2 << 24,
0, Math.min(1, radius)); 0, Math.min(1, radius));
@ -348,11 +346,9 @@ public class UHud extends DrawableHelper {
} }
} }
void renderAbilityIcon(MatrixStack matrices, AbilityDispatcher.Stat stat, int x, int y, int u, int v, int frameWidth, int frameHeight) { void renderAbilityIcon(DrawContext context, AbilityDispatcher.Stat stat, int x, int y, int u, int v, int frameWidth, int frameHeight) {
stat.getAbility(Unicopia.getConfig().hudPage.get()).ifPresent(ability -> { stat.getAbility(Unicopia.getConfig().hudPage.get()).ifPresent(ability -> {
RenderSystem.setShaderTexture(0, ability.getIcon(Pony.of(client.player))); context.drawTexture(ability.getIcon(Pony.of(client.player)), x, y, 0, 0, frameWidth, frameHeight, u, v);
drawTexture(matrices, x, y, 0, 0, frameWidth, frameHeight, u, v);
RenderSystem.setShaderTexture(0, HUD_TEXTURE);
}); });
} }
} }

View file

@ -11,6 +11,7 @@ import com.minelittlepony.unicopia.container.SpellbookChapterLoader.Flow;
import com.minelittlepony.unicopia.container.SpellbookState; import com.minelittlepony.unicopia.container.SpellbookState;
import com.minelittlepony.unicopia.entity.player.Pony; import com.minelittlepony.unicopia.entity.player.Pony;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.network.PacketByteBuf; import net.minecraft.network.PacketByteBuf;
import net.minecraft.text.Text; import net.minecraft.text.Text;
@ -30,17 +31,17 @@ public class DynamicContent implements Content {
} }
@Override @Override
public void draw(MatrixStack matrices, int mouseX, int mouseY, IViewRoot container) { public void draw(DrawContext context, int mouseX, int mouseY, IViewRoot container) {
int pageIndex = state.getOffset() * 2; int pageIndex = state.getOffset() * 2;
getPage(pageIndex).ifPresent(page -> page.draw(matrices, mouseX, mouseY, container)); getPage(pageIndex).ifPresent(page -> page.draw(context, mouseX, mouseY, container));
matrices.push(); context.getMatrices().push();
getPage(pageIndex + 1).ifPresent(page -> { getPage(pageIndex + 1).ifPresent(page -> {
page.bounds.left = bounds.left + bounds.width / 2 + 20; page.bounds.left = bounds.left + bounds.width / 2 + 20;
page.draw(matrices, mouseX, mouseY, container); page.draw(context, mouseX, mouseY, container);
}); });
matrices.pop(); context.getMatrices().pop();
} }
@Override @Override
@ -123,7 +124,7 @@ public class DynamicContent implements Content {
} }
@Override @Override
public void draw(MatrixStack matrices, int mouseX, int mouseY, IViewRoot container) { public void draw(DrawContext context, int mouseX, int mouseY, IViewRoot container) {
if (elements.isEmpty()) { if (elements.isEmpty()) {
return; return;
@ -142,8 +143,9 @@ public class DynamicContent implements Content {
int headerColor = mouseY % 255; int headerColor = mouseY % 255;
DrawableUtil.drawScaledText(matrices, needsMoreXp ? UNKNOWN : title, bounds.left, bounds.top - 10, 1.3F, headerColor); MatrixStack matrices = context.getMatrices();
DrawableUtil.drawScaledText(matrices, level < 0 ? UNKNOWN_LEVEL : Text.literal("Level: " + (level + 1)).formatted(Formatting.DARK_GREEN), bounds.left, bounds.top - 10 + 12, 0.8F, headerColor); DrawableUtil.drawScaledText(context, needsMoreXp ? UNKNOWN : title, bounds.left, bounds.top - 10, 1.3F, headerColor);
DrawableUtil.drawScaledText(context, level < 0 ? UNKNOWN_LEVEL : Text.literal("Level: " + (level + 1)).formatted(Formatting.DARK_GREEN), bounds.left, bounds.top - 10 + 12, 0.8F, headerColor);
matrices.push(); matrices.push();
matrices.translate(bounds.left, bounds.top + 16, 0); matrices.translate(bounds.left, bounds.top + 16, 0);
@ -151,13 +153,13 @@ public class DynamicContent implements Content {
Bounds bounds = element.bounds(); Bounds bounds = element.bounds();
matrices.push(); matrices.push();
bounds.translate(matrices); bounds.translate(matrices);
element.draw(matrices, mouseX, mouseY, container); element.draw(context, mouseX, mouseY, container);
matrices.pop(); matrices.pop();
}); });
matrices.push(); matrices.push();
elements.stream().filter(PageElement::isInline).forEach(element -> { elements.stream().filter(PageElement::isInline).forEach(element -> {
element.draw(matrices, mouseX, mouseY, container); element.draw(context, mouseX, mouseY, container);
matrices.translate(0, element.bounds().height, 0); matrices.translate(0, element.bounds().height, 0);
}); });
matrices.pop(); matrices.pop();

View file

@ -9,11 +9,11 @@ import com.minelittlepony.unicopia.ability.magic.spell.effect.CustomisedSpellTyp
import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.systems.RenderSystem;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.screen.ingame.HandledScreen; import net.minecraft.client.gui.screen.ingame.HandledScreen;
import net.minecraft.client.item.TooltipContext; import net.minecraft.client.item.TooltipContext;
import net.minecraft.client.render.item.ItemRenderer; import net.minecraft.client.render.item.ItemRenderer;
import net.minecraft.client.sound.SoundManager; import net.minecraft.client.sound.SoundManager;
import net.minecraft.client.util.math.MatrixStack;
public class EquippedSpellSlot extends Button { public class EquippedSpellSlot extends Button {
@ -33,34 +33,32 @@ public class EquippedSpellSlot extends Button {
} }
@Override @Override
public void renderButton(MatrixStack matrices, int mouseX, int mouseY, float tickDelta) { public void renderButton(DrawContext context, int mouseX, int mouseY, float tickDelta) {
RenderSystem.setShaderColor(1, 1, 1, 1); RenderSystem.setShaderColor(1, 1, 1, 1);
RenderSystem.setShaderTexture(0, SpellbookScreen.SLOT);
RenderSystem.enableBlend(); RenderSystem.enableBlend();
drawTexture(matrices, getX() - 8, getY() - 8, 0, 0, 32, 32, 32, 32); context.drawTexture(SpellbookScreen.SLOT, getX() - 8, getY() - 8, 0, 0, 32, 32, 32, 32);
Vector4f pos = new Vector4f(getX(), getY(), 0, 1); Vector4f pos = new Vector4f(getX(), getY(), 0, 1);
pos.mul(matrices.peek().getPositionMatrix()); pos.mul(context.getMatrices().peek().getPositionMatrix());
if (spell.isEmpty()) { if (spell.isEmpty()) {
RenderSystem.setShaderColor(1, 1, 1, 0.3F); RenderSystem.setShaderColor(1, 1, 1, 0.3F);
RenderSystem.setShaderTexture(0, SpellbookScreen.GEM); context.drawTexture(SpellbookScreen.GEM, getX(), getY(), 0, 0, 16, 16, 16, 16);
drawTexture(matrices, getX(), getY(), 0, 0, 16, 16, 16, 16);
RenderSystem.disableBlend(); RenderSystem.disableBlend();
RenderSystem.setShaderColor(1, 1, 1, 1); RenderSystem.setShaderColor(1, 1, 1, 1);
} else { } else {
RenderSystem.disableBlend(); RenderSystem.disableBlend();
RenderSystem.setShaderColor(1, 1, 1, 1); RenderSystem.setShaderColor(1, 1, 1, 1);
drawItem(matrices, (int)pos.x, (int)pos.y); drawItem(context, (int)pos.x, (int)pos.y);
} }
if (isHovered()) { if (isHovered()) {
HandledScreen.drawSlotHighlight(matrices, getX(), getY(), 0); HandledScreen.drawSlotHighlight(context, getX(), getY(), 0);
} }
} }
protected void drawItem(MatrixStack matrices, int x, int y) { protected void drawItem(DrawContext context, int x, int y) {
itemRenderer.renderInGui(matrices, spell.getDefaultStack(), x, y); context.drawItem(spell.getDefaultStack(), x, y);
} }
@Override @Override

View file

@ -14,6 +14,7 @@ import com.minelittlepony.unicopia.client.render.PassThroughVertexConsumer;
import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.systems.RenderSystem;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.item.TooltipContext; import net.minecraft.client.item.TooltipContext;
import net.minecraft.client.render.*; import net.minecraft.client.render.*;
import net.minecraft.client.render.item.ItemRenderer; import net.minecraft.client.render.item.ItemRenderer;
@ -133,22 +134,22 @@ class IngredientTree implements SpellbookRecipe.CraftingTreeBuilder {
} }
@Override @Override
public void renderButton(MatrixStack matrices, int mouseX, int mouseY, float tickDelta) { public void renderButton(DrawContext context, int mouseX, int mouseY, float tickDelta) {
RenderSystem.setShaderColor(1, 1, 1, 1); RenderSystem.setShaderColor(1, 1, 1, 1);
RenderSystem.setShaderTexture(0, SpellbookScreen.SLOT);
RenderSystem.enableBlend(); RenderSystem.enableBlend();
drawTexture(matrices, getX() - 8, getY() - 10, 0, 0, 32, 32, 32, 32); context.drawTexture(SpellbookScreen.SLOT, getX() - 8, getY() - 10, 0, 0, 32, 32, 32, 32);
RenderSystem.disableBlend(); RenderSystem.disableBlend();
RenderSystem.setShaderColor(1, 1, 1, 1); RenderSystem.setShaderColor(1, 1, 1, 1);
MinecraftClient.getInstance().textRenderer.draw(matrices, label, context.drawText(getFont(), label,
getX() - MinecraftClient.getInstance().textRenderer.getWidth(label) / 2 - 3, getX() - MinecraftClient.getInstance().textRenderer.getWidth(label) / 2 - 3,
getY() + 4, getY() + 4,
0 0,
false
); );
entry.render(matrices, getX(), getY(), tickDelta); entry.render(context, getX(), getY(), tickDelta);
} }
} }
@ -162,7 +163,7 @@ class IngredientTree implements SpellbookRecipe.CraftingTreeBuilder {
return Multiple.of(Arrays.stream(traits).map(t -> new Traits(t, value)).toArray(Entry[]::new)); return Multiple.of(Arrays.stream(traits).map(t -> new Traits(t, value)).toArray(Entry[]::new));
} }
void render(MatrixStack matrices, int mouseX, int mouseY, float tickDelta); void render(DrawContext context, int mouseX, int mouseY, float tickDelta);
Tooltip getTooltip(); Tooltip getTooltip();
@ -177,7 +178,7 @@ class IngredientTree implements SpellbookRecipe.CraftingTreeBuilder {
static final IngredientTree.Entry EMPTY = new IngredientTree.Entry() { static final IngredientTree.Entry EMPTY = new IngredientTree.Entry() {
@Override @Override
public void render(MatrixStack matrices, int mouseX, int mouseY, float tickDelta) {} public void render(DrawContext context, int mouseX, int mouseY, float tickDelta) {}
@Override @Override
public void onClick() { } public void onClick() { }
@ -203,14 +204,14 @@ class IngredientTree implements SpellbookRecipe.CraftingTreeBuilder {
} }
@Override @Override
public void render(MatrixStack matrices, int x, int y, float tickDelta) { public void render(DrawContext context, int x, int y, float tickDelta) {
y -= 2; y -= 2;
if (ticker++ % 30 == 0) { if (ticker++ % 30 == 0) {
index = (index + 1) % entries.length; index = (index + 1) % entries.length;
} }
entries[index].render(matrices, x, y, tickDelta); entries[index].render(context, x, y, tickDelta);
} }
@Override @Override
@ -235,12 +236,12 @@ class IngredientTree implements SpellbookRecipe.CraftingTreeBuilder {
} }
@Override @Override
public void render(MatrixStack matrices, int x, int y, float tickDelta) { public void render(DrawContext context, int x, int y, float tickDelta) {
drawItem(matrices, x, y - 2); drawItem(context, x, y - 2);
} }
protected void drawItem(MatrixStack matrices, int x, int y) { protected void drawItem(DrawContext context, int x, int y) {
itemRenderer.renderInGui(matrices, stack, x, y); context.drawItem(stack, x, y);
} }
@Override @Override
@ -261,7 +262,7 @@ class IngredientTree implements SpellbookRecipe.CraftingTreeBuilder {
static class HiddenStacks extends Stacks { static class HiddenStacks extends Stacks {
private static final PassThroughVertexConsumer.Parameters FIXTURE = new PassThroughVertexConsumer.Parameters().color((parent, r, g, b, a) -> { private static final PassThroughVertexConsumer.Parameters FIXTURE = new PassThroughVertexConsumer.Parameters().color((parent, r, g, b, a) -> {
parent.color(0, 0, 0, a); parent.color(0, 0, 0, 0.6F);
}); });
HiddenStacks(ItemStack stack) { HiddenStacks(ItemStack stack) {
@ -269,17 +270,18 @@ class IngredientTree implements SpellbookRecipe.CraftingTreeBuilder {
} }
@Override @Override
protected void drawItem(MatrixStack matrices, int x, int y) { protected void drawItem(DrawContext context, int x, int y) {
var model = itemRenderer.getModel(stack, null, null, 0); var model = itemRenderer.getModel(stack, null, null, 0);
MinecraftClient.getInstance().getTextureManager().getTexture(PlayerScreenHandler.BLOCK_ATLAS_TEXTURE).setFilter(false, false); MinecraftClient.getInstance().getTextureManager().getTexture(PlayerScreenHandler.BLOCK_ATLAS_TEXTURE).setFilter(false, false);
RenderSystem.setShaderTexture(0, PlayerScreenHandler.BLOCK_ATLAS_TEXTURE); RenderSystem.setShaderTexture(0, PlayerScreenHandler.BLOCK_ATLAS_TEXTURE);
MatrixStack matrices = context.getMatrices();
matrices.push(); matrices.push();
matrices.translate(x, y, 100); matrices.translate(x, y, 100);
matrices.translate(8, 8, 0); matrices.translate(8, 8, 0);
matrices.scale(1, -1, 1); matrices.scale(1, -1, 1);
matrices.scale(8, 8, 8); matrices.scale(8, 8, 8);
VertexConsumerProvider.Immediate immediate = MinecraftClient.getInstance().getBufferBuilders().getEntityVertexConsumers(); VertexConsumerProvider.Immediate immediate = context.getVertexConsumers();
boolean bl = !model.isSideLit(); boolean bl = !model.isSideLit();
if (bl) { if (bl) {
DiffuseLighting.disableGuiDepthLighting(); DiffuseLighting.disableGuiDepthLighting();
@ -316,8 +318,8 @@ class IngredientTree implements SpellbookRecipe.CraftingTreeBuilder {
} }
@Override @Override
public void render(MatrixStack matrices, int x, int y, float tickDelta) { public void render(DrawContext context, int x, int y, float tickDelta) {
ItemTraitsTooltipRenderer.renderTraitIcon(trait, value, matrices, x, y); ItemTraitsTooltipRenderer.renderTraitIcon(trait, value, context, x, y);
} }
@Override @Override

View file

@ -11,11 +11,10 @@ import com.minelittlepony.unicopia.client.gui.ParagraphWrappingVisitor;
import com.minelittlepony.unicopia.client.gui.spellbook.SpellbookChapterList.Drawable; import com.minelittlepony.unicopia.client.gui.spellbook.SpellbookChapterList.Drawable;
import com.minelittlepony.unicopia.container.SpellbookChapterLoader.Flow; import com.minelittlepony.unicopia.container.SpellbookChapterLoader.Flow;
import com.minelittlepony.unicopia.entity.player.Pony; import com.minelittlepony.unicopia.entity.player.Pony;
import com.mojang.blaze3d.systems.RenderSystem;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.font.TextRenderer; import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawableHelper; import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.network.PacketByteBuf; import net.minecraft.network.PacketByteBuf;
import net.minecraft.text.Style; import net.minecraft.text.Style;
@ -24,7 +23,7 @@ import net.minecraft.util.*;
interface PageElement extends Drawable { interface PageElement extends Drawable {
@Override @Override
default void draw(MatrixStack matrices, int mouseX, int mouseY, IViewRoot container) { default void draw(DrawContext context, int mouseX, int mouseY, IViewRoot container) {
} }
@ -64,10 +63,8 @@ interface PageElement extends Drawable {
Bounds bounds, Bounds bounds,
Flow flow) implements PageElement { Flow flow) implements PageElement {
@Override @Override
public void draw(MatrixStack matrices, int mouseX, int mouseY, IViewRoot container) { public void draw(DrawContext context, int mouseX, int mouseY, IViewRoot container) {
RenderSystem.setShaderTexture(0, texture); context.drawTexture(texture, 0, 0, 0, 0, 0, bounds().width, bounds().height, bounds().width, bounds().height);
DrawableHelper.drawTexture(matrices, 0, 0, 0, 0, 0, bounds().width, bounds().height, bounds().width, bounds().height);
RenderSystem.setShaderTexture(0, SpellbookScreen.TEXTURE);
} }
} }
@ -96,12 +93,13 @@ interface PageElement extends Drawable {
} }
@Override @Override
public void draw(MatrixStack matrices, int mouseX, int mouseY, IViewRoot container) { public void draw(DrawContext context, int mouseX, int mouseY, IViewRoot container) {
TextRenderer font = MinecraftClient.getInstance().textRenderer; TextRenderer font = MinecraftClient.getInstance().textRenderer;
boolean needsMoreXp = page.getLevel() < 0 || Pony.of(MinecraftClient.getInstance().player).getLevel().get() < page.getLevel(); boolean needsMoreXp = page.getLevel() < 0 || Pony.of(MinecraftClient.getInstance().player).getLevel().get() < page.getLevel();
MatrixStack matrices = context.getMatrices();
matrices.push(); matrices.push();
wrappedText.forEach(line -> { wrappedText.forEach(line -> {
font.draw(matrices, needsMoreXp ? line.text().copy().formatted(Formatting.OBFUSCATED) : line.text().copy(), line.x(), 0, 0); context.drawText(font, needsMoreXp ? line.text().copy().formatted(Formatting.OBFUSCATED) : line.text().copy(), line.x(), 0, 0, false);
matrices.translate(0, font.fontHeight, 0); matrices.translate(0, font.fontHeight, 0);
}); });
matrices.pop(); matrices.pop();

View file

@ -8,7 +8,7 @@ import com.minelittlepony.common.client.gui.IViewRoot;
import com.minelittlepony.unicopia.Debug; import com.minelittlepony.unicopia.Debug;
import com.minelittlepony.unicopia.Unicopia; import com.minelittlepony.unicopia.Unicopia;
import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.gui.DrawContext;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
public class SpellbookChapterList { public class SpellbookChapterList {
@ -89,14 +89,14 @@ public class SpellbookChapterList {
} }
@Override @Override
public void draw(MatrixStack matrices, int mouseX, int mouseY, IViewRoot container) { public void draw(DrawContext context, int mouseX, int mouseY, IViewRoot container) {
obj.draw(matrices, mouseX, mouseY, container); obj.draw(context, mouseX, mouseY, container);
} }
}); });
} }
} }
public interface Drawable { public interface Drawable {
void draw(MatrixStack matrices, int mouseX, int mouseY, IViewRoot container); void draw(DrawContext context, int mouseX, int mouseY, IViewRoot container);
} }
} }

View file

@ -9,6 +9,7 @@ import com.minelittlepony.unicopia.container.SpellbookState;
import com.minelittlepony.unicopia.item.URecipes; import com.minelittlepony.unicopia.item.URecipes;
import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.systems.RenderSystem;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
@ -40,14 +41,14 @@ public class SpellbookCraftingPageContent extends ScrollContainer implements Spe
} }
@Override @Override
public void draw(MatrixStack matrices, int mouseX, int mouseY, IViewRoot container) { public void draw(DrawContext context, int mouseX, int mouseY, IViewRoot container) {
int headerColor = mouseY % 255; int headerColor = mouseY % 255;
DrawableUtil.drawScaledText(matrices, state.getOffset() == 0 ? INVENTORY_TITLE : RECIPES_TITLE, screen.getFrameBounds().left + screen.getFrameBounds().width / 2 + 20, SpellbookScreen.TITLE_Y, 1.3F, headerColor); DrawableUtil.drawScaledText(context, state.getOffset() == 0 ? INVENTORY_TITLE : RECIPES_TITLE, screen.getFrameBounds().left + screen.getFrameBounds().width / 2 + 20, SpellbookScreen.TITLE_Y, 1.3F, headerColor);
Text pageText = Text.translatable("%s/%s", state.getOffset() + 1, TOTAL_PAGES); Text pageText = Text.translatable("%s/%s", state.getOffset() + 1, TOTAL_PAGES);
textRenderer.draw(matrices, pageText, 337 - textRenderer.getWidth(pageText) / 2F, 190, headerColor); context.drawText(textRenderer, pageText, (int)(337 - textRenderer.getWidth(pageText) / 2F), 190, headerColor, false);
} }
@Override @Override
@ -97,35 +98,35 @@ public class SpellbookCraftingPageContent extends ScrollContainer implements Spe
} }
@Override @Override
public void drawOverlays(MatrixStack matrices, int mouseX, int mouseY, float tickDelta) { public void drawOverlays(DrawContext context, int mouseX, int mouseY, float tickDelta) {
MatrixStack matrices = context.getMatrices();
matrices.push(); matrices.push();
matrices.translate(margin.left, margin.top, 0); matrices.translate(margin.left, margin.top, 0);
matrices.translate(-2, -2, 200); matrices.translate(-2, -2, 200);
RenderSystem.enableBlend(); RenderSystem.enableBlend();
RenderSystem.setShaderTexture(0, SpellbookScreen.TEXTURE);
int tileSize = 25; int tileSize = 25;
final int bottom = height - tileSize + 4; final int bottom = height - tileSize + 4;
final int right = width - tileSize + 9; final int right = width - tileSize + 9;
drawTexture(matrices, 0, 0, 405, 62, tileSize, tileSize, 512, 256); context.drawTexture(SpellbookScreen.TEXTURE, 0, 0, 405, 62, tileSize, tileSize, 512, 256);
drawTexture(matrices, right, 0, 425, 62, tileSize, tileSize, 512, 256); context.drawTexture(SpellbookScreen.TEXTURE, right, 0, 425, 62, tileSize, tileSize, 512, 256);
drawTexture(matrices, 0, bottom, 405, 72, tileSize, tileSize, 512, 256); context.drawTexture(SpellbookScreen.TEXTURE, 0, bottom, 405, 72, tileSize, tileSize, 512, 256);
drawTexture(matrices, right, bottom, 425, 72, tileSize, tileSize, 512, 256); context.drawTexture(SpellbookScreen.TEXTURE, right, bottom, 425, 72, tileSize, tileSize, 512, 256);
for (int i = tileSize; i < right; i += tileSize) { for (int i = tileSize; i < right; i += tileSize) {
drawTexture(matrices, i, 0, 415, 62, tileSize, tileSize, 512, 256); context.drawTexture(SpellbookScreen.TEXTURE, i, 0, 415, 62, tileSize, tileSize, 512, 256);
drawTexture(matrices, i, bottom, 415, 72, tileSize, tileSize, 512, 256); context.drawTexture(SpellbookScreen.TEXTURE, i, bottom, 415, 72, tileSize, tileSize, 512, 256);
} }
for (int i = tileSize; i < bottom; i += tileSize) { for (int i = tileSize; i < bottom; i += tileSize) {
drawTexture(matrices, 0, i, 405, 67, tileSize, tileSize, 512, 256); context.drawTexture(SpellbookScreen.TEXTURE, 0, i, 405, 67, tileSize, tileSize, 512, 256);
drawTexture(matrices, right, i, 425, 67, tileSize, tileSize, 512, 256); context.drawTexture(SpellbookScreen.TEXTURE, right, i, 425, 67, tileSize, tileSize, 512, 256);
} }
matrices.pop(); matrices.pop();
screen.drawSlots(matrices, mouseX, mouseY, tickDelta); screen.drawSlots(context, mouseX, mouseY, tickDelta);
super.drawOverlays(matrices, mouseX, mouseY, tickDelta); super.drawOverlays(context, mouseX, mouseY, tickDelta);
} }
} }

View file

@ -9,14 +9,14 @@ import com.sollace.romanizer.api.Romanizer;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.font.TextRenderer; import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawableHelper; import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import net.minecraft.util.Hand; import net.minecraft.util.Hand;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.MathHelper;
public class SpellbookProfilePageContent extends DrawableHelper implements SpellbookChapterList.Content { public class SpellbookProfilePageContent implements SpellbookChapterList.Content {
private final MinecraftClient client = MinecraftClient.getInstance(); private final MinecraftClient client = MinecraftClient.getInstance();
private final Pony pony = Pony.of(client.player); private final Pony pony = Pony.of(client.player);
private final TextRenderer font = client.textRenderer; private final TextRenderer font = client.textRenderer;
@ -63,7 +63,7 @@ public class SpellbookProfilePageContent extends DrawableHelper implements Spell
} }
@Override @Override
public void draw(MatrixStack matrices, int mouseX, int mouseY, IViewRoot container) { public void draw(DrawContext context, int mouseX, int mouseY, IViewRoot container) {
int y = SpellbookScreen.TITLE_Y; int y = SpellbookScreen.TITLE_Y;
@ -72,8 +72,8 @@ public class SpellbookProfilePageContent extends DrawableHelper implements Spell
float currentScaledLevel = pony.getLevel().getScaled(1); float currentScaledLevel = pony.getLevel().getScaled(1);
float currentCorruption = pony.getCorruption().getScaled(1); float currentCorruption = pony.getCorruption().getScaled(1);
DrawableUtil.drawScaledText(matrices, pony.asEntity().getName(), SpellbookScreen.TITLE_X, y, 1.3F, SpellbookScreen.TITLE_COLOR); DrawableUtil.drawScaledText(context, pony.asEntity().getName(), SpellbookScreen.TITLE_X, y, 1.3F, SpellbookScreen.TITLE_COLOR);
DrawableUtil.drawScaledText(matrices, ExperienceGroup.forLevel( DrawableUtil.drawScaledText(context, ExperienceGroup.forLevel(
currentScaledLevel, currentScaledLevel,
currentCorruption currentCorruption
), SpellbookScreen.TITLE_X, y + 13, 0.8F, ), SpellbookScreen.TITLE_X, y + 13, 0.8F,
@ -85,10 +85,11 @@ public class SpellbookProfilePageContent extends DrawableHelper implements Spell
MagicReserves reserves = pony.getMagicalReserves(); MagicReserves reserves = pony.getMagicalReserves();
MatrixStack matrices = context.getMatrices();
matrices.push(); matrices.push();
matrices.translate(screen.getBackgroundWidth() / 2 + SpellbookScreen.TITLE_X - 10, y, 0); matrices.translate(screen.getBackgroundWidth() / 2 + SpellbookScreen.TITLE_X - 10, y, 0);
matrices.scale(1.3F, 1.3F, 1); matrices.scale(1.3F, 1.3F, 1);
font.draw(matrices, SpellbookCraftingPageContent.INVENTORY_TITLE, 0, 0, SpellbookScreen.TITLE_COLOR); context.drawText(font, SpellbookCraftingPageContent.INVENTORY_TITLE, 0, 0, SpellbookScreen.TITLE_COLOR, false);
matrices.pop(); matrices.pop();
Bounds bounds = screen.getFrameBounds(); Bounds bounds = screen.getFrameBounds();
@ -139,26 +140,26 @@ public class SpellbookProfilePageContent extends DrawableHelper implements Spell
String manaString = (int)reserves.getMana().get() + "/" + (int)reserves.getMana().getMax(); String manaString = (int)reserves.getMana().get() + "/" + (int)reserves.getMana().getMax();
y = 15; y = 15;
font.draw(matrices, "Mana", -font.getWidth("Mana") / 2, y, SpellbookScreen.TITLE_COLOR); context.drawText(font, "Mana", -font.getWidth("Mana") / 2, y, SpellbookScreen.TITLE_COLOR, false);
font.draw(matrices, manaString, -font.getWidth(manaString) / 2, y += font.fontHeight, SpellbookScreen.TITLE_COLOR); context.drawText(font, manaString, -font.getWidth(manaString) / 2, y += font.fontHeight, SpellbookScreen.TITLE_COLOR, false);
Text levelString = Text.literal(Romanizer.romanize(currentLevel + 1)); Text levelString = Text.literal(Romanizer.romanize(currentLevel + 1));
matrices.translate(-font.getWidth(levelString), -35, 0); matrices.translate(-font.getWidth(levelString), -35, 0);
matrices.scale(2F, 2F, 1); matrices.scale(2F, 2F, 1);
font.draw(matrices, levelString, 0, 0, SpellbookScreen.TITLE_COLOR); context.drawText(font, levelString, 0, 0, SpellbookScreen.TITLE_COLOR, false);
matrices.pop(); matrices.pop();
matrices.push(); matrices.push();
matrices.translate(-screen.getX(), -screen.getY(), 0); matrices.translate(-screen.getX(), -screen.getY(), 0);
screen.drawSlots(matrices, mouseX, mouseY, 0); screen.drawSlots(context, mouseX, mouseY, 0);
matrices.pop(); matrices.pop();
} }
static void drawBar(MatrixStack matrices, int x, int y, float value, int color) { static void drawBar(DrawContext context, int x, int y, float value, int color) {
int barWidth = 40; int barWidth = 40;
int midpoint = x + (int)(barWidth * value); int midpoint = x + (int)(barWidth * value);
fill(matrices, x, y, midpoint, y + 5, 0xFFAAFFFF); context.fill(x, y, midpoint, y + 5, 0xFFAAFFFF);
fill(matrices, midpoint, y, x + barWidth, y + 5, color); context.fill(midpoint, y, x + barWidth, y + 5, color);
} }
} }

View file

@ -19,6 +19,7 @@ import com.minelittlepony.unicopia.network.MsgSpellbookStateChanged;
import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.platform.GlStateManager;
import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.systems.RenderSystem;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.Drawable; import net.minecraft.client.gui.Drawable;
import net.minecraft.client.gui.screen.ingame.HandledScreen; import net.minecraft.client.gui.screen.ingame.HandledScreen;
import net.minecraft.client.gui.screen.recipebook.RecipeBookProvider; import net.minecraft.client.gui.screen.recipebook.RecipeBookProvider;
@ -27,7 +28,6 @@ import net.minecraft.client.render.GameRenderer;
import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.entity.player.PlayerInventory; import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.screen.slot.Slot; import net.minecraft.screen.slot.Slot;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.sound.SoundEvents; import net.minecraft.sound.SoundEvents;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
@ -70,7 +70,7 @@ public class SpellbookScreen extends HandledScreen<SpellbookScreenHandler> imple
return chapters.getCurrentChapter() == craftingChapter; return chapters.getCurrentChapter() == craftingChapter;
}); });
handler.getSpellbookState().setSynchronizer(state -> { handler.getSpellbookState().setSynchronizer(state -> {
Channel.CLIENT_SPELLBOOK_UPDATE.sendToServer(new MsgSpellbookStateChanged<ServerPlayerEntity>(handler.syncId, state)); Channel.CLIENT_SPELLBOOK_UPDATE.sendToServer(MsgSpellbookStateChanged.create(handler, state));
}); });
} }
@ -133,21 +133,19 @@ public class SpellbookScreen extends HandledScreen<SpellbookScreenHandler> imple
} }
@Override @Override
public void render(MatrixStack matrices, int mouseX, int mouseY, float partialTicks) { public void render(DrawContext context, int mouseX, int mouseY, float partialTicks) {
if (getState().isDirty()) { if (getState().isDirty()) {
clearAndInit(); clearAndInit();
} }
super.render(matrices, mouseX, mouseY, partialTicks); super.render(context, mouseX, mouseY, partialTicks);
drawMouseoverTooltip(matrices, mouseX, mouseY);
} }
@Override @Override
protected void drawBackground(MatrixStack matrices, float delta, int mouseX, int mouseY) { protected void drawBackground(DrawContext context, float delta, int mouseX, int mouseY) {
renderBackground(matrices); renderBackground(context);
RenderSystem.setShaderColor(1, 1, 1, 1); RenderSystem.setShaderColor(1, 1, 1, 1);
RenderSystem.setShaderTexture(0, TEXTURE);
drawTexture(matrices, x, y, 0, 0, backgroundWidth, backgroundHeight, 512, 256); context.drawTexture(TEXTURE, x, y, 0, 0, backgroundWidth, backgroundHeight, 512, 256);
if (Debug.DEBUG_SPELLBOOK_CHAPTERS) { if (Debug.DEBUG_SPELLBOOK_CHAPTERS) {
clearAndInit(); clearAndInit();
@ -169,43 +167,41 @@ public class SpellbookScreen extends HandledScreen<SpellbookScreenHandler> imple
boolean isRight = tab.chapter().side() == TabSide.RIGHT; boolean isRight = tab.chapter().side() == TabSide.RIGHT;
drawTexture(matrices, bounds.left, bounds.top, isRight ? 510 - bounds.width : 402, v, bounds.width, bounds.height, 512, 256); context.drawTexture(TEXTURE, bounds.left, bounds.top, isRight ? 510 - bounds.width : 402, v, bounds.width, bounds.height, 512, 256);
RenderSystem.setShaderColor(1, 1, 1, 1); RenderSystem.setShaderColor(1, 1, 1, 1);
RenderSystem.setShaderTexture(0, tab.icon().get()); RenderSystem.setShaderTexture(0, tab.icon().get());
drawTexture(matrices, isRight ? bounds.left + bounds.width - 16 - 10 : bounds.left + 10, bounds.top + (bounds.height - 16) / 2, 0, 0, 16, 16, 16, 16); context.drawTexture(TEXTURE, isRight ? bounds.left + bounds.width - 16 - 10 : bounds.left + 10, bounds.top + (bounds.height - 16) / 2, 0, 0, 16, 16, 16, 16);
RenderSystem.setShaderTexture(0, TEXTURE); RenderSystem.setShaderTexture(0, TEXTURE);
}); });
MatrixStack matrices = context.getMatrices();
matrices.push(); matrices.push();
matrices.translate(x, y, 0); matrices.translate(x, y, 0);
chapters.getCurrentChapter().content().ifPresent(content -> content.draw(matrices, mouseX, mouseY, (IViewRoot)this)); chapters.getCurrentChapter().content().ifPresent(content -> content.draw(context, mouseX, mouseY, (IViewRoot)this));
matrices.pop(); matrices.pop();
} }
void drawSlots(MatrixStack matrices, int mouseX, int mouseY, float delta) { void drawSlots(DrawContext context, int mouseX, int mouseY, float delta) {
MatrixStack matrices = context.getMatrices();
matrices.push(); matrices.push();
matrices.translate(x, y, 0); matrices.translate(x, y, 0);
RenderSystem.setShaderColor(1, 1, 1, 1); RenderSystem.setShaderColor(1, 1, 1, 1);
RenderSystem.setShaderTexture(0, SLOT);
RenderSystem.enableBlend(); RenderSystem.enableBlend();
for (Slot slot : handler.slots) { for (Slot slot : handler.slots) {
if (slot.isEnabled() && slot instanceof SpellbookSlot p) { if (slot.isEnabled() && slot instanceof SpellbookSlot p) {
drawTexture(matrices, slot.x - 8, slot.y - 8, 0, 0, 32, 32, 32, 32); context.drawTexture(SLOT, slot.x - 8, slot.y - 8, 0, 0, 32, 32, 32, 32);
if (slot instanceof InputSlot) { if (slot instanceof InputSlot) {
RenderSystem.setShaderColor(1, 1, 1, 0.3F); RenderSystem.setShaderColor(1, 1, 1, 0.3F);
RenderSystem.setShaderTexture(0, GEM); context.drawTexture(GEM, slot.x, slot.y, 0, 0, 16, 16, 16, 16);
drawTexture(matrices, slot.x, slot.y, 0, 0, 16, 16, 16, 16);
RenderSystem.setShaderColor(1, 1, 1, 1); RenderSystem.setShaderColor(1, 1, 1, 1);
RenderSystem.setShaderTexture(0, SLOT);
} }
if (!(p instanceof InventorySlot)) { if (!(p instanceof InventorySlot)) {
float weight = p.getWeight(); float weight = p.getWeight();
ItemTraitsTooltipRenderer.renderStackTraits(slot.getStack(), matrices, slot.x, slot.y, weight == 0 ? 1 : weight, delta, slot.id); ItemTraitsTooltipRenderer.renderStackTraits(slot.getStack(), context, slot.x, slot.y, weight == 0 ? 1 : weight, delta, slot.id);
RenderSystem.setShaderTexture(0, SLOT);
RenderSystem.enableBlend(); RenderSystem.enableBlend();
} }
} }
@ -216,7 +212,7 @@ public class SpellbookScreen extends HandledScreen<SpellbookScreenHandler> imple
} }
@Override @Override
protected void drawForeground(MatrixStack matrices, int mouseX, int mouseY) { protected void drawForeground(DrawContext context, int mouseX, int mouseY) {
} }
@Override @Override
@ -271,7 +267,7 @@ public class SpellbookScreen extends HandledScreen<SpellbookScreenHandler> imple
} }
@Override @Override
public void renderButton(MatrixStack matrices, int mouseX, int mouseY, float tickDelta) { public void renderButton(DrawContext context, int mouseX, int mouseY, float tickDelta) {
if (!active) { if (!active) {
return; return;
} }
@ -279,7 +275,7 @@ public class SpellbookScreen extends HandledScreen<SpellbookScreenHandler> imple
int state = hovered ? 1 : 0; int state = hovered ? 1 : 0;
sprite.setTextureOffset(23 * state, (int)(479 + 6.5F - (increment * 6.5F))); sprite.setTextureOffset(23 * state, (int)(479 + 6.5F - (increment * 6.5F)));
super.renderButton(matrices, mouseX, mouseY, tickDelta); super.renderButton(context, mouseX, mouseY, tickDelta);
} }
} }
@ -294,7 +290,7 @@ public class SpellbookScreen extends HandledScreen<SpellbookScreenHandler> imple
} }
@Override @Override
public void renderButton(MatrixStack matrices, int mouseX, int mouseY, float tickDelta) { public void renderButton(DrawContext context, int mouseX, int mouseY, float tickDelta) {
RenderSystem.setShader(GameRenderer::getPositionTexProgram); RenderSystem.setShader(GameRenderer::getPositionTexProgram);
RenderSystem.setShaderColor(1, 1, 1, alpha); RenderSystem.setShaderColor(1, 1, 1, alpha);
@ -304,7 +300,7 @@ public class SpellbookScreen extends HandledScreen<SpellbookScreenHandler> imple
GlStateManager.DstFactor.ONE_MINUS_SRC_ALPHA); GlStateManager.DstFactor.ONE_MINUS_SRC_ALPHA);
if (getStyle().hasIcon()) { if (getStyle().hasIcon()) {
getStyle().getIcon().render(matrices, getX(), getY(), mouseX, mouseY, tickDelta); getStyle().getIcon().render(context, getX(), getY(), mouseX, mouseY, tickDelta);
} }
RenderSystem.setShaderColor(1, 1, 1, 1); RenderSystem.setShaderColor(1, 1, 1, 1);

View file

@ -16,7 +16,7 @@ import com.minelittlepony.unicopia.item.group.ItemGroupRegistry;
import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.systems.RenderSystem;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.DrawableHelper; import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.item.*; import net.minecraft.item.*;
import net.minecraft.sound.SoundEvents; import net.minecraft.sound.SoundEvents;
@ -24,7 +24,7 @@ import net.minecraft.text.Text;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import net.minecraft.util.Util; import net.minecraft.util.Util;
public class SpellbookTraitDexPageContent extends DrawableHelper implements SpellbookChapterList.Content, SpellbookScreen.RecipesChangedListener { public class SpellbookTraitDexPageContent implements SpellbookChapterList.Content, SpellbookScreen.RecipesChangedListener {
private final Trait[] traits = Trait.values(); private final Trait[] traits = Trait.values();
private SpellbookState.PageState state = new SpellbookState.PageState(); private SpellbookState.PageState state = new SpellbookState.PageState();
@ -40,7 +40,7 @@ public class SpellbookTraitDexPageContent extends DrawableHelper implements Spel
} }
@Override @Override
public void draw(MatrixStack matrices, int mouseX, int mouseY, IViewRoot container) { public void draw(DrawContext context, int mouseX, int mouseY, IViewRoot container) {
} }
@ -144,42 +144,42 @@ public class SpellbookTraitDexPageContent extends DrawableHelper implements Spel
@Override @Override
public void drawOverlays(MatrixStack matrices, int mouseX, int mouseY, float tickDelta) { public void drawOverlays(DrawContext context, int mouseX, int mouseY, float tickDelta) {
MatrixStack matrices = context.getMatrices();
matrices.push(); matrices.push();
matrices.translate(margin.left, margin.top, 0); matrices.translate(margin.left, margin.top, 0);
matrices.translate(-2, -2, 200); matrices.translate(-2, -2, 200);
RenderSystem.enableBlend(); RenderSystem.enableBlend();
RenderSystem.setShaderTexture(0, SpellbookScreen.TEXTURE);
int tileSize = 25; int tileSize = 25;
final int bottom = height - tileSize + 4; final int bottom = height - tileSize + 4;
final int right = width - tileSize + 9; final int right = width - tileSize + 9;
drawTexture(matrices, 0, 0, 405, 62, tileSize, tileSize, 512, 256); context.drawTexture(SpellbookScreen.TEXTURE, 0, 0, 405, 62, tileSize, tileSize, 512, 256);
drawTexture(matrices, 0, bottom, 405, 72, tileSize, tileSize, 512, 256); context.drawTexture(SpellbookScreen.TEXTURE, 0, bottom, 405, 72, tileSize, tileSize, 512, 256);
for (int i = tileSize; i < right; i += tileSize) { for (int i = tileSize; i < right; i += tileSize) {
drawTexture(matrices, i, 0, 415, 62, tileSize, tileSize, 512, 256); context.drawTexture(SpellbookScreen.TEXTURE, i, 0, 415, 62, tileSize, tileSize, 512, 256);
drawTexture(matrices, i, bottom, 415, 72, tileSize, tileSize, 512, 256); context.drawTexture(SpellbookScreen.TEXTURE, i, bottom, 415, 72, tileSize, tileSize, 512, 256);
} }
for (int i = tileSize; i < bottom; i += tileSize) { for (int i = tileSize; i < bottom; i += tileSize) {
drawTexture(matrices, 0, i, 405, 67, tileSize, tileSize, 512, 256); context.drawTexture(SpellbookScreen.TEXTURE, 0, i, 405, 67, tileSize, tileSize, 512, 256);
drawTexture(matrices, right, i, 425, 67, tileSize, tileSize, 512, 256); context.drawTexture(SpellbookScreen.TEXTURE, right, i, 425, 67, tileSize, tileSize, 512, 256);
} }
drawTexture(matrices, right, 0, 425, 62, tileSize, tileSize, 512, 256); context.drawTexture(SpellbookScreen.TEXTURE, right, 0, 425, 62, tileSize, tileSize, 512, 256);
drawTexture(matrices, right, bottom, 425, 72, tileSize, tileSize, 512, 256); context.drawTexture(SpellbookScreen.TEXTURE, right, bottom, 425, 72, tileSize, tileSize, 512, 256);
matrices.pop(); matrices.pop();
if (this == rightPage) { if (this == rightPage) {
leftPage.drawDelayed(matrices, mouseX, mouseY, 0); leftPage.drawDelayed(context, mouseX, mouseY, 0);
rightPage.drawDelayed(matrices, mouseX, mouseY, 0); rightPage.drawDelayed(context, mouseX, mouseY, 0);
} }
} }
public void drawDelayed(MatrixStack matrices, int mouseX, int mouseY, float tickDelta) { public void drawDelayed(DrawContext context, int mouseX, int mouseY, float tickDelta) {
super.drawOverlays(matrices, mouseX, mouseY, tickDelta); super.drawOverlays(context, mouseX, mouseY, tickDelta);
} }
} }
@ -199,24 +199,23 @@ public class SpellbookTraitDexPageContent extends DrawableHelper implements Spel
} }
@Override @Override
public void renderButton(MatrixStack matrices, int mouseX, int mouseY, float tickDelta) { public void renderButton(DrawContext context, int mouseX, int mouseY, float tickDelta) {
TraitDiscovery discoveries = Pony.of(MinecraftClient.getInstance().player).getDiscoveries(); TraitDiscovery discoveries = Pony.of(MinecraftClient.getInstance().player).getDiscoveries();
setEnabled(discoveries.isKnown(trait)); setEnabled(discoveries.isKnown(trait));
RenderSystem.setShaderColor(1, 1, 1, 1); RenderSystem.setShaderColor(1, 1, 1, 1);
RenderSystem.setShaderTexture(0, SpellbookScreen.TEXTURE);
RenderSystem.enableBlend(); RenderSystem.enableBlend();
drawTexture(matrices, getX() - 2, getY() - 8, 204, 219, 22, 32, 512, 256); context.drawTexture(SpellbookScreen.TEXTURE, getX() - 2, getY() - 8, 204, 219, 22, 32, 512, 256);
if (!active) { if (!active) {
drawTexture(matrices, getX() - 2, getY() - 1, 74, 223, 18, 18, 512, 256); context.drawTexture(SpellbookScreen.TEXTURE, getX() - 2, getY() - 1, 74, 223, 18, 18, 512, 256);
} }
if (discoveries.isUnread(trait)) { if (discoveries.isUnread(trait)) {
drawTexture(matrices, getX() - 8, getY() - 8, 225, 219, 35, 32, 512, 256); context.drawTexture(SpellbookScreen.TEXTURE, getX() - 8, getY() - 8, 225, 219, 35, 32, 512, 256);
} }
super.renderButton(matrices, mouseX, mouseY, tickDelta); super.renderButton(context, mouseX, mouseY, tickDelta);
hovered &= active; hovered &= active;
} }

View file

@ -55,7 +55,7 @@ class WingsGear implements IGear {
} }
if (AmuletSelectors.PEGASUS_AMULET.test(living.asEntity())) { if (AmuletSelectors.PEGASUS_AMULET.test(living.asEntity())) {
return entity.world.getDimension().ultrawarm() ? ICARUS_WINGS_CORRUPTED : ICARUS_WINGS; return entity.getWorld().getDimension().ultrawarm() ? ICARUS_WINGS_CORRUPTED : ICARUS_WINGS;
} }
Race race = living instanceof Pony pony ? pony.getObservedSpecies() : living.getSpecies(); Race race = living instanceof Pony pony ? pony.getObservedSpecies() : living.getSpecies();

View file

@ -34,7 +34,7 @@ public class FloatingArtefactEntityRenderer extends EntityRenderer<FloatingArtef
stack = UItems.EMPTY_JAR.getDefaultStack(); stack = UItems.EMPTY_JAR.getDefaultStack();
} }
final BakedModel model = itemRenderer.getModel(stack, entity.world, null, 0); final BakedModel model = itemRenderer.getModel(stack, entity.getWorld(), null, 0);
final float variance = 0.25F; final float variance = 0.25F;
final float verticalOffset = entity.getVerticalOffset(timeDelta); final float verticalOffset = entity.getVerticalOffset(timeDelta);

View file

@ -23,6 +23,6 @@ public class IcarusWingsFeatureRenderer<E extends LivingEntity> extends WingsFea
@Override @Override
protected Identifier getTexture(E entity) { protected Identifier getTexture(E entity) {
return entity.world.getDimension().ultrawarm() ? ICARUS_WINGS_CORRUPTED : ICARUS_WINGS; return entity.getWorld().getDimension().ultrawarm() ? ICARUS_WINGS_CORRUPTED : ICARUS_WINGS;
} }
} }

View file

@ -87,13 +87,13 @@ public class DisguiseCommand {
.setDisguise(entity); .setDisguise(entity);
if (source.getEntity() == player) { if (source.getEntity() == player) {
source.sendFeedback(Text.translatable("commands.disguise.success.self", entity.getName()), true); source.sendFeedback(() -> Text.translatable("commands.disguise.success.self", entity.getName()), true);
} else { } else {
if (player.getEntityWorld().getGameRules().getBoolean(GameRules.SEND_COMMAND_FEEDBACK)) { if (player.getEntityWorld().getGameRules().getBoolean(GameRules.SEND_COMMAND_FEEDBACK)) {
player.sendMessage(Text.translatable("commands.disguise.success", entity.getName())); player.sendMessage(Text.translatable("commands.disguise.success", entity.getName()));
} }
source.sendFeedback(Text.translatable("commands.disguise.success.other", player.getName(), entity.getName()), true); source.sendFeedback(() -> Text.translatable("commands.disguise.success.other", player.getName(), entity.getName()), true);
} }
return 0; return 0;
@ -114,13 +114,13 @@ public class DisguiseCommand {
iplayer.getSpellSlot().removeIf(SpellPredicate.IS_DISGUISE, true); iplayer.getSpellSlot().removeIf(SpellPredicate.IS_DISGUISE, true);
if (source.getEntity() == player) { if (source.getEntity() == player) {
source.sendFeedback(Text.translatable("commands.disguise.removed.self"), true); source.sendFeedback(() -> Text.translatable("commands.disguise.removed.self"), true);
} else { } else {
if (player.getEntityWorld().getGameRules().getBoolean(GameRules.SEND_COMMAND_FEEDBACK)) { if (player.getEntityWorld().getGameRules().getBoolean(GameRules.SEND_COMMAND_FEEDBACK)) {
player.sendMessage(Text.translatable("commands.disguise.removed")); player.sendMessage(Text.translatable("commands.disguise.removed"));
} }
source.sendFeedback(Text.translatable("commands.disguise.removed.other", player.getName()), true); source.sendFeedback(() -> Text.translatable("commands.disguise.removed.other", player.getName()), true);
} }
return 0; return 0;

View file

@ -60,13 +60,13 @@ class GravityCommand {
String translationKey = "commands.gravity." + key; String translationKey = "commands.gravity." + key;
if (source.getEntity() == player) { if (source.getEntity() == player) {
source.sendFeedback(Text.translatable(translationKey + ".self", arguments), true); source.sendFeedback(() -> Text.translatable(translationKey + ".self", arguments), true);
} else { } else {
if (notifyTarget && source.getWorld().getGameRules().getBoolean(GameRules.SEND_COMMAND_FEEDBACK)) { if (notifyTarget && source.getWorld().getGameRules().getBoolean(GameRules.SEND_COMMAND_FEEDBACK)) {
player.sendMessage(Text.translatable(translationKey, arguments)); player.sendMessage(Text.translatable(translationKey, arguments));
} }
source.sendFeedback(Text.translatable(translationKey + ".other", Streams.concat(Stream.of(player.getDisplayName()), Arrays.stream(arguments)).toArray()), true); source.sendFeedback(() -> Text.translatable(translationKey + ".other", Streams.concat(Stream.of(player.getDisplayName()), Arrays.stream(arguments)).toArray()), true);
} }
} }
} }

View file

@ -50,6 +50,7 @@ class RacelistCommand {
} }
static int toggle(ServerCommandSource source, ServerPlayerEntity player, Race race, String action, Function<Race, Boolean> func) { static int toggle(ServerCommandSource source, ServerPlayerEntity player, Race race, String action, Function<Race, Boolean> func) {
source.sendFeedback(() -> {
String translationKey = "commands.racelist." + action; String translationKey = "commands.racelist." + action;
if (!func.apply(race)) { if (!func.apply(race)) {
@ -61,8 +62,8 @@ class RacelistCommand {
} }
Text formattedName = race.getDisplayName().copy().formatted(Formatting.GOLD); Text formattedName = race.getDisplayName().copy().formatted(Formatting.GOLD);
return Text.translatable(translationKey, formattedName).formatted(Formatting.GREEN);
source.sendFeedback(Text.translatable(translationKey, formattedName).formatted(Formatting.GREEN), false); }, false);
return 0; return 0;
} }
} }

View file

@ -72,12 +72,12 @@ class SpeciesCommand {
} }
if (player == source.getPlayer()) { if (player == source.getPlayer()) {
source.sendFeedback(Text.translatable("commands.race.success.self", race.getDisplayName()), true); source.sendFeedback(() -> Text.translatable("commands.race.success.self", race.getDisplayName()), true);
} else { } else {
if (player.getEntityWorld().getGameRules().getBoolean(GameRules.SEND_COMMAND_FEEDBACK)) { if (player.getEntityWorld().getGameRules().getBoolean(GameRules.SEND_COMMAND_FEEDBACK)) {
player.sendMessage(Text.translatable("commands.race.success", race.getDisplayName()), false); player.sendMessage(Text.translatable("commands.race.success", race.getDisplayName()), false);
} }
source.sendFeedback(Text.translatable("commands.race.success.other", player.getName(), race.getDisplayName()), true); source.sendFeedback(() -> Text.translatable("commands.race.success.other", player.getName(), race.getDisplayName()), true);
} }
} else if (player.getEntityWorld().getGameRules().getBoolean(GameRules.SEND_COMMAND_FEEDBACK)) { } else if (player.getEntityWorld().getGameRules().getBoolean(GameRules.SEND_COMMAND_FEEDBACK)) {
player.sendMessage(Text.translatable("commands.race.permission"), false); player.sendMessage(Text.translatable("commands.race.permission"), false);

View file

@ -86,7 +86,7 @@ class TraitCommand {
if (source.getPlayer() == player) { if (source.getPlayer() == player) {
player.sendMessage(Text.translatable(translationKey, gravity), false); player.sendMessage(Text.translatable(translationKey, gravity), false);
} else { } else {
source.sendFeedback(Text.translatable(translationKey + ".other", player.getName(), gravity), true); source.sendFeedback(() -> Text.translatable(translationKey + ".other", player.getName(), gravity), true);
} }
return 0; return 0;

View file

@ -25,8 +25,10 @@ class WorldTribeCommand {
} }
static int get(ServerCommandSource source) throws CommandSyntaxException { static int get(ServerCommandSource source) throws CommandSyntaxException {
source.sendFeedback(() -> {
WorldTribeManager manager = WorldTribeManager.forWorld(source.getWorld()); WorldTribeManager manager = WorldTribeManager.forWorld(source.getWorld());
source.sendFeedback(Text.translatable("commands.worldtribe.success.get", manager.getDefaultRace().getDisplayName()), true); return Text.translatable("commands.worldtribe.success.get", manager.getDefaultRace().getDisplayName());
}, true);
return 0; return 0;
} }
@ -34,7 +36,7 @@ class WorldTribeCommand {
WorldTribeManager manager = WorldTribeManager.forWorld(source.getWorld()); WorldTribeManager manager = WorldTribeManager.forWorld(source.getWorld());
manager.setDefaultRace(race); manager.setDefaultRace(race);
source.sendFeedback(Text.translatable("commands.worldtribe.success.set", race.getDisplayName()), true); source.sendFeedback(() -> Text.translatable("commands.worldtribe.success.set", race.getDisplayName()), true);
return 0; return 0;
} }
} }

View file

@ -18,7 +18,7 @@ import dev.emi.emi.api.stack.EmiIngredient;
import dev.emi.emi.api.stack.EmiStack; import dev.emi.emi.api.stack.EmiStack;
import dev.emi.emi.api.widget.TextureWidget; import dev.emi.emi.api.widget.TextureWidget;
import dev.emi.emi.api.widget.WidgetHolder; import dev.emi.emi.api.widget.WidgetHolder;
import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.gui.DrawContext;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
@ -120,9 +120,9 @@ class SpellbookEmiRecipe implements EmiRecipe, SpellbookRecipe.CraftingTreeBuild
} }
@Override @Override
public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) { public void render(DrawContext context, int mouseX, int mouseY, float delta) {
RenderSystem.enableBlend(); RenderSystem.enableBlend();
super.render(matrices, mouseX, mouseY, delta); context.drawTexture(texture, x, y, 0, u, v, width, height, textureWidth, textureHeight);
} }
} }
} }

View file

@ -14,6 +14,7 @@ import dev.emi.emi.api.render.EmiRender;
import dev.emi.emi.api.stack.Comparison; import dev.emi.emi.api.stack.Comparison;
import dev.emi.emi.api.stack.EmiStack; import dev.emi.emi.api.stack.EmiStack;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.tooltip.TooltipComponent; import net.minecraft.client.gui.tooltip.TooltipComponent;
import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.item.Item; import net.minecraft.item.Item;
@ -78,25 +79,30 @@ public class TraitEmiStack extends EmiStack {
return trait.getName(); return trait.getName();
} }
@Override //@Override
public void render(MatrixStack matrices, int x, int y, float delta, int flags) { public void render(DrawContext context, int x, int y, float delta, int flags) {
if ((flags & RENDER_ICON) != 0) { if ((flags & RENDER_ICON) != 0) {
List<Item> knownItems = trait.getItems(); List<Item> knownItems = trait.getItems();
if (knownItems.isEmpty() || MinecraftClient.getInstance().player == null) { if (knownItems.isEmpty() || MinecraftClient.getInstance().player == null) {
ItemTraitsTooltipRenderer.renderTraitIcon(trait, amount, matrices, x, y, true); ItemTraitsTooltipRenderer.renderTraitIcon(trait, amount, context, x, y, true);
} else { } else {
int tick = (MinecraftClient.getInstance().player.age / 12) % knownItems.size(); int tick = (MinecraftClient.getInstance().player.age / 12) % knownItems.size();
ItemStack stack = knownItems.get(tick).getDefaultStack(); ItemStack stack = knownItems.get(tick).getDefaultStack();
EmiStack.of(stack).render(matrices, x, y, delta, flags); EmiStack.of(stack).render(context.getMatrices(), x, y, delta, flags);
ItemTraitsTooltipRenderer.renderStackTraits(traits, matrices, x, y, 1, delta, 0, true); ItemTraitsTooltipRenderer.renderStackTraits(traits, context, x, y, 1, delta, 0, true);
} }
} }
if ((flags & RENDER_REMAINDER) != 0) { if ((flags & RENDER_REMAINDER) != 0) {
EmiRender.renderRemainderIcon(this, matrices, x, y); EmiRender.renderRemainderIcon(this, context.getMatrices(), x, y);
} }
} }
//@Override
public void render(MatrixStack matrices, int x, int y, float delta, int flags) {
}
@Override @Override
public EmiStack copy() { public EmiStack copy() {
return new TraitEmiStack(trait, amount); return new TraitEmiStack(trait, amount);

View file

@ -55,7 +55,7 @@ public class OutputSlot extends CraftingResultSlot implements SpellbookSlot {
InventoryUtil.stream(input).forEach(s -> { InventoryUtil.stream(input).forEach(s -> {
pony.getDiscoveries().unlock(s.getItem()); pony.getDiscoveries().unlock(s.getItem());
}); });
pony.getMagicalReserves().getXp().add(MathHelper.clamp(player.world.getRandom().nextFloat() / 10F, 0.001F, 0.3F)); pony.getMagicalReserves().getXp().add(MathHelper.clamp(player.getWorld().getRandom().nextFloat() / 10F, 0.001F, 0.3F));
super.onTakeItem(player, stack); super.onTakeItem(player, stack);
} }
} }

View file

@ -80,7 +80,7 @@ public class AirBalloonEntity extends FlyingEntity implements EntityCollisions.C
if (isAirworthy()) { if (isAirworthy()) {
setVelocity(getVelocity() setVelocity(getVelocity()
.add(getWind(world, getBlockPos())) .add(getWind(getWorld(), getBlockPos()))
.normalize() .normalize()
.multiply(0.2) .multiply(0.2)
.add(0, isBurnerActive() ? 0.00F : isTouchingWater() ? 0.02F : -0.06F, 0)); .add(0, isBurnerActive() ? 0.00F : isTouchingWater() ? 0.02F : -0.06F, 0));
@ -112,15 +112,15 @@ public class AirBalloonEntity extends FlyingEntity implements EntityCollisions.C
if (velocityBeforeTick.length() > 0.01 && !isSubmergedInWater()) { if (velocityBeforeTick.length() > 0.01 && !isSubmergedInWater()) {
Box box = getInteriorBoundingBox(); Box box = getInteriorBoundingBox();
for (Entity e : world.getOtherEntities(this, box.expand(-0.2, 1, -0.2))) { for (Entity e : getWorld().getOtherEntities(this, box.expand(-0.2, 1, -0.2))) {
updatePassenger(e, box, !onGround); updatePassenger(e, box, !isOnGround());
weight++; weight++;
} }
if (hasBalloon()) { if (hasBalloon()) {
Box balloonBox = getBalloonBoundingBox(); Box balloonBox = getBalloonBoundingBox();
for (Entity e : world.getOtherEntities(this, balloonBox.expand(1.0E-7))) { for (Entity e : getWorld().getOtherEntities(this, balloonBox.expand(1.0E-7))) {
updatePassenger(e, balloonBox, false); updatePassenger(e, balloonBox, false);
} }
} }

View file

@ -176,17 +176,17 @@ public class ButterflyEntity extends AmbientEntity {
return; return;
} }
if (world.getBlockState(below).isAir() if (getWorld().getBlockState(below).isAir()
|| !world.getOtherEntities(this, getBoundingBox().expand(3), this::isAggressor).isEmpty() || !getWorld().getOtherEntities(this, getBoundingBox().expand(3), this::isAggressor).isEmpty()
|| (ticksResting++ > MAX_REST_TICKS || world.random.nextInt(500) == 0) || (ticksResting++ > MAX_REST_TICKS || getWorld().random.nextInt(500) == 0)
|| world.hasRain(below)) { || getWorld().hasRain(below)) {
setResting(false); setResting(false);
return; return;
} }
if (!world.isClient if (!getWorld().isClient
&& age % BREEDING_INTERVAL == 0 && age % BREEDING_INTERVAL == 0
&& world.random.nextInt(200) == 0 && getWorld().random.nextInt(200) == 0
&& canBreed()) { && canBreed()) {
breed(); breed();
} }
@ -205,14 +205,14 @@ public class ButterflyEntity extends AmbientEntity {
return flower; return flower;
}).or(this::findNextHoverPosition).ifPresent(this::moveTowards); }).or(this::findNextHoverPosition).ifPresent(this::moveTowards);
if (random.nextInt(100) == 0 && world.getBlockState(below).isOpaque()) { if (random.nextInt(100) == 0 && getWorld().getBlockState(below).isOpaque()) {
setResting(true); setResting(true);
} }
} }
} }
private boolean canBreed() { private boolean canBreed() {
return age > BREEDING_INTERVAL && breedingCooldown <= 0 && isResting() && world.getOtherEntities(this, getBoundingBox().expand(2), i -> { return age > BREEDING_INTERVAL && breedingCooldown <= 0 && isResting() && getWorld().getOtherEntities(this, getBoundingBox().expand(2), i -> {
return i instanceof ButterflyEntity && i.getType() == getType() && ((ButterflyEntity)i).isResting(); return i instanceof ButterflyEntity && i.getType() == getType() && ((ButterflyEntity)i).isResting();
}).size() == 1; }).size() == 1;
} }
@ -220,9 +220,9 @@ public class ButterflyEntity extends AmbientEntity {
private boolean breed() { private boolean breed() {
breedingCooldown = MAX_BREEDING_COOLDOWN; breedingCooldown = MAX_BREEDING_COOLDOWN;
ButterflyEntity copy = (ButterflyEntity)getType().create(world); ButterflyEntity copy = (ButterflyEntity)getType().create(getWorld());
copy.copyPositionAndRotation(this); copy.copyPositionAndRotation(this);
world.spawnEntity(copy); getWorld().spawnEntity(copy);
setResting(false); setResting(false);
return true; return true;
} }
@ -231,7 +231,7 @@ public class ButterflyEntity extends AmbientEntity {
// invalidate the hovering position // invalidate the hovering position
BlockPos pos = getBlockPos(); BlockPos pos = getBlockPos();
return hoveringPosition = hoveringPosition.filter(p -> world.isAir(p) return hoveringPosition = hoveringPosition.filter(p -> getWorld().isAir(p)
&& p.getY() >= 1 && p.getY() >= 1
&& random.nextInt(30) != 0 && random.nextInt(30) != 0
&& p.getSquaredDistance(pos) >= 4).or(() -> { && p.getSquaredDistance(pos) >= 4).or(() -> {
@ -249,9 +249,9 @@ public class ButterflyEntity extends AmbientEntity {
return flowerPosition; return flowerPosition;
} }
flowerPosition = flowerPosition.filter(p -> world.getBlockState(p).isIn(BlockTags.FLOWERS)).or(() -> { flowerPosition = flowerPosition.filter(p -> getWorld().getBlockState(p).isIn(BlockTags.FLOWERS)).or(() -> {
return BlockPos.streamOutwards(getBlockPos(), FLOWER_DETECTION_RANGE, FLOWER_DETECTION_RANGE, FLOWER_DETECTION_RANGE) return BlockPos.streamOutwards(getBlockPos(), FLOWER_DETECTION_RANGE, FLOWER_DETECTION_RANGE, FLOWER_DETECTION_RANGE)
.filter(p -> !visited.containsKey(p) && world.getBlockState(p).isIn(BlockTags.FLOWERS)) .filter(p -> !visited.containsKey(p) && getWorld().getBlockState(p).isIn(BlockTags.FLOWERS))
.findFirst() .findFirst()
.map(p -> { .map(p -> {
visited.put(p, (long)age - 900); visited.put(p, (long)age - 900);

View file

@ -67,7 +67,7 @@ public class CastSpellEntity extends LightEmittingEntity implements Caster<CastS
return; return;
} }
if (!getSpellSlot().forEach(spell -> Operation.ofBoolean(spell.tick(this, Situation.GROUND_ENTITY)), world.isClient)) { if (!getSpellSlot().forEach(spell -> Operation.ofBoolean(spell.tick(this, Situation.GROUND_ENTITY)), getWorld().isClient)) {
discard(); discard();
} }
} }

View file

@ -22,7 +22,7 @@ public interface DynamicLightSource {
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
void tick() { void tick() {
if (entity.world.isClient) { if (entity.getWorld().isClient) {
if (entity.isRemoved()) { if (entity.isRemoved()) {
remove(); remove();
return; return;
@ -36,12 +36,13 @@ public interface DynamicLightSource {
BlockPos currentPos = entity.getBlockPos(); BlockPos currentPos = entity.getBlockPos();
if (!currentPos.equals(lastPos) && entity.world.isChunkLoaded(currentPos)) { if (!currentPos.equals(lastPos) && entity.getWorld().isChunkLoaded(currentPos)) {
try { try {
if (lastPos != null) { if (lastPos != null) {
entity.world.getLightingProvider().checkBlock(lastPos); entity.getWorld().getLightingProvider().checkBlock(lastPos);
} }
entity.world.getLightingProvider().addLightSource(currentPos, light); // TODO: store this in the ether and inject into Chunk#forEachLightSource
//entity.getWorld().getLightingProvider().addLightSource(currentPos, light);
lastPos = currentPos; lastPos = currentPos;
} catch (Exception ignored) { } } catch (Exception ignored) { }
} }
@ -49,9 +50,9 @@ public interface DynamicLightSource {
} }
void remove() { void remove() {
if (entity.world.isClient && lastPos != null) { if (entity.getWorld().isClient && lastPos != null) {
try { try {
entity.world.getLightingProvider().checkBlock(lastPos); entity.getWorld().getLightingProvider().checkBlock(lastPos);
} catch (Exception ignored) {} } catch (Exception ignored) {}
} }
} }

View file

@ -42,7 +42,7 @@ public class EntityPhysics<T extends Entity> implements Physics, Copyable<Entity
@Override @Override
public void tick() { public void tick() {
if (isGravityNegative()) { if (isGravityNegative()) {
if (entity.getY() > entity.world.getHeight() + 64) { if (entity.getY() > entity.getWorld().getHeight() + 64) {
entity.damage(entity.getDamageSources().outOfWorld(), 4.0F); entity.damage(entity.getDamageSources().outOfWorld(), 4.0F);
} }
@ -60,7 +60,7 @@ public class EntityPhysics<T extends Entity> implements Physics, Copyable<Entity
protected void onGravitychanged() { protected void onGravitychanged() {
entity.calculateDimensions(); entity.calculateDimensions();
if (!entity.world.isClient && entity instanceof MobEntity) { if (!entity.getWorld().isClient && entity instanceof MobEntity) {
((MobEntity)entity).getNavigation().stop(); ((MobEntity)entity).getNavigation().stop();
((MobEntity)entity).setTarget(null); ((MobEntity)entity).setTarget(null);
} }
@ -92,9 +92,9 @@ public class EntityPhysics<T extends Entity> implements Physics, Copyable<Entity
MathHelper.floor(entity.getZ()) MathHelper.floor(entity.getZ())
); );
if (entity.world.getBlockState(pos).isAir()) { if (entity.getWorld().getBlockState(pos).isAir()) {
BlockPos below = pos.down(); BlockPos below = pos.down();
BlockState block = entity.world.getBlockState(below); BlockState block = entity.getWorld().getBlockState(below);
if (block.isIn(BlockTags.FENCES) || block.isIn(BlockTags.WALLS) || block.getBlock() instanceof FenceGateBlock) { if (block.isIn(BlockTags.FENCES) || block.isIn(BlockTags.WALLS) || block.getBlock() instanceof FenceGateBlock) {
entity.setOnGround(true); entity.setOnGround(true);
return below; return below;
@ -108,13 +108,13 @@ public class EntityPhysics<T extends Entity> implements Physics, Copyable<Entity
@Override @Override
public void spawnSprintingParticles() { public void spawnSprintingParticles() {
BlockState state = entity.world.getBlockState(getHeadPosition()); BlockState state = entity.getWorld().getBlockState(getHeadPosition());
if (state.getRenderType() != BlockRenderType.INVISIBLE) { if (state.getRenderType() != BlockRenderType.INVISIBLE) {
Vec3d vel = entity.getVelocity(); Vec3d vel = entity.getVelocity();
entity.world.addParticle(new BlockStateParticleEffect(ParticleTypes.BLOCK, state), entity.getWorld().addParticle(new BlockStateParticleEffect(ParticleTypes.BLOCK, state),
entity.getX() + (entity.world.random.nextFloat() - 0.5D) * entity.getWidth(), entity.getX() + (entity.getWorld().random.nextFloat() - 0.5D) * entity.getWidth(),
entity.getY() + entity.getHeight() - 0.1D, entity.getY() + entity.getHeight() - 0.1D,
entity.getZ() + (entity.world.random.nextFloat() - 0.5D) * entity.getWidth(), entity.getZ() + (entity.getWorld().random.nextFloat() - 0.5D) * entity.getWidth(),
vel.x * -4, -1.5D, vel.z * -4); vel.x * -4, -1.5D, vel.z * -4);
} }
} }

View file

@ -106,7 +106,7 @@ public class FairyEntity extends PathAwareEntity implements DynamicLightSource,
@Override @Override
public World asWorld() { public World asWorld() {
return world; return getWorld();
} }
@Override @Override
@ -138,12 +138,12 @@ public class FairyEntity extends PathAwareEntity implements DynamicLightSource,
@Override @Override
public void tick() { public void tick() {
onGround = true; setOnGround(true);
super.tick(); super.tick();
emitter.tick(); emitter.tick();
if (world.random.nextInt(20) == 3) { if (getWorld().random.nextInt(20) == 3) {
world.addParticle(new MagicParticleEffect(0xFFFFFF), getParticleX(1), getY(), getParticleZ(1), 0, 0, 0); getWorld().addParticle(new MagicParticleEffect(0xFFFFFF), getParticleX(1), getY(), getParticleZ(1), 0, 0, 0);
} }
if (age % 60 == 0) { if (age % 60 == 0) {
@ -163,15 +163,15 @@ public class FairyEntity extends PathAwareEntity implements DynamicLightSource,
setVelocity(getVelocity().multiply(0.5)); setVelocity(getVelocity().multiply(0.5));
} else { } else {
float f = 0.91f; float f = 0.91f;
if (onGround) { if (isOnGround()) {
f = world.getBlockState(getBlockPos().down()).getBlock().getSlipperiness() * 0.91f; f = getWorld().getBlockState(getBlockPos().down()).getBlock().getSlipperiness() * 0.91f;
} }
float g = 0.16277137f / (f * f * f); float g = 0.16277137f / (f * f * f);
f = 0.91f; f = 0.91f;
if (onGround) { if (isOnGround()) {
f = world.getBlockState(getBlockPos().down()).getBlock().getSlipperiness() * 0.91f; f = getWorld().getBlockState(getBlockPos().down()).getBlock().getSlipperiness() * 0.91f;
} }
updateVelocity(onGround ? 0.1f * g : 0.02f, movementInput); updateVelocity(isOnGround() ? 0.1f * g : 0.02f, movementInput);
move(MovementType.SELF, getVelocity()); move(MovementType.SELF, getVelocity());
setVelocity(getVelocity().multiply(f)); setVelocity(getVelocity().multiply(f));
} }
@ -203,13 +203,13 @@ public class FairyEntity extends PathAwareEntity implements DynamicLightSource,
@Override @Override
public boolean handleAttack(Entity attacker) { public boolean handleAttack(Entity attacker) {
if (world instanceof ServerWorld serverWorld) { if (getWorld() instanceof ServerWorld serverWorld) {
LightningEntity lightning = EntityType.LIGHTNING_BOLT.create(world); LightningEntity lightning = EntityType.LIGHTNING_BOLT.create(getWorld());
lightning.refreshPositionAfterTeleport(getX(), getY(), getZ()); lightning.refreshPositionAfterTeleport(getX(), getY(), getZ());
attacker.onStruckByLightning(serverWorld, lightning); attacker.onStruckByLightning(serverWorld, lightning);
} }
emitGameEvent(GameEvent.LIGHTNING_STRIKE); emitGameEvent(GameEvent.LIGHTNING_STRIKE);
ParticleUtils.spawnParticle(world, UParticles.LIGHTNING_BOLT, getPos(), Vec3d.ZERO); ParticleUtils.spawnParticle(getWorld(), UParticles.LIGHTNING_BOLT, getPos(), Vec3d.ZERO);
return false; return false;
} }
@ -258,13 +258,13 @@ public class FairyEntity extends PathAwareEntity implements DynamicLightSource,
@Override @Override
public boolean canStart() { public boolean canStart() {
target = assignment.get(world); target = assignment.get(getWorld());
if (target == null) { if (target == null) {
target = getMaster(); target = getMaster();
} }
if (target == null) { if (target == null) {
target = world.getClosestPlayer(FairyEntity.this, maxDistance); target = getWorld().getClosestPlayer(FairyEntity.this, maxDistance);
} }
return target != null; return target != null;
} }
@ -297,7 +297,7 @@ public class FairyEntity extends PathAwareEntity implements DynamicLightSource,
getLookControl().lookAt(target, 10, getMaxLookPitchChange()); getLookControl().lookAt(target, 10, getMaxLookPitchChange());
Path currentPath = getNavigation().getCurrentPath(); Path currentPath = getNavigation().getCurrentPath();
if (currentPath != null && target.getEyeY() < getY() - 0.5 && world.getBlockState(getBlockPos().down(3)).isAir()) { if (currentPath != null && target.getEyeY() < getY() - 0.5 && getWorld().getBlockState(getBlockPos().down(3)).isAir()) {
addVelocity(0, -speed, 0); addVelocity(0, -speed, 0);
} }
@ -307,9 +307,9 @@ public class FairyEntity extends PathAwareEntity implements DynamicLightSource,
if (distance > 100) { if (distance > 100) {
teleport( teleport(
target.getX() + world.random.nextFloat() / 2F - 0.5F, target.getX() + getWorld().random.nextFloat() / 2F - 0.5F,
target.getEyeY(), target.getEyeY(),
target.getZ() + world.random.nextFloat() / 2F - 0.5F target.getZ() + getWorld().random.nextFloat() / 2F - 0.5F
); );
setVelocity(target.getVelocity()); setVelocity(target.getVelocity());
return; return;
@ -331,7 +331,7 @@ public class FairyEntity extends PathAwareEntity implements DynamicLightSource,
if (distance <= minDistance * minDistance) { if (distance <= minDistance * minDistance) {
BlockPos pos = FuzzyPositions.localFuzz(FairyEntity.this.world.random, 5, 5); BlockPos pos = FuzzyPositions.localFuzz(getWorld().random, 5, 5);
if (pos != null) { if (pos != null) {
getNavigation().startMovingTo(pos.getX(), pos.getY(), pos.getZ(), speed); getNavigation().startMovingTo(pos.getX(), pos.getY(), pos.getZ(), speed);
} else { } else {

View file

@ -98,7 +98,7 @@ public class FloatingArtefactEntity extends Entity implements UDamageSources {
setStack(UItems.EMPTY_JAR.getDefaultStack()); setStack(UItems.EMPTY_JAR.getDefaultStack());
} }
if (world.isClient) { if (getWorld().isClient) {
float spin = getSpin(); float spin = getSpin();
if (Math.abs(spin - targetSpin) > 1.0E-5F) { if (Math.abs(spin - targetSpin) > 1.0E-5F) {
spinChange = spin - targetSpin; spinChange = spin - targetSpin;
@ -129,7 +129,7 @@ public class FloatingArtefactEntity extends Entity implements UDamageSources {
((Artifact)stack.getItem()).onArtifactTick(this); ((Artifact)stack.getItem()).onArtifactTick(this);
} }
if (world.getTime() % 80 == 0) { if (getWorld().getTime() % 80 == 0) {
State state = getState(); State state = getState();
playSound(USounds.ENTITY_ARTEFACT_AMBIENT, state.getVolume(), state.getPitch()); playSound(USounds.ENTITY_ARTEFACT_AMBIENT, state.getVolume(), state.getPitch());
} }
@ -193,7 +193,7 @@ public class FloatingArtefactEntity extends Entity implements UDamageSources {
@Override @Override
public World asWorld() { public World asWorld() {
return world; return getWorld();
} }
public enum State { public enum State {

View file

@ -49,7 +49,7 @@ public class ItemImpl implements Equine<ItemEntity> {
@Override @Override
public boolean beforeUpdate() { public boolean beforeUpdate() {
if (!entity.world.isClient) { if (!entity.getWorld().isClient) {
Race race = getSpecies(); Race race = getSpecies();
if (race != serverRace) { if (race != serverRace) {
serverRace = race; serverRace = race;
@ -67,9 +67,9 @@ public class ItemImpl implements Equine<ItemEntity> {
ClingyItem clingy = item instanceof ClingyItem ? (ClingyItem)item : ClingyItem.DEFAULT; ClingyItem clingy = item instanceof ClingyItem ? (ClingyItem)item : ClingyItem.DEFAULT;
if (clingy.isClingy(stack)) { if (clingy.isClingy(stack)) {
Random rng = entity.world.random; Random rng = entity.getWorld().random;
entity.world.addParticle(clingy.getParticleEffect((IItemEntity)entity), entity.getWorld().addParticle(clingy.getParticleEffect((IItemEntity)entity),
entity.getX() + rng.nextFloat() - 0.5, entity.getX() + rng.nextFloat() - 0.5,
entity.getY() + rng.nextFloat() - 0.5, entity.getY() + rng.nextFloat() - 0.5,
entity.getZ() + rng.nextFloat() - 0.5, entity.getZ() + rng.nextFloat() - 0.5,
@ -77,7 +77,7 @@ public class ItemImpl implements Equine<ItemEntity> {
); );
Vec3d position = entity.getPos(); Vec3d position = entity.getPos();
VecHelper.findInRange(entity, entity.world, entity.getPos(), clingy.getFollowDistance(i), e -> e instanceof PlayerEntity) VecHelper.findInRange(entity, entity.getWorld(), entity.getPos(), clingy.getFollowDistance(i), e -> e instanceof PlayerEntity)
.stream() .stream()
.sorted((a, b) -> (int)(a.getPos().distanceTo(position) - b.getPos().distanceTo(position))) .sorted((a, b) -> (int)(a.getPos().distanceTo(position) - b.getPos().distanceTo(position)))
.findFirst() .findFirst()

View file

@ -25,7 +25,7 @@ class ItemPhysics extends EntityPhysics<ItemEntity> {
float above = 0.98f; float above = 0.98f;
if (entity.verticalCollision) { if (entity.verticalCollision) {
above *= entity.world.getBlockState(entity.getBlockPos().up()).getBlock().getSlipperiness(); above *= entity.getWorld().getBlockState(entity.getBlockPos().up()).getBlock().getSlipperiness();
//above /= 9; //above /= 9;
} }
@ -36,8 +36,8 @@ class ItemPhysics extends EntityPhysics<ItemEntity> {
@Override @Override
protected void onGravitychanged() { protected void onGravitychanged() {
if (!entity.world.isClient) { if (!entity.getWorld().isClient) {
float gravity = this.getBaseGravityModifier(); float gravity = getBaseGravityModifier();
setBaseGravityModifier(gravity == 0 ? 1 : gravity * 2); setBaseGravityModifier(gravity == 0 ? 1 : gravity * 2);
setBaseGravityModifier(gravity); setBaseGravityModifier(gravity);
} }

View file

@ -170,7 +170,7 @@ public abstract class Living<T extends LivingEntity> implements Equine<T>, Caste
tickers.forEach(Tickable::tick); tickers.forEach(Tickable::tick);
try { try {
getSpellSlot().forEach(spell -> Operation.ofBoolean(spell.tick(this, Situation.BODY)), entity.world.isClient); getSpellSlot().forEach(spell -> Operation.ofBoolean(spell.tick(this, Situation.BODY)), entity.getWorld().isClient);
} catch (Exception e) { } catch (Exception e) {
Unicopia.LOGGER.error("Error whilst ticking spell on entity {}", entity, e); Unicopia.LOGGER.error("Error whilst ticking spell on entity {}", entity, e);
} }
@ -223,12 +223,12 @@ public abstract class Living<T extends LivingEntity> implements Equine<T>, Caste
} }
private void updateDragonBreath() { private void updateDragonBreath() {
if (!entity.world.isClient && (entity instanceof PlayerEntity || entity.hasCustomName())) { if (!entity.getWorld().isClient && (entity instanceof PlayerEntity || entity.hasCustomName())) {
Vec3d targetPos = entity.getRotationVector().multiply(2).add(entity.getEyePos()); Vec3d targetPos = entity.getRotationVector().multiply(2).add(entity.getEyePos());
if (entity.getWorld().isAir(BlockPos.ofFloored(targetPos))) { if (entity.getWorld().isAir(BlockPos.ofFloored(targetPos))) {
DragonBreathStore store = DragonBreathStore.get(entity.world); DragonBreathStore store = DragonBreathStore.get(entity.getWorld());
String name = entity.getDisplayName().getString(); String name = entity.getDisplayName().getString();
store.popEntries(name).forEach(stack -> { store.popEntries(name).forEach(stack -> {
Vec3d randomPos = targetPos.add(VecHelper.supply(() -> entity.getRandom().nextTriangular(0.1, 0.5))); Vec3d randomPos = targetPos.add(VecHelper.supply(() -> entity.getRandom().nextTriangular(0.1, 0.5)));
@ -238,16 +238,16 @@ public abstract class Living<T extends LivingEntity> implements Equine<T>, Caste
} }
for (int i = 0; i < 10; i++) { for (int i = 0; i < 10; i++) {
ParticleUtils.spawnParticle(entity.world, ParticleTypes.FLAME, randomPos.add( ParticleUtils.spawnParticle(entity.getWorld(), ParticleTypes.FLAME, randomPos.add(
VecHelper.supply(() -> entity.getRandom().nextTriangular(0.1, 0.5)) VecHelper.supply(() -> entity.getRandom().nextTriangular(0.1, 0.5))
), Vec3d.ZERO); ), Vec3d.ZERO);
} }
ItemEntity item = EntityType.ITEM.create(entity.world); ItemEntity item = EntityType.ITEM.create(entity.getWorld());
item.setStack(stack.payload()); item.setStack(stack.payload());
item.setPosition(randomPos); item.setPosition(randomPos);
item.world.spawnEntity(item); item.getWorld().spawnEntity(item);
entity.world.playSoundFromEntity(null, entity, USounds.ITEM_DRAGON_BREATH_ARRIVE, entity.getSoundCategory(), 1, 1); entity.getWorld().playSoundFromEntity(null, entity, USounds.ITEM_DRAGON_BREATH_ARRIVE, entity.getSoundCategory(), 1, 1);
if (stack.payload().getItem() == UItems.OATS && entity instanceof PlayerEntity player) { if (stack.payload().getItem() == UItems.OATS && entity instanceof PlayerEntity player) {
UCriteria.RECEIVE_OATS.trigger(player); UCriteria.RECEIVE_OATS.trigger(player);
@ -395,7 +395,7 @@ public abstract class Living<T extends LivingEntity> implements Equine<T>, Caste
} }
public static void transmitPassengers(@Nullable Entity entity) { public static void transmitPassengers(@Nullable Entity entity) {
if (entity != null && entity.world instanceof ServerWorld sw) { if (entity != null && entity.getWorld() instanceof ServerWorld sw) {
sw.getChunkManager().sendToNearbyPlayers(entity, new EntityPassengersSetS2CPacket(entity)); sw.getChunkManager().sendToNearbyPlayers(entity, new EntityPassengersSetS2CPacket(entity));
} }
} }

View file

@ -107,7 +107,7 @@ public class PhysicsBodyProjectileEntity extends PersistentProjectileEntity impl
@Override @Override
public void onPlayerCollision(PlayerEntity player) { public void onPlayerCollision(PlayerEntity player) {
if (world.isClient || isNoClip() || shake > 0) { if (getWorld().isClient || isNoClip() || shake > 0) {
return; return;
} }
@ -132,26 +132,26 @@ public class PhysicsBodyProjectileEntity extends PersistentProjectileEntity impl
@Override @Override
protected void onBlockHit(BlockHitResult hit) { protected void onBlockHit(BlockHitResult hit) {
BlockState state = world.getBlockState(hit.getBlockPos()); BlockState state = getWorld().getBlockState(hit.getBlockPos());
BlockState posState = getBlockStateAtPos(); BlockState posState = getBlockStateAtPos();
if (state.isIn(BlockTags.WOODEN_BUTTONS) && state.getBlock() instanceof ButtonBlock button) { if (state.isIn(BlockTags.WOODEN_BUTTONS) && state.getBlock() instanceof ButtonBlock button) {
button.powerOn(state, world, hit.getBlockPos()); button.powerOn(state, getWorld(), hit.getBlockPos());
} else if (posState.isIn(BlockTags.WOODEN_BUTTONS) && posState.getBlock() instanceof ButtonBlock button) { } else if (posState.isIn(BlockTags.WOODEN_BUTTONS) && posState.getBlock() instanceof ButtonBlock button) {
button.powerOn(posState, world, getBlockPos()); button.powerOn(posState, getWorld(), getBlockPos());
} }
if (state.getBlock() instanceof LeverBlock lever) { if (state.getBlock() instanceof LeverBlock lever) {
lever.togglePower(state, world, hit.getBlockPos()); lever.togglePower(state, getWorld(), hit.getBlockPos());
} else if (posState.getBlock() instanceof LeverBlock lever) { } else if (posState.getBlock() instanceof LeverBlock lever) {
lever.togglePower(posState, world, getBlockPos()); lever.togglePower(posState, getWorld(), getBlockPos());
} }
BlockPos belowPos = getBlockPos().down(); BlockPos belowPos = getBlockPos().down();
BlockState below = world.getBlockState(belowPos); BlockState below = getWorld().getBlockState(belowPos);
ItemStack stack = getStack(); ItemStack stack = getStack();
if (below.getBlock() instanceof HopperBlock hopper) { if (below.getBlock() instanceof HopperBlock hopper) {
BlockEntity e = world.getBlockEntity(belowPos); BlockEntity e = getWorld().getBlockEntity(belowPos);
if (e instanceof Inventory inventory) { if (e instanceof Inventory inventory) {
for (int i = 0; i < inventory.size(); i++) { for (int i = 0; i < inventory.size(); i++) {
ItemStack slotStack = inventory.getStack(i); ItemStack slotStack = inventory.getStack(i);
@ -171,18 +171,18 @@ public class PhysicsBodyProjectileEntity extends PersistentProjectileEntity impl
} }
if (getVelocity().length() > 0.2F) { if (getVelocity().length() > 0.2F) {
boolean ownerCanModify = !world.isClient && Caster.of(getOwner()).filter(pony -> pony.canModifyAt(hit.getBlockPos())).isPresent(); boolean ownerCanModify = !getWorld().isClient && Caster.of(getOwner()).filter(pony -> pony.canModifyAt(hit.getBlockPos())).isPresent();
if (ownerCanModify && world.getGameRules().getBoolean(GameRules.DO_MOB_GRIEFING)) { if (ownerCanModify && getWorld().getGameRules().getBoolean(GameRules.DO_MOB_GRIEFING)) {
if ((!isBouncy() || world.random.nextInt(200) == 0) && state.isIn(UTags.FRAGILE)) { if ((!isBouncy() || getWorld().random.nextInt(200) == 0) && state.isIn(UTags.FRAGILE)) {
world.breakBlock(hit.getBlockPos(), true); getWorld().breakBlock(hit.getBlockPos(), true);
} }
} }
if (isBouncy()) { if (isBouncy()) {
Direction.Axis side = hit.getSide().getAxis(); Direction.Axis side = hit.getSide().getAxis();
double randomisation = ((world.random.nextFloat() - 0.5F) / 5); double randomisation = ((getWorld().random.nextFloat() - 0.5F) / 5);
double inflectionAmount = randomisation + -0.4; double inflectionAmount = randomisation + -0.4;
double deflectionAmount = randomisation + 0.3; double deflectionAmount = randomisation + 0.3;
@ -200,9 +200,9 @@ public class PhysicsBodyProjectileEntity extends PersistentProjectileEntity impl
} }
addVelocity( addVelocity(
((world.random.nextFloat() - 0.5F) / 5), ((getWorld().random.nextFloat() - 0.5F) / 5),
((world.random.nextFloat() - 0.5F) / 5), ((getWorld().random.nextFloat() - 0.5F) / 5),
((world.random.nextFloat() - 0.5F) / 5) ((getWorld().random.nextFloat() - 0.5F) / 5)
); );
} else { } else {
super.onBlockHit(hit); super.onBlockHit(hit);
@ -212,7 +212,7 @@ public class PhysicsBodyProjectileEntity extends PersistentProjectileEntity impl
} }
setSound(state.getSoundGroup().getStepSound()); setSound(state.getSoundGroup().getStepSound());
world.playSoundFromEntity(null, this, state.getSoundGroup().getStepSound(), SoundCategory.BLOCKS, 1, 1); getWorld().playSoundFromEntity(null, this, state.getSoundGroup().getStepSound(), SoundCategory.BLOCKS, 1, 1);
emitGameEvent(GameEvent.STEP); emitGameEvent(GameEvent.STEP);
} }

View file

@ -58,7 +58,7 @@ public class SpellbookEntity extends MobEntity {
if (player instanceof ServerPlayerEntity recipient if (player instanceof ServerPlayerEntity recipient
&& player.currentScreenHandler instanceof SpellbookScreenHandler book && player.currentScreenHandler instanceof SpellbookScreenHandler book
&& getUuid().equals(book.entityId)) { && getUuid().equals(book.entityId)) {
Channel.SERVER_SPELLBOOK_UPDATE.sendToPlayer(new MsgSpellbookStateChanged<PlayerEntity>(book.syncId, state), recipient); Channel.SERVER_SPELLBOOK_UPDATE.sendToPlayer(new MsgSpellbookStateChanged<>(book.syncId, state), recipient);
} }
}); });
}); });
@ -143,7 +143,7 @@ public class SpellbookEntity extends MobEntity {
jumping = awake && isTouchingWater(); jumping = awake && isTouchingWater();
super.tick(); super.tick();
if (world.isClient && isOpen()) { if (getWorld().isClient && isOpen()) {
for (int offX = -2; offX <= 1; ++offX) { for (int offX = -2; offX <= 1; ++offX) {
for (int offZ = -2; offZ <= 1; ++offZ) { for (int offZ = -2; offZ <= 1; ++offZ) {
if (offX > -1 && offX < 1 && offZ == -1) { if (offX > -1 && offX < 1 && offZ == -1) {
@ -152,7 +152,7 @@ public class SpellbookEntity extends MobEntity {
if (random.nextInt(320) == 0) { if (random.nextInt(320) == 0) {
for (int offY = 0; offY <= 1; ++offY) { for (int offY = 0; offY <= 1; ++offY) {
world.addParticle(ParticleTypes.ENCHANT, getWorld().addParticle(ParticleTypes.ENCHANT,
getX(), getY(), getZ(), getX(), getY(), getZ(),
offX/2F + random.nextFloat(), offX/2F + random.nextFloat(),
offY/2F - random.nextFloat() + 0.5f, offY/2F - random.nextFloat() + 0.5f,
@ -165,7 +165,7 @@ public class SpellbookEntity extends MobEntity {
} }
if (awake) { if (awake) {
world.getOtherEntities(this, getBoundingBox().expand(2), EquinePredicates.PLAYER_UNICORN.and(e -> e instanceof PlayerEntity)).stream().findFirst().ifPresent(player -> { getWorld().getOtherEntities(this, getBoundingBox().expand(2), EquinePredicates.PLAYER_UNICORN.and(e -> e instanceof PlayerEntity)).stream().findFirst().ifPresent(player -> {
setBored(false); setBored(false);
if (isOpen()) { if (isOpen()) {
Vec3d diff = player.getPos().subtract(getPos()); Vec3d diff = player.getPos().subtract(getPos());
@ -176,15 +176,15 @@ public class SpellbookEntity extends MobEntity {
} }
}); });
if (!world.isClient) { if (!getWorld().isClient) {
if (activeTicks > 0 && --activeTicks <= 0) { if (activeTicks > 0 && --activeTicks <= 0) {
setBored(true); setBored(true);
} }
} }
} }
if (!world.isClient && world.random.nextInt(30) == 0) { if (!getWorld().isClient && getWorld().random.nextInt(30) == 0) {
float celest = world.getSkyAngle(1) * 4; float celest = getWorld().getSkyAngle(1) * 4;
boolean daytime = celest > 3 || celest < 1; boolean daytime = celest > 3 || celest < 1;
@ -198,14 +198,14 @@ public class SpellbookEntity extends MobEntity {
@Override @Override
public boolean damage(DamageSource source, float amount) { public boolean damage(DamageSource source, float amount) {
if (!world.isClient) { if (!getWorld().isClient) {
remove(Entity.RemovalReason.KILLED); remove(Entity.RemovalReason.KILLED);
BlockSoundGroup sound = BlockSoundGroup.WOOD; BlockSoundGroup sound = BlockSoundGroup.WOOD;
world.playSound(getX(), getY(), getZ(), sound.getBreakSound(), SoundCategory.BLOCKS, sound.getVolume(), sound.getPitch(), true); getWorld().playSound(getX(), getY(), getZ(), sound.getBreakSound(), SoundCategory.BLOCKS, sound.getVolume(), sound.getPitch(), true);
if (world.getGameRules().getBoolean(GameRules.DO_TILE_DROPS)) { if (getWorld().getGameRules().getBoolean(GameRules.DO_TILE_DROPS)) {
dropStack(getPickBlockStack(), 1); dropStack(getPickBlockStack(), 1);
} }
} }
@ -232,7 +232,7 @@ public class SpellbookEntity extends MobEntity {
@Override @Override
public ScreenHandler createMenu(int syncId, PlayerInventory inv, PlayerEntity player) { public ScreenHandler createMenu(int syncId, PlayerInventory inv, PlayerEntity player) {
return new SpellbookScreenHandler(syncId, inv, ScreenHandlerContext.create(world, getBlockPos()), state, getUuid()); return new SpellbookScreenHandler(syncId, inv, ScreenHandlerContext.create(getWorld(), getBlockPos()), state, getUuid());
} }
@Override @Override

View file

@ -87,7 +87,7 @@ public interface UTradeOffers {
} }
private static Item random(Entity e, TagKey<Item> item, Random rng) { private static Item random(Entity e, TagKey<Item> item, Random rng) {
return RegistryUtils.entriesForTag(e.world, item).getRandom(rng).get().value(); return RegistryUtils.entriesForTag(e.getWorld(), item).getRandom(rng).get().value();
} }
static class JarredItemTradeOfferFactory implements TradeOffers.Factory { static class JarredItemTradeOfferFactory implements TradeOffers.Factory {

View file

@ -52,7 +52,7 @@ public class DynamicTargetGoal extends Goal {
mob.setTarget(null); mob.setTarget(null);
} }
target = VecHelper.findInRange(mob, mob.world, mob.getPos(), 26, test) target = VecHelper.findInRange(mob, mob.getWorld(), mob.getPos(), 26, test)
.stream() .stream()
.sorted(Comparator.comparing(e -> mob.distanceTo(e))) .sorted(Comparator.comparing(e -> mob.distanceTo(e)))
.findFirst(); .findFirst();

View file

@ -66,11 +66,11 @@ public class EatMuffinGoal extends BreakHeartGoal {
eatingStarted = true; eatingStarted = true;
if (target instanceof PhysicsBodyProjectileEntity projectile) { if (target instanceof PhysicsBodyProjectileEntity projectile) {
mob.eatFood(mob.world, projectile.getStack()); mob.eatFood(mob.getWorld(), projectile.getStack());
projectile.discard(); projectile.discard();
if (mob instanceof AnimalEntity animal) { if (mob instanceof AnimalEntity animal) {
if (mob.world.random.nextInt(12) == 0) { if (mob.getWorld().random.nextInt(12) == 0) {
Entity player = ((PhysicsBodyProjectileEntity) target).getOwner(); Entity player = ((PhysicsBodyProjectileEntity) target).getOwner();
animal.lovePlayer(player instanceof PlayerEntity ? (PlayerEntity)player : null); animal.lovePlayer(player instanceof PlayerEntity ? (PlayerEntity)player : null);

View file

@ -62,11 +62,11 @@ public class WantItTakeItGoal extends BreakHeartGoal {
mob.tryAttack(target); mob.tryAttack(target);
mob.swingHand(Hand.MAIN_HAND); mob.swingHand(Hand.MAIN_HAND);
if (mob.world.random.nextInt(20) == 0) { if (mob.getWorld().random.nextInt(20) == 0) {
for (EquipmentSlot slot : EquipmentSlot.values()) { for (EquipmentSlot slot : EquipmentSlot.values()) {
ItemStack stack = ((LivingEntity)target).getEquippedStack(slot); ItemStack stack = ((LivingEntity)target).getEquippedStack(slot);
if (EnchantmentHelper.getLevel(UEnchantments.WANT_IT_NEED_IT, stack) > 0) { if (EnchantmentHelper.getLevel(UEnchantments.WANT_IT_NEED_IT, stack) > 0) {
AwaitTickQueue.scheduleTask(mob.world, w -> { AwaitTickQueue.scheduleTask(mob.getWorld(), w -> {
target.equipStack(slot, ItemStack.EMPTY); target.equipStack(slot, ItemStack.EMPTY);
mob.tryEquip(stack); mob.tryEquip(stack);
}); });
@ -76,7 +76,7 @@ public class WantItTakeItGoal extends BreakHeartGoal {
} }
} }
} else if (target instanceof ItemEntity) { } else if (target instanceof ItemEntity) {
AwaitTickQueue.scheduleTask(mob.world, w -> { AwaitTickQueue.scheduleTask(mob.getWorld(), w -> {
ItemEntity item = (ItemEntity)target; ItemEntity item = (ItemEntity)target;
ItemStack stack = item.getStack(); ItemStack stack = item.getStack();

View file

@ -9,7 +9,7 @@ public class BeeBehaviour extends EntityBehaviour<BeeEntity> {
@Override @Override
public BeeEntity onCreate(BeeEntity entity, EntityAppearance context, boolean replaceOld) { public BeeEntity onCreate(BeeEntity entity, EntityAppearance context, boolean replaceOld) {
super.onCreate(entity, context, replaceOld); super.onCreate(entity, context, replaceOld);
if (replaceOld && entity.world.isClient) { if (replaceOld && entity.getWorld().isClient) {
InteractionManager.instance().playLoopingSound(entity, InteractionManager.SOUND_BEE, entity.getId()); InteractionManager.instance().playLoopingSound(entity, InteractionManager.SOUND_BEE, entity.getId());
} }
return entity; return entity;

View file

@ -67,19 +67,19 @@ public class BlazeBehaviour extends EntityBehaviour<BlazeEntity> {
if (fireballsFired > 0) { if (fireballsFired > 0) {
if (!entity.isSilent()) { if (!entity.isSilent()) {
entity.world.syncWorldEvent(null, WorldEvents.BLAZE_SHOOTS, entity.getBlockPos(), 0); entity.getWorld().syncWorldEvent(null, WorldEvents.BLAZE_SHOOTS, entity.getBlockPos(), 0);
} }
Vec3d rot = player.asEntity().getRotationVec(1); Vec3d rot = player.asEntity().getRotationVec(1);
for (int i = 0; i < 1; ++i) { for (int i = 0; i < 1; ++i) {
SmallFireballEntity proj = new SmallFireballEntity(entity.world, player.asEntity(), SmallFireballEntity proj = new SmallFireballEntity(entity.getWorld(), player.asEntity(),
rot.getX() + entity.getRandom().nextGaussian(), rot.getX() + entity.getRandom().nextGaussian(),
rot.getY(), rot.getY(),
rot.getZ() + entity.getRandom().nextGaussian() rot.getZ() + entity.getRandom().nextGaussian()
); );
proj.setPosition(proj.getX(), entity.getBodyY(0.5D) + 0.5D, proj.getZ()); proj.setPosition(proj.getX(), entity.getBodyY(0.5D) + 0.5D, proj.getZ());
entity.world.spawnEntity(proj); entity.getWorld().spawnEntity(proj);
} }
} }
} else if (!firing) { } else if (!firing) {

View file

@ -36,7 +36,7 @@ public class ChickenBehaviour extends EntityBehaviour<ChickenEntity> {
player.asEntity().getInventory().removeStack(slot, 1); player.asEntity().getInventory().removeStack(slot, 1);
entity.playSound(SoundEvents.ENTITY_CHICKEN_EGG, entity.playSound(SoundEvents.ENTITY_CHICKEN_EGG,
1, 1,
(entity.world.random.nextFloat() - entity.world.random.nextFloat()) * 0.2F + 4 (entity.getWorld().random.nextFloat() - entity.getWorld().random.nextFloat()) * 0.2F + 4
); );
entity.equipStack(EquipmentSlot.OFFHAND, egg); entity.equipStack(EquipmentSlot.OFFHAND, egg);
} }

View file

@ -110,7 +110,7 @@ public class EntityBehaviour<T extends Entity> {
((EntityDuck)to).setRemovalReason(from.getRemovalReason()); ((EntityDuck)to).setRemovalReason(from.getRemovalReason());
to.setOnGround(from.isOnGround()); to.setOnGround(from.isOnGround());
if (!from.world.isClient) { if (!from.getWorld().isClient) {
// player collision is not known on the server // player collision is not known on the server
boolean clip = to.noClip; boolean clip = to.noClip;
to.noClip = false; to.noClip = false;
@ -134,7 +134,7 @@ public class EntityBehaviour<T extends Entity> {
BlockPos pos = BlockPos.ofFloored(x, y, z); BlockPos pos = BlockPos.ofFloored(x, y, z);
if (!from.world.isAir(pos) && !from.world.isWater(pos)) { if (!from.getWorld().isAir(pos) && !from.getWorld().isWater(pos)) {
y++; y++;
} }

View file

@ -30,7 +30,7 @@ public interface EntitySwap {
Swap<Entity> YAW = Swap.of(Entity::getYaw, Entity::setYaw); Swap<Entity> YAW = Swap.of(Entity::getYaw, Entity::setYaw);
Swap<Entity> HEAD_YAW = Swap.of(Entity::getHeadYaw, (entity, headYaw) -> { Swap<Entity> HEAD_YAW = Swap.of(Entity::getHeadYaw, (entity, headYaw) -> {
entity.setHeadYaw(headYaw); entity.setHeadYaw(headYaw);
if (entity.world instanceof ServerWorld sw) { if (entity.getWorld() instanceof ServerWorld sw) {
sw.getChunkManager().sendToNearbyPlayers(entity, new EntitySetHeadYawS2CPacket(entity, (byte)MathHelper.floor(entity.getHeadYaw() * 256F / 360F))); sw.getChunkManager().sendToNearbyPlayers(entity, new EntitySetHeadYawS2CPacket(entity, (byte)MathHelper.floor(entity.getHeadYaw() * 256F / 360F)));
} }
}); });

View file

@ -48,7 +48,7 @@ public class FallingBlockBehaviour extends EntityBehaviour<FallingBlockEntity> {
BlockState state = entity.getBlockState(); BlockState state = entity.getBlockState();
if (state.getBlock() instanceof FallingBlock fb) { if (state.getBlock() instanceof FallingBlock fb) {
fb.onLanding(entity.world, entity.getBlockPos(), state, state, entity); fb.onLanding(entity.getWorld(), entity.getBlockPos(), state, state, entity);
} }
} }
} }
@ -73,9 +73,9 @@ public class FallingBlockBehaviour extends EntityBehaviour<FallingBlockEntity> {
BlockState lowerState = state.with(DoorBlock.HALF, DoubleBlockHalf.LOWER); BlockState lowerState = state.with(DoorBlock.HALF, DoubleBlockHalf.LOWER);
BlockState upperState = state.with(DoorBlock.HALF, DoubleBlockHalf.UPPER); BlockState upperState = state.with(DoorBlock.HALF, DoubleBlockHalf.UPPER);
context.attachExtraEntity(configure(MixinFallingBlockEntity.createInstance(entity.world, entity.getX(), entity.getY(), entity.getZ(), upperState), block)); context.attachExtraEntity(configure(MixinFallingBlockEntity.createInstance(entity.getWorld(), entity.getX(), entity.getY(), entity.getZ(), upperState), block));
return configure(MixinFallingBlockEntity.createInstance(entity.world, entity.getX(), entity.getY() + 1, entity.getZ(), lowerState), block); return configure(MixinFallingBlockEntity.createInstance(entity.getWorld(), entity.getX(), entity.getY() + 1, entity.getZ(), lowerState), block);
} }
if (block instanceof BlockEntityProvider bep) { if (block instanceof BlockEntityProvider bep) {
@ -90,10 +90,10 @@ public class FallingBlockBehaviour extends EntityBehaviour<FallingBlockEntity> {
BlockState state = entity.getBlockState(); BlockState state = entity.getBlockState();
if (state.contains(Properties.WATERLOGGED)) { if (state.contains(Properties.WATERLOGGED)) {
boolean logged = entity.world.isWater(entity.getBlockPos()); boolean logged = entity.getWorld().isWater(entity.getBlockPos());
if (state.get(Properties.WATERLOGGED) != logged) { if (state.get(Properties.WATERLOGGED) != logged) {
entity = MixinFallingBlockEntity.createInstance(entity.world, entity.getX(), entity.getY(), entity.getZ(), state.with(Properties.WATERLOGGED, logged)); entity = MixinFallingBlockEntity.createInstance(entity.getWorld(), entity.getX(), entity.getY(), entity.getZ(), state.with(Properties.WATERLOGGED, logged));
spell.getDisguise().setAppearance(entity); spell.getDisguise().setAppearance(entity);
return; return;
} }
@ -112,7 +112,7 @@ public class FallingBlockBehaviour extends EntityBehaviour<FallingBlockEntity> {
be.onSyncedBlockEvent(1, isSneakingOnGround(source) ? 1 : 0); be.onSyncedBlockEvent(1, isSneakingOnGround(source) ? 1 : 0);
} }
be.setWorld(entity.world); be.setWorld(entity.getWorld());
((Positioned)be).setPos(entity.getBlockPos()); ((Positioned)be).setPos(entity.getBlockPos());
ceb.tick(); ceb.tick();
be.setWorld(null); be.setWorld(null);

View file

@ -19,16 +19,16 @@ public class GhastBehaviour extends MobBehaviour<GhastEntity> {
if (sneaking) { if (sneaking) {
if (!entity.isSilent()) { if (!entity.isSilent()) {
entity.world.syncWorldEvent(null, WorldEvents.GHAST_WARNS, entity.getBlockPos(), 0); entity.getWorld().syncWorldEvent(null, WorldEvents.GHAST_WARNS, entity.getBlockPos(), 0);
} }
} else { } else {
if (!entity.isSilent()) { if (!entity.isSilent()) {
entity.world.syncWorldEvent(null, WorldEvents.GHAST_SHOOTS, entity.getBlockPos(), 0); entity.getWorld().syncWorldEvent(null, WorldEvents.GHAST_SHOOTS, entity.getBlockPos(), 0);
} }
Vec3d rot = player.asEntity().getRotationVec(1); Vec3d rot = player.asEntity().getRotationVec(1);
FireballEntity proj = new FireballEntity(entity.world, player.asEntity(), FireballEntity proj = new FireballEntity(entity.getWorld(), player.asEntity(),
rot.getX(), rot.getX(),
rot.getY(), rot.getY(),
rot.getZ(), rot.getZ(),
@ -40,7 +40,7 @@ public class GhastBehaviour extends MobBehaviour<GhastEntity> {
proj.getZ() + rot.z * 4 proj.getZ() + rot.z * 4
); );
entity.world.spawnEntity(proj); entity.getWorld().spawnEntity(proj);
} }
} }
} }

View file

@ -11,7 +11,7 @@ public class MinecartBehaviour extends EntityBehaviour<AbstractMinecartEntity> {
@Override @Override
public AbstractMinecartEntity onCreate(AbstractMinecartEntity entity, EntityAppearance context, boolean replaceOld) { public AbstractMinecartEntity onCreate(AbstractMinecartEntity entity, EntityAppearance context, boolean replaceOld) {
super.onCreate(entity, context, replaceOld); super.onCreate(entity, context, replaceOld);
if (replaceOld && entity.world.isClient) { if (replaceOld && entity.getWorld().isClient) {
InteractionManager.instance().playLoopingSound(entity, InteractionManager.SOUND_MINECART, entity.getId()); InteractionManager.instance().playLoopingSound(entity, InteractionManager.SOUND_MINECART, entity.getId());
} }
return entity; return entity;

View file

@ -34,7 +34,7 @@ public class MobBehaviour<T extends MobEntity> extends EntityBehaviour<T> {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
protected T getDummy(T entity) { protected T getDummy(T entity) {
if (dummy == null) { if (dummy == null) {
dummy = (T)entity.getType().create(entity.world); dummy = (T)entity.getType().create(entity.getWorld());
} }
return dummy; return dummy;

View file

@ -28,7 +28,7 @@ public class RangedAttackBehaviour<T extends Entity & RangedAttackMob> extends E
if (player.sneakingChanged() && isSneakingOnGround(player)) { if (player.sneakingChanged() && isSneakingOnGround(player)) {
ProjectileEntity spit = projectileSupplier.apply(entity.world, entity); ProjectileEntity spit = projectileSupplier.apply(entity.getWorld(), entity);
Vec3d rot = player.asEntity().getRotationVec(1); Vec3d rot = player.asEntity().getRotationVec(1);
@ -36,10 +36,10 @@ public class RangedAttackBehaviour<T extends Entity & RangedAttackMob> extends E
spit.setOwner(player.asEntity()); spit.setOwner(player.asEntity());
if (!entity.isSilent()) { if (!entity.isSilent()) {
SoundEmitter.playSoundAt(entity, sound, 1, 1 + (entity.world.random.nextFloat() - entity.world.random.nextFloat()) * 0.2F); SoundEmitter.playSoundAt(entity, sound, 1, 1 + (entity.getWorld().random.nextFloat() - entity.getWorld().random.nextFloat()) * 0.2F);
} }
entity.world.spawnEntity(spit); entity.getWorld().spawnEntity(spit);
} }
} }
} }

View file

@ -22,17 +22,17 @@ public class SheepBehaviour extends EntityBehaviour<SheepEntity> {
if (player.sneakingChanged()) { if (player.sneakingChanged()) {
BlockPos pos = entity.getBlockPos().down(); BlockPos pos = entity.getBlockPos().down();
BlockState state = entity.world.getBlockState(pos); BlockState state = entity.getWorld().getBlockState(pos);
boolean grass = state.isOf(Blocks.GRASS_BLOCK); boolean grass = state.isOf(Blocks.GRASS_BLOCK);
if (player.asEntity().isSneaking()) { if (player.asEntity().isSneaking()) {
if (grass && entity.world.isClient && entity.isSheared()) { if (grass && entity.getWorld().isClient && entity.isSheared()) {
entity.handleStatus((byte)10); entity.handleStatus((byte)10);
} }
} else { } else {
if (entity.isSheared() && grass) { if (entity.isSheared() && grass) {
entity.world.syncWorldEvent(WorldEvents.BLOCK_BROKEN, pos, Block.getRawIdFromState(state)); entity.getWorld().syncWorldEvent(WorldEvents.BLOCK_BROKEN, pos, Block.getRawIdFromState(state));
entity.world.setBlockState(pos, Blocks.DIRT.getDefaultState(), 2); entity.getWorld().setBlockState(pos, Blocks.DIRT.getDefaultState(), 2);
entity.onEatingGrass(); entity.onEatingGrass();
} else if (!entity.isSheared()) { } else if (!entity.isSheared()) {
@ -41,7 +41,7 @@ public class SheepBehaviour extends EntityBehaviour<SheepEntity> {
player.asEntity().playSound(SoundEvents.ENTITY_SHEEP_SHEAR, 1, 1); player.asEntity().playSound(SoundEvents.ENTITY_SHEEP_SHEAR, 1, 1);
entity.setSheared(true); entity.setSheared(true);
Random rng = entity.world.random; Random rng = entity.getWorld().random;
PlayerInventory inv = player.asEntity().getInventory(); PlayerInventory inv = player.asEntity().getInventory();
int dropAmount = rng.nextInt(3); int dropAmount = rng.nextInt(3);

View file

@ -24,7 +24,7 @@ public class ShulkerBehaviour extends EntityBehaviour<ShulkerEntity> {
Direction attachmentFace = shulker.getAttachedFace(); Direction attachmentFace = shulker.getAttachedFace();
BlockPos pos = shulker.getBlockPos().offset(attachmentFace); BlockPos pos = shulker.getBlockPos().offset(attachmentFace);
boolean noGravity = !shulker.isOnGround() && !shulker.world.isAir(pos) boolean noGravity = !shulker.isOnGround() && !shulker.getWorld().isAir(pos)
&& (attachmentFace == Direction.UP || attachmentFace.getAxis() != Axis.Y); && (attachmentFace == Direction.UP || attachmentFace.getAxis() != Axis.Y);
source.asEntity().setNoGravity(noGravity); source.asEntity().setNoGravity(noGravity);
@ -54,7 +54,7 @@ public class ShulkerBehaviour extends EntityBehaviour<ShulkerEntity> {
if (player.sneakingChanged()) { if (player.sneakingChanged()) {
mx.callSetPeekAmount((int)(peekAmount / 0.01F)); mx.callSetPeekAmount((int)(peekAmount / 0.01F));
} else if (peekAmount > 0.2 && mx.callGetPeekAmount() == 0) { } else if (peekAmount > 0.2 && mx.callGetPeekAmount() == 0) {
if (shulker.isAlive() && shulker.world.random.nextInt(1000) < shulker.ambientSoundChance++) { if (shulker.isAlive() && shulker.getWorld().random.nextInt(1000) < shulker.ambientSoundChance++) {
shulker.ambientSoundChance = -shulker.getMinAmbientSoundDelay(); shulker.ambientSoundChance = -shulker.getMinAmbientSoundDelay();
shulker.playSound(SoundEvents.ENTITY_SHULKER_AMBIENT, 1, 1); shulker.playSound(SoundEvents.ENTITY_SHULKER_AMBIENT, 1, 1);
} }

View file

@ -14,10 +14,10 @@ public class SilverfishBehaviour extends EntityBehaviour<SilverfishEntity> {
public void update(Pony player, SilverfishEntity entity, Disguise spell) { public void update(Pony player, SilverfishEntity entity, Disguise spell) {
if (!player.isClient() && player.sneakingChanged() && player.asEntity().isSneaking()) { if (!player.isClient() && player.sneakingChanged() && player.asEntity().isSneaking()) {
BlockPos pos = entity.getBlockPos().down(); BlockPos pos = entity.getBlockPos().down();
BlockState state = entity.world.getBlockState(pos); BlockState state = entity.getWorld().getBlockState(pos);
if (StateMaps.SILVERFISH_AFFECTED.convert(entity.world, pos)) { if (StateMaps.SILVERFISH_AFFECTED.convert(entity.getWorld(), pos)) {
entity.world.syncWorldEvent(WorldEvents.BLOCK_BROKEN, pos, Block.getRawIdFromState(state)); entity.getWorld().syncWorldEvent(WorldEvents.BLOCK_BROKEN, pos, Block.getRawIdFromState(state));
} }
} }
} }

View file

@ -18,7 +18,7 @@ public class SpellcastingIllagerBehaviour extends EntityBehaviour<SpellcastingIl
static void setSpell(Pony player, SpellcastingIllagerEntity entity, Disguise s) { static void setSpell(Pony player, SpellcastingIllagerEntity entity, Disguise s) {
if (player.asEntity().isSneaking()) { if (player.asEntity().isSneaking()) {
SpellcastingIllagerEntity.Spell[] spells = SpellcastingIllagerEntity.Spell.values(); SpellcastingIllagerEntity.Spell[] spells = SpellcastingIllagerEntity.Spell.values();
SpellcastingIllagerEntity.Spell spell = spells[entity.world.random.nextInt(spells.length - 1) + 1]; SpellcastingIllagerEntity.Spell spell = spells[entity.getWorld().random.nextInt(spells.length - 1) + 1];
entity.setSpell(spell); entity.setSpell(spell);
entity.setTarget(entity); entity.setTarget(entity);

View file

@ -11,7 +11,7 @@ public class TraderBehaviour extends EntityBehaviour<MerchantEntity> {
if (pony.sneakingChanged() && pony.asEntity().isSneaking()) { if (pony.sneakingChanged() && pony.asEntity().isSneaking()) {
entity.setHeadRollingTimeLeft(40); entity.setHeadRollingTimeLeft(40);
if (!entity.world.isClient()) { if (!entity.getWorld().isClient()) {
entity.playSound(SoundEvents.ENTITY_VILLAGER_NO, 1, 1); entity.playSound(SoundEvents.ENTITY_VILLAGER_NO, 1, 1);
} }
} }

View file

@ -34,7 +34,7 @@ public class EntityCollisions {
} else if (entity instanceof FallingBlockEntity) { } else if (entity instanceof FallingBlockEntity) {
BlockPos pos = entity.getBlockPos(); BlockPos pos = entity.getBlockPos();
output.accept(((FallingBlockEntity) entity).getBlockState() output.accept(((FallingBlockEntity) entity).getBlockState()
.getCollisionShape(entity.world, entity.getBlockPos(), context) .getCollisionShape(entity.getWorld(), entity.getBlockPos(), context)
.offset(pos.getX(), pos.getY(), pos.getZ()) .offset(pos.getX(), pos.getY(), pos.getZ())
); );
} }

View file

@ -25,21 +25,21 @@ public class ButterfingersStatusEffect extends StatusEffect {
amplifier = MathHelper.clamp(amplifier, 0, 5); amplifier = MathHelper.clamp(amplifier, 0, 5);
final int scale = 500 + (int)(((5 - amplifier) / 5F) * 900); final int scale = 500 + (int)(((5 - amplifier) / 5F) * 900);
if (entity.world.random.nextInt(scale / 4) == 0) { if (entity.getWorld().random.nextInt(scale / 4) == 0) {
applyInstantEffect(null, null, entity, amplifier, entity.world.random.nextInt(scale)); applyInstantEffect(null, null, entity, amplifier, entity.getWorld().random.nextInt(scale));
} }
} }
@Override @Override
public void applyInstantEffect(@Nullable Entity source, @Nullable Entity attacker, LivingEntity target, int amplifier, double proximity) { public void applyInstantEffect(@Nullable Entity source, @Nullable Entity attacker, LivingEntity target, int amplifier, double proximity) {
if (target.world.isClient) { if (target.getWorld().isClient) {
return; return;
} }
if (target instanceof ServerPlayerEntity player) { if (target instanceof ServerPlayerEntity player) {
if (player.dropSelectedItem(proximity < 1)) { if (player.dropSelectedItem(proximity < 1)) {
player.world.playSound(null, player.getBlockPos(), SoundEvents.BLOCK_HONEY_BLOCK_SLIDE, player.getSoundCategory()); player.getWorld().playSound(null, player.getBlockPos(), SoundEvents.BLOCK_HONEY_BLOCK_SLIDE, player.getSoundCategory());
PlayerInventory inventory = player.getInventory(); PlayerInventory inventory = player.getInventory();
player.networkHandler.sendPacket(new ScreenHandlerSlotUpdateS2CPacket(-2, 0, inventory.selectedSlot, inventory.getStack(inventory.selectedSlot))); player.networkHandler.sendPacket(new ScreenHandlerSlotUpdateS2CPacket(-2, 0, inventory.selectedSlot, inventory.getStack(inventory.selectedSlot)));
} }
@ -48,7 +48,7 @@ public class ButterfingersStatusEffect extends StatusEffect {
if (!stack.isEmpty()) { if (!stack.isEmpty()) {
target.setStackInHand(Hand.MAIN_HAND, ItemStack.EMPTY); target.setStackInHand(Hand.MAIN_HAND, ItemStack.EMPTY);
target.dropStack(stack); target.dropStack(stack);
target.world.playSound(null, target.getBlockPos(), SoundEvents.BLOCK_HONEY_BLOCK_SLIDE, target.getSoundCategory()); target.getWorld().playSound(null, target.getBlockPos(), SoundEvents.BLOCK_HONEY_BLOCK_SLIDE, target.getSoundCategory());
} }
} }
} }

View file

@ -28,35 +28,29 @@ public class CorruptInfluenceStatusEffect extends StatusEffect {
@Override @Override
public void applyUpdateEffect(LivingEntity entity, int amplifier) { public void applyUpdateEffect(LivingEntity entity, int amplifier) {
if (entity.world.isClient) { if (entity.getWorld().isClient) {
return; return;
} }
if (entity instanceof HostileEntity) { if (entity instanceof HostileEntity) {
int nearby = 0; int nearby = entity.getWorld().getOtherEntities(entity, entity.getBoundingBox().expand(40), i -> i.getType() == entity.getType()).size();
for (Entity i : entity.world.getOtherEntities(entity, entity.getBoundingBox().expand(40))) {
if (i.getType() == entity.getType()) {
nearby++;
}
}
if (nearby > 1) { if (nearby > 1) {
if (Equine.of(entity).filter(eq -> eq instanceof Owned<?> o && o.getMaster() != null).isPresent()) { if (Equine.of(entity).filter(eq -> eq instanceof Owned<?> o && o.getMaster() != null).isPresent()) {
return; return;
} }
if (entity.world.random.nextInt(2000) != 0) { if (entity.getWorld().random.nextInt(2000) != 0) {
return; return;
} }
} else if (entity.world.random.nextInt(200) != 0) { } else if (entity.getWorld().random.nextInt(200) != 0) {
return; return;
} }
HostileEntity mob = (HostileEntity)entity; HostileEntity mob = (HostileEntity)entity;
HostileEntity clone = (HostileEntity)mob.getType().create(mob.world); HostileEntity clone = (HostileEntity)mob.getType().create(mob.getWorld());
clone.copyPositionAndRotation(entity); clone.copyPositionAndRotation(entity);
Equine.of(clone).ifPresent(eq -> { Equine.of(clone).ifPresent(eq -> {
@ -64,10 +58,10 @@ public class CorruptInfluenceStatusEffect extends StatusEffect {
((Owned.Mutable<Entity>)eq).setMaster(mob); ((Owned.Mutable<Entity>)eq).setMaster(mob);
} }
}); });
mob.world.spawnEntity(clone); mob.getWorld().spawnEntity(clone);
if (!mob.isSilent()) { if (!mob.isSilent()) {
mob.world.syncWorldEvent((PlayerEntity)null, WorldEvents.ZOMBIE_INFECTS_VILLAGER, mob.getBlockPos(), 0); mob.getWorld().syncWorldEvent((PlayerEntity)null, WorldEvents.ZOMBIE_INFECTS_VILLAGER, mob.getBlockPos(), 0);
} }
} else if (entity.age % 2000 == 0) { } else if (entity.age % 2000 == 0) {
entity.damage(Living.living(entity).damageOf(UDamageTypes.ALICORN_AMULET), 2); entity.damage(Living.living(entity).damageOf(UDamageTypes.ALICORN_AMULET), 2);

View file

@ -80,7 +80,7 @@ public class SunBlindnessStatusEffect extends StatusEffect {
return false; return false;
} }
return isPositionExposedToSun(entity.world, entity.getBlockPos()); return isPositionExposedToSun(entity.getWorld(), entity.getBlockPos());
} }
public static boolean isPositionExposedToSun(World world, BlockPos pos) { public static boolean isPositionExposedToSun(World world, BlockPos pos) {

View file

@ -20,7 +20,7 @@ public interface MeteorlogicalUtil {
} }
// we translate sun angle to a scale of 0-1 (0=sunrise, 1=sunset, >1 nighttime) // we translate sun angle to a scale of 0-1 (0=sunrise, 1=sunset, >1 nighttime)
final float skyAngle = ((entity.world.getSkyAngle(1) + 0.25F) % 1F) * 2; final float skyAngle = ((entity.getWorld().getSkyAngle(1) + 0.25F) % 1F) * 2;
float playerYaw = MathHelper.wrapDegrees(entity.getHeadYaw()); float playerYaw = MathHelper.wrapDegrees(entity.getHeadYaw());
float playerAngle = (-entity.getPitch(1) / 90F) / 2F; float playerAngle = (-entity.getPitch(1) / 90F) / 2F;

Some files were not shown because too many files have changed in this diff Show more