IT COMPILES

I'll test it tomorrow :^)
This commit is contained in:
Ell 2020-09-22 03:17:02 +02:00
parent 418920ffdf
commit cb1b37c96e
107 changed files with 526 additions and 511 deletions

View file

@ -23,7 +23,7 @@ if (System.getenv('BUILD_NUMBER') != null) {
sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = compileJava.targetCompatibility = '1.8' // Need this here so eclipse task generates correctly. sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = compileJava.targetCompatibility = '1.8' // Need this here so eclipse task generates correctly.
minecraft { minecraft {
mappings channel: 'snapshot', version: '20200128-1.15.1' mappings channel: 'snapshot', version: '20200723-1.16.1'
runs { runs {
client { client {
@ -98,19 +98,18 @@ repositories {
} }
dependencies { dependencies {
minecraft 'net.minecraftforge:forge:1.15.2-31.1.24' minecraft 'net.minecraftforge:forge:1.16.3-34.0.9'
compileOnly fg.deobf("mezz.jei:jei-1.15.2:6.0.0.2:api") compileOnly fg.deobf("mezz.jei:jei-1.16.2:7.3.2.25:api")
runtimeOnly fg.deobf("mezz.jei:jei-1.15.2:6.0.0.2") runtimeOnly fg.deobf("mezz.jei:jei-1.16.2:7.3.2.25")
compileOnly fg.deobf("vazkii.patchouli:Patchouli:1.15.2-1.2-32.160:api") compileOnly fg.deobf("vazkii.patchouli:Patchouli:1.16.2-44:api")
runtimeOnly fg.deobf("vazkii.patchouli:Patchouli:1.15.2-1.2-32.160") runtimeOnly fg.deobf("vazkii.patchouli:Patchouli:1.16.2-44")
runtimeOnly fg.deobf("top.theillusivec4.curios:curios:FORGE-1.15.2-2.0-beta2") runtimeOnly fg.deobf("top.theillusivec4.curios:curios-forge:1.16.3-4.0.2.0")
compileOnly fg.deobf("top.theillusivec4.curios:curios:FORGE-1.15.2-2.0-beta2:api") compileOnly fg.deobf("top.theillusivec4.curios:curios-forge:1.16.3-4.0.2.0:api")
compile fg.deobf("com.blamejared.crafttweaker:CraftTweaker-1.15.1:6.0.0.4") compile fg.deobf("quarris.enchantability:Enchantability:8.5.25")
compile fg.deobf("quarris.enchantability:enchantability:8.1.15")
} }
// Example for how to get properties into the manifest for reading by the runtime.. // Example for how to get properties into the manifest for reading by the runtime..

View file

@ -21,13 +21,14 @@ import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.Ingredient; import net.minecraft.item.crafting.Ingredient;
import net.minecraft.nbt.INBT; import net.minecraft.nbt.INBT;
import net.minecraft.state.IProperty; import net.minecraft.state.Property;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.*; import net.minecraft.util.*;
import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.ChunkPos; import net.minecraft.util.math.ChunkPos;
import net.minecraft.util.math.Vec3d;
import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.world.IWorld; import net.minecraft.world.IWorld;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraft.world.chunk.AbstractChunkProvider; import net.minecraft.world.chunk.AbstractChunkProvider;
@ -45,7 +46,6 @@ import net.minecraftforge.registries.IForgeRegistry;
import net.minecraftforge.registries.IForgeRegistryEntry; import net.minecraftforge.registries.IForgeRegistryEntry;
import org.apache.commons.lang3.tuple.ImmutableTriple; import org.apache.commons.lang3.tuple.ImmutableTriple;
import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL11;
import top.theillusivec4.curios.api.CuriosAPI;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import javax.annotation.Nullable; import javax.annotation.Nullable;
@ -209,7 +209,7 @@ public final class Helper {
if (split.length > 1) { if (split.length > 1) {
for (String part : split[1].replace("]", "").split(",")) { for (String part : split[1].replace("]", "").split(",")) {
String[] keyValue = part.split("="); String[] keyValue = part.split("=");
for (IProperty<?> prop : state.getProperties()) { for (Property<?> prop : state.getProperties()) {
BlockState changed = findProperty(state, prop, keyValue[0], keyValue[1]); BlockState changed = findProperty(state, prop, keyValue[0], keyValue[1]);
if (changed != null) { if (changed != null) {
state = changed; state = changed;
@ -223,7 +223,7 @@ public final class Helper {
return null; return null;
} }
private static <T extends Comparable<T>> BlockState findProperty(BlockState state, IProperty<T> prop, String key, String newValue) { private static <T extends Comparable<T>> BlockState findProperty(BlockState state, Property<T> prop, String key, String newValue) {
if (key.equals(prop.getName())) if (key.equals(prop.getName()))
for (T value : prop.getAllowedValues()) for (T value : prop.getAllowedValues())
if (prop.getName(value).equals(newValue)) if (prop.getName(value).equals(newValue))
@ -307,7 +307,7 @@ public final class Helper {
return true; return true;
} }
public static AxisAlignedBB aabb(Vec3d pos) { public static AxisAlignedBB aabb(Vector3d pos) {
return new AxisAlignedBB(pos.x, pos.y, pos.z, pos.x, pos.y, pos.z); return new AxisAlignedBB(pos.x, pos.y, pos.z, pos.x, pos.y, pos.z);
} }
@ -331,9 +331,10 @@ public final class Helper {
public static ItemStack getEquippedItem(Predicate<ItemStack> predicate, PlayerEntity player) { public static ItemStack getEquippedItem(Predicate<ItemStack> predicate, PlayerEntity player) {
if (Compat.hasCompat("curios")) { if (Compat.hasCompat("curios")) {
Optional<ItemStack> stack = CuriosAPI.getCurioEquipped(predicate, player).map(ImmutableTriple::getRight); // TODO curios
/* Optional<ItemStack> stack = CuriosAPI.getCurioEquipped(predicate, player).map(ImmutableTriple::getRight);
if (stack.isPresent()) if (stack.isPresent())
return stack.get(); return stack.get();*/
} }
for (int i = 0; i < player.inventory.getSizeInventory(); i++) { for (int i = 0; i < player.inventory.getSizeInventory(); i++) {
ItemStack slot = player.inventory.getStackInSlot(i); ItemStack slot = player.inventory.getStackInSlot(i);

View file

@ -13,7 +13,7 @@ import net.minecraft.util.ResourceLocation;
import net.minecraft.util.Tuple; import net.minecraft.util.Tuple;
import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.world.World; import net.minecraft.world.World;
import org.apache.commons.lang3.mutable.MutableFloat; import org.apache.commons.lang3.mutable.MutableFloat;
import org.apache.commons.lang3.mutable.MutableInt; import org.apache.commons.lang3.mutable.MutableInt;
@ -57,7 +57,7 @@ public class InternalHooks implements NaturesAuraAPI.IInternalHooks {
@Override @Override
public void spawnParticleStream(float startX, float startY, float startZ, float endX, float endY, float endZ, float speed, int color, float scale) { public void spawnParticleStream(float startX, float startY, float startZ, float endX, float endY, float endZ, float speed, int color, float scale) {
Vec3d dir = new Vec3d(endX - startX, endY - startY, endZ - startZ); Vector3d dir = new Vector3d(endX - startX, endY - startY, endZ - startZ);
double length = dir.length(); double length = dir.length();
if (length > 0) { if (length > 0) {
dir = dir.normalize(); dir = dir.normalize();
@ -88,9 +88,9 @@ public class InternalHooks implements NaturesAuraAPI.IInternalHooks {
} }
@Override @Override
public List<Tuple<Vec3d, Integer>> getActiveEffectPowders(World world, AxisAlignedBB area, ResourceLocation name) { public List<Tuple<Vector3d, Integer>> getActiveEffectPowders(World world, AxisAlignedBB area, ResourceLocation name) {
List<Tuple<Vec3d, Integer>> found = new ArrayList<>(); List<Tuple<Vector3d, Integer>> found = new ArrayList<>();
for (Tuple<Vec3d, Integer> powder : ((WorldData) IWorldData.getWorldData(world)).effectPowders.get(name)) for (Tuple<Vector3d, Integer> powder : ((WorldData) IWorldData.getWorldData(world)).effectPowders.get(name))
if (area.contains(powder.getA())) if (area.contains(powder.getA()))
found.add(powder); found.add(powder);
return found; return found;
@ -98,9 +98,9 @@ public class InternalHooks implements NaturesAuraAPI.IInternalHooks {
@Override @Override
public boolean isEffectPowderActive(World world, BlockPos pos, ResourceLocation name) { public boolean isEffectPowderActive(World world, BlockPos pos, ResourceLocation name) {
Vec3d posVec = new Vec3d(pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5); Vector3d posVec = new Vector3d(pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5);
List<Tuple<Vec3d, Integer>> powders = this.getActiveEffectPowders(world, new AxisAlignedBB(pos).grow(64), name); List<Tuple<Vector3d, Integer>> powders = this.getActiveEffectPowders(world, new AxisAlignedBB(pos).grow(64), name);
for (Tuple<Vec3d, Integer> powder : powders) { for (Tuple<Vector3d, Integer> powder : powders) {
AxisAlignedBB bounds = Helper.aabb(powder.getA()).grow(powder.getB()); AxisAlignedBB bounds = Helper.aabb(powder.getA()).grow(powder.getB());
if (bounds.contains(posVec)) if (bounds.contains(posVec))
return true; return true;

View file

@ -10,7 +10,6 @@ import net.minecraft.entity.EntityType;
import net.minecraft.tags.BlockTags; import net.minecraft.tags.BlockTags;
import net.minecraft.tags.Tag; import net.minecraft.tags.Tag;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraft.world.dimension.DimensionType;
import net.minecraftforge.common.ForgeConfigSpec; import net.minecraftforge.common.ForgeConfigSpec;
import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.ForgeRegistries;
@ -182,12 +181,13 @@ public final class ModConfig {
} }
try { try {
for (String s : this.auraTypeOverrides.get()) { // TODO aura type config
/*for (String s : this.auraTypeOverrides.get()) {
String[] split = s.split("->"); String[] split = s.split("->");
ResourceLocation dim = new ResourceLocation(split[0]); ResourceLocation dim = new ResourceLocation(split[0]);
BasicAuraType type = Objects.requireNonNull((BasicAuraType) NaturesAuraAPI.AURA_TYPES.get(new ResourceLocation(split[1])), "type"); BasicAuraType type = Objects.requireNonNull((BasicAuraType) NaturesAuraAPI.AURA_TYPES.get(new ResourceLocation(split[1])), "type");
type.addDimensionType(dim); type.addDimensionType(dim);
} }*/
} catch (Exception e) { } catch (Exception e) {
NaturesAura.LOGGER.warn("Error parsing auraTypeOverrides", e); NaturesAura.LOGGER.warn("Error parsing auraTypeOverrides", e);
} }

View file

@ -19,10 +19,10 @@ import net.minecraft.util.ResourceLocation;
import net.minecraft.util.Tuple; import net.minecraft.util.Tuple;
import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.world.DimensionType;
import net.minecraft.world.IWorld; import net.minecraft.world.IWorld;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraft.world.dimension.DimensionType;
import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.CapabilityInject; import net.minecraftforge.common.capabilities.CapabilityInject;
@ -54,9 +54,9 @@ public final class NaturesAuraAPI {
* easily registered using {@link BasicAuraType#register()}. * easily registered using {@link BasicAuraType#register()}.
*/ */
public static final Map<ResourceLocation, IAuraType> AURA_TYPES = new HashMap<>(); public static final Map<ResourceLocation, IAuraType> AURA_TYPES = new HashMap<>();
public static final BasicAuraType TYPE_OVERWORLD = new BasicAuraType(new ResourceLocation(MOD_ID, "overworld"), DimensionType.OVERWORLD, 0x89cc37, 0).register(); public static final BasicAuraType TYPE_OVERWORLD = new BasicAuraType(new ResourceLocation(MOD_ID, "overworld"), World.field_234918_g_, 0x89cc37, 0).register();
public static final BasicAuraType TYPE_NETHER = new BasicAuraType(new ResourceLocation(MOD_ID, "nether"), DimensionType.THE_NETHER, 0x871c0c, 0).register(); public static final BasicAuraType TYPE_NETHER = new BasicAuraType(new ResourceLocation(MOD_ID, "nether"), World.field_234919_h_, 0x871c0c, 0).register();
public static final BasicAuraType TYPE_END = new BasicAuraType(new ResourceLocation(MOD_ID, "end"), DimensionType.THE_END, 0x302624, 0).register(); public static final BasicAuraType TYPE_END = new BasicAuraType(new ResourceLocation(MOD_ID, "end"), World.field_234920_i_, 0x302624, 0).register();
public static final BasicAuraType TYPE_OTHER = new BasicAuraType(new ResourceLocation(MOD_ID, "other"), null, 0x2fa8a0, Integer.MIN_VALUE).register(); public static final BasicAuraType TYPE_OTHER = new BasicAuraType(new ResourceLocation(MOD_ID, "other"), null, 0x2fa8a0, Integer.MIN_VALUE).register();
/** /**
* A map of all {@link IDrainSpotEffect} suppliers which are effects that * A map of all {@link IDrainSpotEffect} suppliers which are effects that
@ -267,7 +267,7 @@ public final class NaturesAuraAPI {
* @param name The registry name of the powder * @param name The registry name of the powder
* @return A list of powders' positions and ranges * @return A list of powders' positions and ranges
*/ */
List<Tuple<Vec3d, Integer>> getActiveEffectPowders(World world, AxisAlignedBB area, ResourceLocation name); List<Tuple<Vector3d, Integer>> getActiveEffectPowders(World world, AxisAlignedBB area, ResourceLocation name);
/** /**
* Returns true if there is an effect powder entity active anywhere * Returns true if there is an effect powder entity active anywhere

View file

@ -1,9 +1,12 @@
package de.ellpeck.naturesaura.api.aura.type; package de.ellpeck.naturesaura.api.aura.type;
import de.ellpeck.naturesaura.api.NaturesAuraAPI; import de.ellpeck.naturesaura.api.NaturesAuraAPI;
import net.minecraft.util.RegistryKey;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraft.world.DimensionType;
import net.minecraft.world.IWorld; import net.minecraft.world.IWorld;
import net.minecraft.world.dimension.DimensionType; import net.minecraft.world.World;
import net.minecraftforge.registries.ForgeRegistries;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
@ -13,14 +16,14 @@ public class BasicAuraType implements IAuraType {
private final ResourceLocation name; private final ResourceLocation name;
private final int color; private final int color;
private final int priority; private final int priority;
private final Set<ResourceLocation> dimensions = new HashSet<>(); private final Set<RegistryKey<World>> dimensions = new HashSet<>();
public BasicAuraType(ResourceLocation name, DimensionType dimension, int color, int priority) { public BasicAuraType(ResourceLocation name, RegistryKey<World> dimension, int color, int priority) {
this.name = name; this.name = name;
this.color = color; this.color = color;
this.priority = priority; this.priority = priority;
if (dimension != null) if (dimension != null)
this.dimensions.add(dimension.getRegistryName()); this.dimensions.add(dimension);
} }
public BasicAuraType register() { public BasicAuraType register() {
@ -35,7 +38,7 @@ public class BasicAuraType implements IAuraType {
@Override @Override
public boolean isPresentInWorld(IWorld world) { public boolean isPresentInWorld(IWorld world) {
return this.dimensions.isEmpty() || this.dimensions.contains(world.getDimension().getType().getRegistryName()); return this.dimensions.isEmpty() || this.dimensions.contains(((World) world).func_234923_W_());
} }
@Override @Override
@ -48,7 +51,7 @@ public class BasicAuraType implements IAuraType {
return this.priority; return this.priority;
} }
public void addDimensionType(ResourceLocation typeName) { public void addDimensionType(RegistryKey<World> type) {
this.dimensions.add(typeName); this.dimensions.add(type);
} }
} }

View file

@ -2,8 +2,8 @@ package de.ellpeck.naturesaura.api.misc;
import de.ellpeck.naturesaura.api.NaturesAuraAPI; import de.ellpeck.naturesaura.api.NaturesAuraAPI;
import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.CompoundNBT;
import net.minecraft.world.DimensionType;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraft.world.dimension.DimensionType;
import net.minecraftforge.common.capabilities.ICapabilityProvider; import net.minecraftforge.common.capabilities.ICapabilityProvider;
import net.minecraftforge.common.util.INBTSerializable; import net.minecraftforge.common.util.INBTSerializable;
import net.minecraftforge.items.IItemHandlerModifiable; import net.minecraftforge.items.IItemHandlerModifiable;
@ -16,7 +16,7 @@ public interface IWorldData extends ICapabilityProvider, INBTSerializable<Compou
static IWorldData getOverworldData(World world) { static IWorldData getOverworldData(World world) {
if (!world.isRemote) if (!world.isRemote)
return getWorldData(world.getServer().getWorld(DimensionType.OVERWORLD)); return getWorldData(world.getServer().getWorld(World.field_234918_g_));
return getWorldData(world); return getWorldData(world);
} }

View file

@ -3,6 +3,7 @@ package de.ellpeck.naturesaura.api.multiblock;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks; import net.minecraft.block.Blocks;
import net.minecraft.tags.ITag;
import net.minecraft.tags.Tag; import net.minecraft.tags.Tag;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IWorld; import net.minecraft.world.IWorld;
@ -22,8 +23,8 @@ public class Matcher {
return new Matcher(Blocks.AIR.getDefaultState(), null); return new Matcher(Blocks.AIR.getDefaultState(), null);
} }
public static Matcher tag(Block defaultBlock, Tag tag) { public static Matcher tag(Block defaultBlock, ITag.INamedTag tag) {
return new Matcher(defaultBlock.getDefaultState(), (world, start, offset, pos, state, c) -> state.getBlock().getTags().contains(tag.getId())); return new Matcher(defaultBlock.getDefaultState(), (world, start, offset, pos, state, c) -> state.getBlock().getTags().contains(tag.getName()));
} }
public BlockState getDefaultState() { public BlockState getDefaultState() {

View file

@ -4,17 +4,17 @@ import de.ellpeck.naturesaura.data.BlockStateGenerator;
import de.ellpeck.naturesaura.reg.ICustomBlockState; import de.ellpeck.naturesaura.reg.ICustomBlockState;
import de.ellpeck.naturesaura.reg.IModItem; import de.ellpeck.naturesaura.reg.IModItem;
import de.ellpeck.naturesaura.reg.ModRegistry; import de.ellpeck.naturesaura.reg.ModRegistry;
import net.minecraft.block.LogBlock; import net.minecraft.block.RotatedPillarBlock;
import net.minecraft.block.SoundType; import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material; import net.minecraft.block.material.Material;
import net.minecraft.block.material.MaterialColor; import net.minecraft.block.material.MaterialColor;
public class BlockAncientLog extends LogBlock implements IModItem, ICustomBlockState { public class BlockAncientLog extends RotatedPillarBlock implements IModItem, ICustomBlockState {
private final String baseName; private final String baseName;
public BlockAncientLog(String baseName) { public BlockAncientLog(String baseName) {
super(MaterialColor.PURPLE, ModBlocks.prop(Material.WOOD).hardnessAndResistance(2.0F).sound(SoundType.WOOD)); super(ModBlocks.prop(Material.WOOD,MaterialColor.PURPLE).hardnessAndResistance(2.0F).sound(SoundType.WOOD));
this.baseName = baseName; this.baseName = baseName;
ModRegistry.add(this); ModRegistry.add(this);
} }

View file

@ -67,9 +67,9 @@ public class BlockAncientSapling extends BushBlock implements IGrowable, IModIte
@Override @Override
public void grow(ServerWorld world, Random rand, BlockPos pos, BlockState state) { public void grow(ServerWorld world, Random rand, BlockPos pos, BlockState state) {
if (state.get(SaplingBlock.STAGE) == 0) { if (state.get(SaplingBlock.STAGE) == 0) {
world.setBlockState(pos, state.cycle(SaplingBlock.STAGE), 4); world.setBlockState(pos, state.func_235896_a_(SaplingBlock.STAGE), 4);
} else if (ForgeEventFactory.saplingGrowTree(world, rand, pos)) { } else if (ForgeEventFactory.saplingGrowTree(world, rand, pos)) {
ModFeatures.ANCIENT_TREE.place(world, world.getChunkProvider().getChunkGenerator(), rand, pos, WorldGenAncientTree.CONFIG); ModFeatures.ANCIENT_TREE.func_241855_a(world, world.getChunkProvider().getChunkGenerator(), rand, pos, WorldGenAncientTree.CONFIG);
} }
} }
@ -85,6 +85,6 @@ public class BlockAncientSapling extends BushBlock implements IGrowable, IModIte
@Override @Override
public Supplier<RenderType> getRenderType() { public Supplier<RenderType> getRenderType() {
return RenderType::cutoutMipped; return RenderType::getCutoutMipped;
} }
} }

View file

@ -10,9 +10,9 @@ import net.minecraft.entity.Entity;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.DamageSource; import net.minecraft.util.DamageSource;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Vec3d;
import net.minecraft.util.math.shapes.ISelectionContext; import net.minecraft.util.math.shapes.ISelectionContext;
import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.util.math.shapes.VoxelShape;
import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.world.IBlockReader; import net.minecraft.world.IBlockReader;
import net.minecraft.world.IWorldReader; import net.minecraft.world.IWorldReader;
import net.minecraft.world.World; import net.minecraft.world.World;
@ -49,7 +49,7 @@ public class BlockAuraBloom extends BushBlock implements IModItem, ICustomBlockS
@Override @Override
public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) { public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) {
Vec3d vec3d = state.getOffset(worldIn, pos); Vector3d vec3d = state.getOffset(worldIn, pos);
return SHAPE.withOffset(vec3d.x, vec3d.y, vec3d.z); return SHAPE.withOffset(vec3d.x, vec3d.y, vec3d.z);
} }
@ -65,7 +65,7 @@ public class BlockAuraBloom extends BushBlock implements IModItem, ICustomBlockS
@Override @Override
public Supplier<RenderType> getRenderType() { public Supplier<RenderType> getRenderType() {
return RenderType::cutout; return RenderType::getCutout;
} }
@Override @Override

View file

@ -65,7 +65,7 @@ public class BlockAuraTimer extends BlockContainerImpl implements ICustomBlockSt
@Override @Override
public Supplier<RenderType> getRenderType() { public Supplier<RenderType> getRenderType() {
return RenderType::cutout; return RenderType::getCutout;
} }
@Override @Override
@ -88,11 +88,6 @@ public class BlockAuraTimer extends BlockContainerImpl implements ICustomBlockSt
return state.get(BlockStateProperties.POWERED) ? 15 : 0; return state.get(BlockStateProperties.POWERED) ? 15 : 0;
} }
@Override
public int tickRate(IWorldReader world) {
return 4;
}
@Override @Override
public void tick(BlockState state, ServerWorld worldIn, BlockPos pos, Random random) { public void tick(BlockState state, ServerWorld worldIn, BlockPos pos, Random random) {
super.tick(state, worldIn, pos, random); super.tick(state, worldIn, pos, random);

View file

@ -7,10 +7,12 @@ import de.ellpeck.naturesaura.reg.ModTileType;
import net.minecraft.block.*; import net.minecraft.block.*;
import net.minecraft.entity.LivingEntity; import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.fluid.FluidState;
import net.minecraft.fluid.Fluids; import net.minecraft.fluid.Fluids;
import net.minecraft.fluid.IFluidState;
import net.minecraft.item.BlockItemUseContext; import net.minecraft.item.BlockItemUseContext;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.loot.LootContext;
import net.minecraft.loot.LootParameters;
import net.minecraft.state.StateContainer; import net.minecraft.state.StateContainer;
import net.minecraft.state.properties.BlockStateProperties; import net.minecraft.state.properties.BlockStateProperties;
import net.minecraft.tags.FluidTags; import net.minecraft.tags.FluidTags;
@ -22,8 +24,6 @@ import net.minecraft.world.IWorld;
import net.minecraft.world.IWorldReader; import net.minecraft.world.IWorldReader;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraft.world.server.ServerWorld; import net.minecraft.world.server.ServerWorld;
import net.minecraft.world.storage.loot.LootContext;
import net.minecraft.world.storage.loot.LootParameters;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.util.List; import java.util.List;
@ -59,7 +59,7 @@ public class BlockContainerImpl extends ContainerBlock implements IModItem {
} }
@Override @Override
public IFluidState getFluidState(BlockState state) { public FluidState getFluidState(BlockState state) {
return this.hasWaterlogging() && state.get(BlockStateProperties.WATERLOGGED) ? Fluids.WATER.getStillFluidState(false) : super.getFluidState(state); return this.hasWaterlogging() && state.get(BlockStateProperties.WATERLOGGED) ? Fluids.WATER.getStillFluidState(false) : super.getFluidState(state);
} }
@ -74,7 +74,7 @@ public class BlockContainerImpl extends ContainerBlock implements IModItem {
@Nullable @Nullable
public BlockState getStateForPlacement(BlockItemUseContext context) { public BlockState getStateForPlacement(BlockItemUseContext context) {
if (this.hasWaterlogging()) { if (this.hasWaterlogging()) {
IFluidState state = context.getWorld().getFluidState(context.getPos()); FluidState state = context.getWorld().getFluidState(context.getPos());
return this.getDefaultState().with(BlockStateProperties.WATERLOGGED, state.isTagged(FluidTags.WATER) && state.getLevel() == 8); return this.getDefaultState().with(BlockStateProperties.WATERLOGGED, state.isTagged(FluidTags.WATER) && state.getLevel() == 8);
} }
return super.getStateForPlacement(context); return super.getStateForPlacement(context);
@ -157,16 +157,11 @@ public class BlockContainerImpl extends ContainerBlock implements IModItem {
TileEntityImpl impl = (TileEntityImpl) tile; TileEntityImpl impl = (TileEntityImpl) tile;
int newPower = world.getRedstonePowerFromNeighbors(pos); int newPower = world.getRedstonePowerFromNeighbors(pos);
if (impl.redstonePower != newPower) if (impl.redstonePower != newPower)
world.getPendingBlockTicks().scheduleTick(pos, this, this.tickRate(world)); world.getPendingBlockTicks().scheduleTick(pos, this, 4);
} }
} }
} }
@Override
public int tickRate(IWorldReader worldIn) {
return 4;
}
@Override @Override
public void tick(BlockState state, ServerWorld worldIn, BlockPos pos, Random random) { public void tick(BlockState state, ServerWorld worldIn, BlockPos pos, Random random) {
if (!worldIn.isRemote) { if (!worldIn.isRemote) {

View file

@ -40,6 +40,6 @@ public class BlockDecayedLeaves extends BlockImpl implements ICustomBlockState,
@Override @Override
public Supplier<RenderType> getRenderType() { public Supplier<RenderType> getRenderType() {
return RenderType::cutoutMipped; return RenderType::getCutoutMipped;
} }
} }

View file

@ -19,20 +19,16 @@ import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.server.MinecraftServer; import net.minecraft.server.MinecraftServer;
import net.minecraft.state.EnumProperty; import net.minecraft.state.EnumProperty;
import net.minecraft.state.IProperty; import net.minecraft.state.Property;
import net.minecraft.state.StateContainer; import net.minecraft.state.StateContainer;
import net.minecraft.state.properties.BlockStateProperties; import net.minecraft.state.properties.BlockStateProperties;
import net.minecraft.state.properties.RailShape; import net.minecraft.state.properties.RailShape;
import net.minecraft.util.ActionResultType; import net.minecraft.util.*;
import net.minecraft.util.Hand;
import net.minecraft.util.SoundCategory;
import net.minecraft.util.SoundEvents;
import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.util.math.BlockRayTraceResult;
import net.minecraft.world.IBlockReader; import net.minecraft.world.IBlockReader;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraft.world.dimension.DimensionType;
import net.minecraft.world.gen.Heightmap; import net.minecraft.world.gen.Heightmap;
import net.minecraft.world.server.ServerWorld; import net.minecraft.world.server.ServerWorld;
import net.minecraftforge.common.util.ITeleporter; import net.minecraftforge.common.util.ITeleporter;
@ -45,20 +41,20 @@ public class BlockDimensionRail extends AbstractRailBlock implements IModItem, I
public static final EnumProperty<RailShape> SHAPE = BlockStateProperties.RAIL_SHAPE; public static final EnumProperty<RailShape> SHAPE = BlockStateProperties.RAIL_SHAPE;
private final String name; private final String name;
private final int goalDim; private final RegistryKey<World> goalDim;
private final DimensionType[] canUseDims; private final RegistryKey<World>[] canUseDims;
public BlockDimensionRail(String name, DimensionType goalDim, DimensionType... canUseDims) { public BlockDimensionRail(String name, RegistryKey<World> goalDim, RegistryKey<World>... canUseDims) {
super(false, ModBlocks.prop(Blocks.RAIL)); super(false, ModBlocks.prop(Blocks.RAIL));
this.name = name; this.name = name;
this.goalDim = goalDim.getId(); this.goalDim = goalDim;
this.canUseDims = canUseDims; this.canUseDims = canUseDims;
ModRegistry.add(this); ModRegistry.add(this);
} }
private boolean canUseHere(DimensionType dimension) { private boolean canUseHere(RegistryKey<World> dimension) {
for (DimensionType dim : this.canUseDims) for (RegistryKey<World> dim : this.canUseDims)
if (dim == dimension) if (dim == dimension)
return true; return true;
return false; return false;
@ -70,7 +66,10 @@ public class BlockDimensionRail extends AbstractRailBlock implements IModItem, I
if (stack.getItem() == ModItems.RANGE_VISUALIZER) { if (stack.getItem() == ModItems.RANGE_VISUALIZER) {
if (!worldIn.isRemote) { if (!worldIn.isRemote) {
BlockPos goalPos = this.getGoalCoords(worldIn, pos); BlockPos goalPos = this.getGoalCoords(worldIn, pos);
// TODO dimension rail visualization
/*
PacketHandler.sendTo(player, new PacketClient(0, this.goalDim, goalPos.getX(), goalPos.getY(), goalPos.getZ())); PacketHandler.sendTo(player, new PacketClient(0, this.goalDim, goalPos.getX(), goalPos.getY(), goalPos.getZ()));
*/
} }
return ActionResultType.SUCCESS; return ActionResultType.SUCCESS;
} }
@ -83,7 +82,7 @@ public class BlockDimensionRail extends AbstractRailBlock implements IModItem, I
return; return;
if (cart.isBeingRidden()) if (cart.isBeingRidden())
return; return;
if (!this.canUseHere(world.getDimension().getType())) if (!this.canUseHere(world.func_234923_W_()))
return; return;
AxisAlignedBB box = cart.getBoundingBox(); AxisAlignedBB box = cart.getBoundingBox();
@ -91,7 +90,7 @@ public class BlockDimensionRail extends AbstractRailBlock implements IModItem, I
world.playSound(null, pos, SoundEvents.ENTITY_ENDERMAN_TELEPORT, SoundCategory.BLOCKS, 1F, 1F); world.playSound(null, pos, SoundEvents.ENTITY_ENDERMAN_TELEPORT, SoundCategory.BLOCKS, 1F, 1F);
BlockPos goalCoords = this.getGoalCoords(world, pos); BlockPos goalCoords = this.getGoalCoords(world, pos);
cart.changeDimension(DimensionType.getById(this.goalDim), new ITeleporter() { cart.changeDimension(world.getServer().getWorld(this.goalDim), new ITeleporter() {
@Override @Override
public Entity placeEntity(Entity entity, ServerWorld currentWorld, ServerWorld destWorld, float yaw, Function<Boolean, Entity> repositionEntity) { public Entity placeEntity(Entity entity, ServerWorld currentWorld, ServerWorld destWorld, float yaw, Function<Boolean, Entity> repositionEntity) {
Entity result = repositionEntity.apply(false); Entity result = repositionEntity.apply(false);
@ -106,22 +105,21 @@ public class BlockDimensionRail extends AbstractRailBlock implements IModItem, I
private BlockPos getGoalCoords(World world, BlockPos pos) { private BlockPos getGoalCoords(World world, BlockPos pos) {
MinecraftServer server = world.getServer(); MinecraftServer server = world.getServer();
DimensionType goalDimType = DimensionType.getById(this.goalDim);
if (this == ModBlocks.DIMENSION_RAIL_NETHER) { if (this == ModBlocks.DIMENSION_RAIL_NETHER) {
// travel to the nether from the overworld // travel to the nether from the overworld
return new BlockPos(pos.getX() / 8, pos.getY() / 2, pos.getZ() / 8); return new BlockPos(pos.getX() / 8, pos.getY() / 2, pos.getZ() / 8);
} else if (this == ModBlocks.DIMENSION_RAIL_END) { } else if (this == ModBlocks.DIMENSION_RAIL_END) {
// travel to the end from the overworld // travel to the end from the overworld
ServerWorld end = server.getWorld(goalDimType); ServerWorld end = server.getWorld(this.goalDim);
return end.getSpawnCoordinate().up(8); return end.func_241135_u_().up(8);
} else { } else {
if (world.getDimension().getType() == DimensionType.THE_NETHER) { if (world.func_234923_W_() == World.field_234919_h_) {
// travel to the overworld from the nether // travel to the overworld from the nether
return new BlockPos(pos.getX() * 8, pos.getY() * 2, pos.getZ() * 8); return new BlockPos(pos.getX() * 8, pos.getY() * 2, pos.getZ() * 8);
} else { } else {
// travel to the overworld from the end // travel to the overworld from the end
World overworld = server.getWorld(goalDimType); ServerWorld overworld = server.getWorld(this.goalDim);
BlockPos spawn = overworld.getSpawnPoint(); BlockPos spawn = overworld.func_241135_u_();
BlockPos ret = new BlockPos(spawn.getX(), 0, spawn.getZ()); BlockPos ret = new BlockPos(spawn.getX(), 0, spawn.getZ());
return ret.up(overworld.getHeight(Heightmap.Type.WORLD_SURFACE, spawn.getX(), spawn.getZ())); return ret.up(overworld.getHeight(Heightmap.Type.WORLD_SURFACE, spawn.getX(), spawn.getZ()));
} }
@ -129,7 +127,7 @@ public class BlockDimensionRail extends AbstractRailBlock implements IModItem, I
} }
@Override @Override
public IProperty<RailShape> getShapeProperty() { public Property<RailShape> getShapeProperty() {
return SHAPE; return SHAPE;
} }
@ -155,7 +153,7 @@ public class BlockDimensionRail extends AbstractRailBlock implements IModItem, I
@Override @Override
public Supplier<RenderType> getRenderType() { public Supplier<RenderType> getRenderType() {
return RenderType::cutoutMipped; return RenderType::getCutoutMipped;
} }
@Override @Override

View file

@ -10,20 +10,20 @@ import net.minecraft.client.renderer.RenderType;
import net.minecraft.entity.LivingEntity; import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.boss.dragon.EnderDragonEntity; import net.minecraft.entity.boss.dragon.EnderDragonEntity;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.fluid.IFluidState; import net.minecraft.fluid.FluidState;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.loot.LootContext;
import net.minecraft.loot.LootParameters;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.NonNullList; import net.minecraft.util.NonNullList;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Vec3d;
import net.minecraft.util.math.shapes.ISelectionContext; import net.minecraft.util.math.shapes.ISelectionContext;
import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.util.math.shapes.VoxelShape;
import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.world.IBlockReader; import net.minecraft.world.IBlockReader;
import net.minecraft.world.IWorldReader; import net.minecraft.world.IWorldReader;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraft.world.gen.Heightmap; import net.minecraft.world.gen.Heightmap;
import net.minecraft.world.storage.loot.LootContext;
import net.minecraft.world.storage.loot.LootParameters;
import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent; import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.eventbus.api.SubscribeEvent;
@ -45,7 +45,7 @@ public class BlockEndFlower extends BushBlock implements IModItem, ICustomBlockS
@Override @Override
public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) { public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) {
Vec3d vec3d = state.getOffset(worldIn, pos); Vector3d vec3d = state.getOffset(worldIn, pos);
return SHAPE.withOffset(vec3d.x, vec3d.y, vec3d.z); return SHAPE.withOffset(vec3d.x, vec3d.y, vec3d.z);
} }
@ -97,7 +97,7 @@ public class BlockEndFlower extends BushBlock implements IModItem, ICustomBlockS
} }
@Override @Override
public boolean removedByPlayer(BlockState state, World world, BlockPos pos, PlayerEntity player, boolean willHarvest, IFluidState fluid) { public boolean removedByPlayer(BlockState state, World world, BlockPos pos, PlayerEntity player, boolean willHarvest, FluidState fluid) {
return willHarvest || super.removedByPlayer(state, world, pos, player, willHarvest, fluid); return willHarvest || super.removedByPlayer(state, world, pos, player, willHarvest, fluid);
} }
@ -127,6 +127,6 @@ public class BlockEndFlower extends BushBlock implements IModItem, ICustomBlockS
@Override @Override
public Supplier<RenderType> getRenderType() { public Supplier<RenderType> getRenderType() {
return RenderType::cutout; return RenderType::getCutout;
} }
} }

View file

@ -56,7 +56,7 @@ public class BlockEnderCrate extends BlockContainerImpl implements ITESRProvider
private static final ThreadLocal<WeakReference<World>> CACHED_WORLD = new ThreadLocal<>(); private static final ThreadLocal<WeakReference<World>> CACHED_WORLD = new ThreadLocal<>();
public BlockEnderCrate() { public BlockEnderCrate() {
super("ender_crate", TileEntityEnderCrate::new, ModBlocks.prop(Material.ROCK).hardnessAndResistance(5F).lightValue(7).sound(SoundType.STONE)); super("ender_crate", TileEntityEnderCrate::new, ModBlocks.prop(Material.ROCK).hardnessAndResistance(5F).setLightLevel(s -> 7).sound(SoundType.STONE));
MinecraftForge.EVENT_BUS.register(this); MinecraftForge.EVENT_BUS.register(this);
} }

View file

@ -38,7 +38,7 @@ public class BlockFieldCreator extends BlockContainerImpl implements ICustomBloc
if (!worldIn.isRemote) { if (!worldIn.isRemote) {
String key = NaturesAura.MOD_ID + ":field_creator_pos"; String key = NaturesAura.MOD_ID + ":field_creator_pos";
CompoundNBT compound = player.getPersistentData(); CompoundNBT compound = player.getPersistentData();
if (!player.isShiftKeyDown() && compound.contains(key)) { if (!player.isSneaking() && compound.contains(key)) {
BlockPos stored = BlockPos.fromLong(compound.getLong(key)); BlockPos stored = BlockPos.fromLong(compound.getLong(key));
TileEntityFieldCreator creator = (TileEntityFieldCreator) tile; TileEntityFieldCreator creator = (TileEntityFieldCreator) tile;
if (!pos.equals(stored)) { if (!pos.equals(stored)) {
@ -94,11 +94,6 @@ public class BlockFieldCreator extends BlockContainerImpl implements ICustomBloc
} }
} }
@Override
public boolean isNormalCube(BlockState state, IBlockReader worldIn, BlockPos pos) {
return false;
}
@Override @Override
public void generateCustomBlockState(BlockStateGenerator generator) { public void generateCustomBlockState(BlockStateGenerator generator) {
generator.simpleBlock(this, generator.models().getExistingFile(generator.modLoc(this.getBaseName()))); generator.simpleBlock(this, generator.models().getExistingFile(generator.modLoc(this.getBaseName())));
@ -106,6 +101,6 @@ public class BlockFieldCreator extends BlockContainerImpl implements ICustomBloc
@Override @Override
public Supplier<RenderType> getRenderType() { public Supplier<RenderType> getRenderType() {
return RenderType::cutoutMipped; return RenderType::getCutoutMipped;
} }
} }

View file

@ -18,16 +18,16 @@ public class BlockFlowerPot extends FlowerPotBlock implements ICustomBlockState,
public void generateCustomBlockState(BlockStateGenerator generator) { public void generateCustomBlockState(BlockStateGenerator generator) {
generator.simpleBlock(this, generator.models() generator.simpleBlock(this, generator.models()
.withExistingParent(this.getBaseName(), "block/flower_pot_cross") .withExistingParent(this.getBaseName(), "block/flower_pot_cross")
.texture("plant", "block/" + this.func_220276_d().getRegistryName().getPath())); .texture("plant", "block/" + this.getFlower().getRegistryName().getPath()));
} }
@Override @Override
public String getBaseName() { public String getBaseName() {
return "potted_" + this.func_220276_d().getRegistryName().getPath(); return "potted_" + this.getFlower().getRegistryName().getPath();
} }
@Override @Override
public Supplier<RenderType> getRenderType() { public Supplier<RenderType> getRenderType() {
return RenderType::cutout; return RenderType::getCutout;
} }
} }

View file

@ -84,11 +84,6 @@ public class BlockFurnaceHeater extends BlockContainerImpl implements ICustomBlo
return SHAPES[state.get(FACING).getIndex()]; return SHAPES[state.get(FACING).getIndex()];
} }
@Override
public boolean isNormalCube(BlockState state, IBlockReader worldIn, BlockPos pos) {
return false;
}
@Override @Override
protected void fillStateContainer(StateContainer.Builder<Block, BlockState> builder) { protected void fillStateContainer(StateContainer.Builder<Block, BlockState> builder) {
super.fillStateContainer(builder); super.fillStateContainer(builder);

View file

@ -103,7 +103,7 @@ public class BlockGoldPowder extends BlockImpl implements IColorProvidingBlock,
if (!blockstate1.isNormalCube(worldIn, blockpos1)) { if (!blockstate1.isNormalCube(worldIn, blockpos1)) {
boolean flag = blockstate.isSolidSide(worldIn, blockpos, Direction.UP) || blockstate.getBlock() == Blocks.HOPPER; boolean flag = blockstate.isSolidSide(worldIn, blockpos, Direction.UP) || blockstate.getBlock() == Blocks.HOPPER;
if (flag && this.canConnectTo(worldIn.getBlockState(blockpos.up()))) { if (flag && this.canConnectTo(worldIn.getBlockState(blockpos.up()))) {
if (blockstate.isCollisionShapeOpaque(worldIn, blockpos)) { if (blockstate.hasOpaqueCollisionShape(worldIn, blockpos)) {
return RedstoneSide.UP; return RedstoneSide.UP;
} }
@ -187,26 +187,25 @@ public class BlockGoldPowder extends BlockImpl implements IColorProvidingBlock,
} }
@Override @Override
public void updateDiagonalNeighbors(BlockState state, IWorld worldIn, BlockPos pos, int flags) { public void updateDiagonalNeighbors(BlockState state, IWorld worldIn, BlockPos pos, int flags, int recursionLeft) {
try (BlockPos.PooledMutable pool = BlockPos.PooledMutable.retain()) { BlockPos.Mutable pool = new BlockPos.Mutable();
for (Direction direction : Direction.Plane.HORIZONTAL) { for (Direction direction : Direction.Plane.HORIZONTAL) {
RedstoneSide redstoneside = state.get(RedstoneWireBlock.FACING_PROPERTY_MAP.get(direction)); RedstoneSide redstoneside = state.get(RedstoneWireBlock.FACING_PROPERTY_MAP.get(direction));
if (redstoneside != RedstoneSide.NONE && worldIn.getBlockState(pool.setPos(pos).move(direction)).getBlock() != this) { if (redstoneside != RedstoneSide.NONE && worldIn.getBlockState(pool.setPos(pos).move(direction)).getBlock() != this) {
pool.move(Direction.DOWN); pool.move(Direction.DOWN);
BlockState blockstate = worldIn.getBlockState(pool); BlockState blockstate = worldIn.getBlockState(pool);
if (blockstate.getBlock() != Blocks.OBSERVER) { if (blockstate.getBlock() != Blocks.OBSERVER) {
BlockPos blockpos = pool.offset(direction.getOpposite()); BlockPos blockpos = pool.offset(direction.getOpposite());
BlockState blockstate1 = blockstate.updatePostPlacement(direction.getOpposite(), worldIn.getBlockState(blockpos), worldIn, pool, blockpos); BlockState blockstate1 = blockstate.updatePostPlacement(direction.getOpposite(), worldIn.getBlockState(blockpos), worldIn, pool, blockpos);
replaceBlock(blockstate, blockstate1, worldIn, pool, flags); replaceBlock(blockstate, blockstate1, worldIn, pool, flags);
} }
pool.setPos(pos).move(direction).move(Direction.UP); pool.setPos(pos).move(direction).move(Direction.UP);
BlockState blockstate3 = worldIn.getBlockState(pool); BlockState blockstate3 = worldIn.getBlockState(pool);
if (blockstate3.getBlock() != Blocks.OBSERVER) { if (blockstate3.getBlock() != Blocks.OBSERVER) {
BlockPos blockpos1 = pool.offset(direction.getOpposite()); BlockPos blockpos1 = pool.offset(direction.getOpposite());
BlockState blockstate2 = blockstate3.updatePostPlacement(direction.getOpposite(), worldIn.getBlockState(blockpos1), worldIn, pool, blockpos1); BlockState blockstate2 = blockstate3.updatePostPlacement(direction.getOpposite(), worldIn.getBlockState(blockpos1), worldIn, pool, blockpos1);
replaceBlock(blockstate3, blockstate2, worldIn, pool, flags); replaceBlock(blockstate3, blockstate2, worldIn, pool, flags);
}
} }
} }
} }
@ -235,6 +234,6 @@ public class BlockGoldPowder extends BlockImpl implements IColorProvidingBlock,
@Override @Override
public Supplier<RenderType> getRenderType() { public Supplier<RenderType> getRenderType() {
return RenderType::cutoutMipped; return RenderType::getCutoutMipped;
} }
} }

View file

@ -36,11 +36,11 @@ public class BlockGoldenLeaves extends LeavesBlock implements IModItem, IColorPr
public static boolean convert(World world, BlockPos pos) { public static boolean convert(World world, BlockPos pos) {
BlockState state = world.getBlockState(pos); BlockState state = world.getBlockState(pos);
if ((state.getBlock().isFoliage(state, world, pos) || state.getBlock() instanceof LeavesBlock) && !(state.getBlock() instanceof BlockAncientLeaves || state.getBlock() instanceof BlockGoldenLeaves)) { if (state.getBlock() instanceof LeavesBlock && !(state.getBlock() instanceof BlockAncientLeaves || state.getBlock() instanceof BlockGoldenLeaves)) {
if (!world.isRemote) { if (!world.isRemote) {
world.setBlockState(pos, ModBlocks.GOLDEN_LEAVES.getDefaultState() world.setBlockState(pos, ModBlocks.GOLDEN_LEAVES.getDefaultState()
.with(DISTANCE, state.has(DISTANCE) ? state.get(DISTANCE) : 1) .with(DISTANCE, state.hasProperty(DISTANCE) ? state.get(DISTANCE) : 1)
.with(PERSISTENT, state.has(PERSISTENT) ? state.get(PERSISTENT) : false)); .with(PERSISTENT, state.hasProperty(PERSISTENT) ? state.get(PERSISTENT) : false));
} }
return true; return true;
} }
@ -76,7 +76,7 @@ public class BlockGoldenLeaves extends LeavesBlock implements IModItem, IColorPr
return (state, worldIn, pos, tintIndex) -> { return (state, worldIn, pos, tintIndex) -> {
int color = 0xF2FF00; int color = 0xF2FF00;
if (state != null && worldIn != null && pos != null) { if (state != null && worldIn != null && pos != null) {
int foliage = BiomeColors.func_228361_b_(worldIn, pos); int foliage = BiomeColors.getFoliageColor(worldIn, pos);
return Helper.blendColors(color, foliage, state.get(STAGE) / (float) HIGHEST_STAGE); return Helper.blendColors(color, foliage, state.get(STAGE) / (float) HIGHEST_STAGE);
} else { } else {
return color; return color;
@ -100,7 +100,7 @@ public class BlockGoldenLeaves extends LeavesBlock implements IModItem, IColorPr
} }
if (stage > 1) { if (stage > 1) {
BlockPos offset = pos.offset(Direction.random(random)); BlockPos offset = pos.offset(Direction.func_239631_a_(random));
if (worldIn.isBlockLoaded(offset)) if (worldIn.isBlockLoaded(offset))
convert(worldIn, offset); convert(worldIn, offset);
} }

View file

@ -95,7 +95,7 @@ public class BlockGratedChute extends BlockContainerImpl implements ICustomBlock
@Override @Override
public ActionResultType onBlockActivated(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn, BlockRayTraceResult hit) { public ActionResultType onBlockActivated(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn, BlockRayTraceResult hit) {
if (!player.isShiftKeyDown()) if (!player.isSneaking())
return ActionResultType.FAIL; return ActionResultType.FAIL;
TileEntity tile = worldIn.getTileEntity(pos); TileEntity tile = worldIn.getTileEntity(pos);
if (!(tile instanceof TileEntityGratedChute)) if (!(tile instanceof TileEntityGratedChute))

View file

@ -21,7 +21,7 @@ public class BlockItemDistributor extends BlockContainerImpl implements ICustomB
@Override @Override
public ActionResultType onBlockActivated(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn, BlockRayTraceResult hit) { public ActionResultType onBlockActivated(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn, BlockRayTraceResult hit) {
if (!player.isShiftKeyDown()) if (!player.isSneaking())
return ActionResultType.FAIL; return ActionResultType.FAIL;
TileEntity tile = worldIn.getTileEntity(pos); TileEntity tile = worldIn.getTileEntity(pos);
if (!(tile instanceof TileEntityItemDistributor)) if (!(tile instanceof TileEntityItemDistributor))

View file

@ -26,7 +26,7 @@ public class BlockLight extends BlockImpl implements ICustomBlockState, INoItemB
private static final VoxelShape SHAPE = makeCuboidShape(4, 4, 4, 12, 12, 12); private static final VoxelShape SHAPE = makeCuboidShape(4, 4, 4, 12, 12, 12);
public BlockLight() { public BlockLight() {
super("light", Properties.create(Material.WOOL).doesNotBlockMovement().lightValue(15)); super("light", Properties.create(Material.WOOL).doesNotBlockMovement().setLightLevel(s -> 15));
} }
@Override @Override
@ -57,6 +57,6 @@ public class BlockLight extends BlockImpl implements ICustomBlockState, INoItemB
@Override @Override
public Supplier<RenderType> getRenderType() { public Supplier<RenderType> getRenderType() {
return RenderType::cutout; return RenderType::getCutoutMipped;
} }
} }

View file

@ -72,7 +72,7 @@ public class BlockNetherGrass extends BlockImpl implements ICustomBlockState, IG
} }
blockpos1 = blockpos1.add(rand.nextInt(3) - 1, (rand.nextInt(3) - 1) * rand.nextInt(3) / 2, rand.nextInt(3) - 1); blockpos1 = blockpos1.add(rand.nextInt(3) - 1, (rand.nextInt(3) - 1) * rand.nextInt(3) / 2, rand.nextInt(3) - 1);
if (world.getBlockState(blockpos1.down()).getBlock() != this || world.getBlockState(blockpos1).isCollisionShapeOpaque(world, blockpos1)) { if (world.getBlockState(blockpos1.down()).getBlock() != this || world.getBlockState(blockpos1).hasOpaqueCollisionShape(world, blockpos1)) {
break; break;
} }

View file

@ -31,7 +31,7 @@ public class BlockPickupStopper extends BlockContainerImpl implements IVisualiza
@SubscribeEvent @SubscribeEvent
public void onPickup(EntityItemPickupEvent event) { public void onPickup(EntityItemPickupEvent event) {
PlayerEntity player = event.getPlayer(); PlayerEntity player = event.getPlayer();
if (player != null && !player.isShiftKeyDown()) { if (player != null && !player.isSneaking()) {
ItemEntity item = event.getItem(); ItemEntity item = event.getItem();
BlockPos pos = item.getPosition(); BlockPos pos = item.getPosition();
Helper.getTileEntitiesInArea(item.world, pos, 8, tile -> { Helper.getTileEntitiesInArea(item.world, pos, 8, tile -> {

View file

@ -18,13 +18,14 @@ import net.minecraft.entity.MobEntity;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Vec3d;
import net.minecraft.util.math.shapes.ISelectionContext; import net.minecraft.util.math.shapes.ISelectionContext;
import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.util.math.shapes.VoxelShape;
import net.minecraft.util.math.shapes.VoxelShapes; import net.minecraft.util.math.shapes.VoxelShapes;
import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.world.IBlockReader; import net.minecraft.world.IBlockReader;
import net.minecraft.world.IWorld; import net.minecraft.world.IWorld;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraft.world.server.ServerWorld;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.MinecraftForge;
@ -39,7 +40,7 @@ public class BlockSpawnLamp extends BlockContainerImpl implements IVisualizable,
private static final VoxelShape SHAPE = VoxelShapes.create(4 / 16F, 0F, 4 / 16F, 12 / 16F, 13 / 16F, 12 / 16F); private static final VoxelShape SHAPE = VoxelShapes.create(4 / 16F, 0F, 4 / 16F, 12 / 16F, 13 / 16F, 12 / 16F);
public BlockSpawnLamp() { public BlockSpawnLamp() {
super("spawn_lamp", TileEntitySpawnLamp::new, ModBlocks.prop(Material.IRON).hardnessAndResistance(3F).lightValue(15).sound(SoundType.METAL)); super("spawn_lamp", TileEntitySpawnLamp::new, ModBlocks.prop(Material.IRON).hardnessAndResistance(3F).setLightLevel(s -> 15).sound(SoundType.METAL));
MinecraftForge.EVENT_BUS.register(this); MinecraftForge.EVENT_BUS.register(this);
} }
@ -66,7 +67,7 @@ public class BlockSpawnLamp extends BlockContainerImpl implements IVisualizable,
continue; continue;
BlockPos lampPos = lamp.getPos(); BlockPos lampPos = lamp.getPos();
if (!new AxisAlignedBB(lampPos).grow(range).contains(new Vec3d(pos))) if (!new AxisAlignedBB(lampPos).grow(range).contains(new Vector3d(pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5)))
continue; continue;
MobEntity entity = (MobEntity) event.getEntityLiving(); MobEntity entity = (MobEntity) event.getEntityLiving();
@ -74,7 +75,7 @@ public class BlockSpawnLamp extends BlockContainerImpl implements IVisualizable,
BlockPos spot = IAuraChunk.getHighestSpot(world, lampPos, 32, lampPos); BlockPos spot = IAuraChunk.getHighestSpot(world, lampPos, 32, lampPos);
IAuraChunk.getAuraChunk(world, spot).drainAura(spot, 200); IAuraChunk.getAuraChunk(world, spot).drainAura(spot, 200);
PacketHandler.sendToAllAround(world, lampPos, 32, PacketHandler.sendToAllAround((ServerWorld) world, lampPos, 32,
new PacketParticles(lampPos.getX(), lampPos.getY(), lampPos.getZ(), PacketParticles.Type.SPAWN_LAMP)); new PacketParticles(lampPos.getX(), lampPos.getY(), lampPos.getZ(), PacketParticles.Type.SPAWN_LAMP));
} }
@ -113,6 +114,6 @@ public class BlockSpawnLamp extends BlockContainerImpl implements IVisualizable,
@Override @Override
public Supplier<RenderType> getRenderType() { public Supplier<RenderType> getRenderType() {
return RenderType::cutoutMipped; return RenderType::getCutoutMipped;
} }
} }

View file

@ -9,8 +9,8 @@ import de.ellpeck.naturesaura.blocks.BlockNatureAltar;
import de.ellpeck.naturesaura.blocks.ModBlocks; import de.ellpeck.naturesaura.blocks.ModBlocks;
import de.ellpeck.naturesaura.recipes.ModRecipes; import de.ellpeck.naturesaura.recipes.ModRecipes;
import net.minecraft.block.Blocks; import net.minecraft.block.Blocks;
import net.minecraft.block.LogBlock;
import net.minecraft.block.SaplingBlock; import net.minecraft.block.SaplingBlock;
import net.minecraft.block.material.Material;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.tags.BlockTags; import net.minecraft.tags.BlockTags;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
@ -49,7 +49,7 @@ public final class Multiblocks {
'G', ModBlocks.GOLD_POWDER, 'G', ModBlocks.GOLD_POWDER,
'0', new Matcher(Blocks.OAK_SAPLING.getDefaultState(), '0', new Matcher(Blocks.OAK_SAPLING.getDefaultState(),
(world, start, offset, pos, state, c) -> { (world, start, offset, pos, state, c) -> {
if (state.getBlock() instanceof SaplingBlock || state.getBlock() instanceof LogBlock) if (state.getBlock() instanceof SaplingBlock || state.getMaterial() == Material.WOOD)
return true; return true;
// try-catch to prevent blocks that need to have been placed crashing here // try-catch to prevent blocks that need to have been placed crashing here
try { try {

View file

@ -5,7 +5,7 @@ import de.ellpeck.naturesaura.packet.PacketParticles;
import net.minecraft.entity.passive.AnimalEntity; import net.minecraft.entity.passive.AnimalEntity;
import net.minecraft.tileentity.ITickableTileEntity; import net.minecraft.tileentity.ITickableTileEntity;
import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.vector.Vector3d;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
@ -38,13 +38,13 @@ public class TileEntityAnimalContainer extends TileEntityImpl implements ITickab
for (AnimalEntity animal : animalsOutRange) { for (AnimalEntity animal : animalsOutRange) {
if (animalsInRange.contains(animal)) if (animalsInRange.contains(animal))
continue; continue;
Vec3d pos = animal.getPositionVec(); Vector3d pos = animal.getPositionVec();
Vec3d distance = pos.subtract(this.pos.getX(), pos.getY(), this.pos.getZ()); Vector3d distance = pos.subtract(this.pos.getX(), pos.getY(), this.pos.getZ());
distance = distance.normalize().scale(-0.15F); distance = distance.normalize().scale(-0.15F);
animal.setMotion(distance); animal.setMotion(distance);
if (this.world.rand.nextBoolean()) { if (this.world.rand.nextBoolean()) {
Vec3d eye = animal.getEyePosition(1).add(animal.getLookVec()); Vector3d eye = animal.getEyePosition(1).add(animal.getLookVec());
PacketHandler.sendToAllAround(this.world, this.pos, 32, PacketHandler.sendToAllAround(this.world, this.pos, 32,
new PacketParticles((float) eye.getX(), (float) eye.getY(), (float) eye.getZ(), PacketParticles.Type.ANIMAL_CONTAINER)); new PacketParticles((float) eye.getX(), (float) eye.getY(), (float) eye.getZ(), PacketParticles.Type.ANIMAL_CONTAINER));
} }

View file

@ -73,7 +73,7 @@ public class TileEntityAuraTimer extends TileEntityImpl implements ITickableTile
BlockState state = this.getBlockState(); BlockState state = this.getBlockState();
this.world.setBlockState(this.pos, state.with(BlockStateProperties.POWERED, true), 1); this.world.setBlockState(this.pos, state.with(BlockStateProperties.POWERED, true), 1);
this.world.getPendingBlockTicks().scheduleTick(this.pos, state.getBlock(), state.getBlock().tickRate(this.world)); this.world.getPendingBlockTicks().scheduleTick(this.pos, state.getBlock(), 4);
int color = ItemAuraBottle.getType(this.itemHandler.getStackInSlot(0)).getColor(); int color = ItemAuraBottle.getType(this.itemHandler.getStackInSlot(0)).getColor();
PacketHandler.sendToAllAround(this.world, this.pos, 32, new PacketParticles(this.pos.getX(), this.pos.getY(), this.pos.getZ(), PacketParticles.Type.TIMER_RESET, color)); PacketHandler.sendToAllAround(this.world, this.pos, 32, new PacketParticles(this.pos.getX(), this.pos.getY(), this.pos.getZ(), PacketParticles.Type.TIMER_RESET, color));

View file

@ -11,15 +11,15 @@ import net.minecraft.block.BlockState;
import net.minecraft.entity.item.ItemFrameEntity; import net.minecraft.entity.item.ItemFrameEntity;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.item.Items; import net.minecraft.item.Items;
import net.minecraft.loot.LootContext;
import net.minecraft.loot.LootParameters;
import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.CompoundNBT;
import net.minecraft.tileentity.ITickableTileEntity; import net.minecraft.tileentity.ITickableTileEntity;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.world.server.ServerWorld; import net.minecraft.world.server.ServerWorld;
import net.minecraft.world.storage.loot.LootContext;
import net.minecraft.world.storage.loot.LootParameters;
import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.common.util.FakePlayer; import net.minecraftforge.common.util.FakePlayer;
import net.minecraftforge.common.util.FakePlayerFactory; import net.minecraftforge.common.util.FakePlayerFactory;
@ -95,15 +95,15 @@ public class TileEntityFieldCreator extends TileEntityImpl implements ITickableT
chunk.drainAura(spot, 100); chunk.drainAura(spot, 100);
ItemStack tool = this.getToolUsed(creator); ItemStack tool = this.getToolUsed(creator);
Vec3d dist = new Vec3d( Vector3d dist = new Vector3d(
this.pos.getX() - connectedPos.getX(), this.pos.getX() - connectedPos.getX(),
this.pos.getY() - connectedPos.getY(), this.pos.getY() - connectedPos.getY(),
this.pos.getZ() - connectedPos.getZ() this.pos.getZ() - connectedPos.getZ()
); );
double length = dist.length(); double length = dist.length();
Vec3d normal = new Vec3d(dist.x / length, dist.y / length, dist.z / length); Vector3d normal = new Vector3d(dist.x / length, dist.y / length, dist.z / length);
for (float i = MathHelper.floor(length); i > 0; i -= 0.5F) { for (float i = MathHelper.floor(length); i > 0; i -= 0.5F) {
Vec3d scaled = normal.scale(i); Vector3d scaled = normal.scale(i);
BlockPos pos = connectedPos.add( BlockPos pos = connectedPos.add(
MathHelper.floor(scaled.x + 0.5F), MathHelper.floor(scaled.x + 0.5F),
MathHelper.floor(scaled.y + 0.5F), MathHelper.floor(scaled.y + 0.5F),
@ -118,7 +118,7 @@ public class TileEntityFieldCreator extends TileEntityImpl implements ITickableT
FakePlayer fake = FakePlayerFactory.getMinecraft((ServerWorld) this.world); FakePlayer fake = FakePlayerFactory.getMinecraft((ServerWorld) this.world);
if (!MinecraftForge.EVENT_BUS.post(new BlockEvent.BreakEvent(this.world, pos, state, fake))) { if (!MinecraftForge.EVENT_BUS.post(new BlockEvent.BreakEvent(this.world, pos, state, fake))) {
List<ItemStack> drops = state.getDrops(new LootContext.Builder((ServerWorld) this.world) List<ItemStack> drops = state.getDrops(new LootContext.Builder((ServerWorld) this.world)
.withParameter(LootParameters.POSITION, pos) .withParameter(LootParameters.field_237457_g_, Vector3d.copyCentered(pos))
.withParameter(LootParameters.BLOCK_STATE, state) .withParameter(LootParameters.BLOCK_STATE, state)
.withParameter(LootParameters.TOOL, tool == null ? new ItemStack(Items.DIAMOND_PICKAXE) : tool) .withParameter(LootParameters.TOOL, tool == null ? new ItemStack(Items.DIAMOND_PICKAXE) : tool)
.withNullableParameter(LootParameters.BLOCK_ENTITY, this.world.getTileEntity(pos))); .withNullableParameter(LootParameters.BLOCK_ENTITY, this.world.getTileEntity(pos)));

View file

@ -4,8 +4,8 @@ import com.google.common.primitives.Ints;
import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk; import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk;
import de.ellpeck.naturesaura.packet.PacketHandler; import de.ellpeck.naturesaura.packet.PacketHandler;
import de.ellpeck.naturesaura.packet.PacketParticles; import de.ellpeck.naturesaura.packet.PacketParticles;
import net.minecraft.entity.item.FireworkRocketEntity;
import net.minecraft.entity.item.ItemEntity; import net.minecraft.entity.item.ItemEntity;
import net.minecraft.entity.projectile.FireworkRocketEntity;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.item.Items; import net.minecraft.item.Items;
import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.CompoundNBT;

View file

@ -40,7 +40,7 @@ public class TileEntityImpl extends TileEntity {
} }
@Override @Override
public void read(CompoundNBT compound) { public void read(BlockState state, CompoundNBT compound) {
this.readNBT(compound, SaveType.TILE); this.readNBT(compound, SaveType.TILE);
} }
@ -53,7 +53,7 @@ public class TileEntityImpl extends TileEntity {
public void readNBT(CompoundNBT compound, SaveType type) { public void readNBT(CompoundNBT compound, SaveType type) {
if (type != SaveType.BLOCK) { if (type != SaveType.BLOCK) {
super.read(compound); super.read(this.getBlockState(), compound);
this.redstonePower = compound.getInt("redstone"); this.redstonePower = compound.getInt("redstone");
} }
} }
@ -77,8 +77,9 @@ public class TileEntityImpl extends TileEntity {
} }
@Override @Override
public void handleUpdateTag(CompoundNBT tag) { public void handleUpdateTag(BlockState state, CompoundNBT tag) {
this.readNBT(tag, SaveType.SYNC); this.readNBT(tag, SaveType.SYNC);
} }
@Override @Override

View file

@ -3,7 +3,7 @@ package de.ellpeck.naturesaura.blocks.tiles;
import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk; import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk;
import de.ellpeck.naturesaura.packet.PacketHandler; import de.ellpeck.naturesaura.packet.PacketHandler;
import de.ellpeck.naturesaura.packet.PacketParticles; import de.ellpeck.naturesaura.packet.PacketParticles;
import net.minecraft.block.LogBlock; import net.minecraft.tags.BlockTags;
import net.minecraft.tileentity.ITickableTileEntity; import net.minecraft.tileentity.ITickableTileEntity;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
@ -23,7 +23,7 @@ public class TileEntityOakGenerator extends TileEntityImpl implements ITickableT
if (!this.world.isRemote) if (!this.world.isRemote)
while (!this.scheduledBigTrees.isEmpty()) { while (!this.scheduledBigTrees.isEmpty()) {
BlockPos pos = this.scheduledBigTrees.remove(); BlockPos pos = this.scheduledBigTrees.remove();
if (this.world.getBlockState(pos).getBlock() instanceof LogBlock) { if (this.world.getBlockState(pos).getBlock().getTags().contains(BlockTags.LOGS.getName())) {
int toAdd = 100000; int toAdd = 100000;
boolean canGen = this.canGenerateRightNow(25, toAdd); boolean canGen = this.canGenerateRightNow(25, toAdd);
if (canGen) if (canGen)

View file

@ -7,6 +7,7 @@ import de.ellpeck.naturesaura.recipes.OfferingRecipe;
import de.ellpeck.naturesaura.blocks.multi.Multiblocks; import de.ellpeck.naturesaura.blocks.multi.Multiblocks;
import de.ellpeck.naturesaura.packet.PacketHandler; import de.ellpeck.naturesaura.packet.PacketHandler;
import de.ellpeck.naturesaura.packet.PacketParticles; import de.ellpeck.naturesaura.packet.PacketParticles;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.effect.LightningBoltEntity; import net.minecraft.entity.effect.LightningBoltEntity;
import net.minecraft.entity.item.ItemEntity; import net.minecraft.entity.item.ItemEntity;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
@ -16,6 +17,7 @@ import net.minecraft.nbt.ListNBT;
import net.minecraft.tileentity.ITickableTileEntity; import net.minecraft.tileentity.ITickableTileEntity;
import net.minecraft.util.Direction; import net.minecraft.util.Direction;
import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraft.world.server.ServerWorld; import net.minecraft.world.server.ServerWorld;
import net.minecraftforge.items.IItemHandlerModifiable; import net.minecraftforge.items.IItemHandlerModifiable;
@ -84,7 +86,9 @@ public class TileEntityOfferingTable extends TileEntityImpl implements ITickable
for (int i = 0; i < recipeCount; i++) for (int i = 0; i < recipeCount; i++)
this.itemsToSpawn.add(recipe.output.copy()); this.itemsToSpawn.add(recipe.output.copy());
((ServerWorld) this.world).addLightningBolt(new LightningBoltEntity(this.world, this.pos.getX(), this.pos.getY(), this.pos.getZ(), true)); LightningBoltEntity lightningboltentity = EntityType.LIGHTNING_BOLT.create(this.world);
lightningboltentity.moveForced(Vector3d.copyCenteredHorizontally(this.pos));
this.world.addEntity(lightningboltentity);
PacketHandler.sendToAllAround(this.world, this.pos, 32, new PacketParticles( PacketHandler.sendToAllAround(this.world, this.pos, 32, new PacketParticles(
(float) item.getPosX(), (float) item.getPosY(), (float) item.getPosZ(), PacketParticles.Type.OFFERING_TABLE, (float) item.getPosX(), (float) item.getPosY(), (float) item.getPosZ(), PacketParticles.Type.OFFERING_TABLE,
this.pos.getX(), this.pos.getY(), this.pos.getZ())); this.pos.getX(), this.pos.getY(), this.pos.getZ()));

View file

@ -16,7 +16,7 @@ import net.minecraft.util.Direction;
import net.minecraft.util.Hand; import net.minecraft.util.Hand;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.util.math.BlockRayTraceResult;
import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.world.server.ServerWorld; import net.minecraft.world.server.ServerWorld;
import net.minecraftforge.common.ForgeHooks; import net.minecraftforge.common.ForgeHooks;
import net.minecraftforge.common.util.FakePlayer; import net.minecraftforge.common.util.FakePlayer;
@ -109,7 +109,7 @@ public class TileEntityPlacer extends TileEntityImpl implements ITickableTileEnt
return stack; return stack;
FakePlayer fake = FakePlayerFactory.getMinecraft((ServerWorld) this.world); FakePlayer fake = FakePlayerFactory.getMinecraft((ServerWorld) this.world);
fake.inventory.mainInventory.set(fake.inventory.currentItem, stack); fake.inventory.mainInventory.set(fake.inventory.currentItem, stack);
BlockRayTraceResult ray = new BlockRayTraceResult(new Vec3d(pos).add(0.5F, 0.5F, 0.5F), Direction.UP, pos, false); BlockRayTraceResult ray = new BlockRayTraceResult(Vector3d.copyCentered(pos), Direction.UP, pos, false);
ForgeHooks.onPlaceItemIntoWorld(new ItemUseContext(fake, Hand.MAIN_HAND, ray)); ForgeHooks.onPlaceItemIntoWorld(new ItemUseContext(fake, Hand.MAIN_HAND, ray));
return fake.getHeldItemMainhand().copy(); return fake.getHeldItemMainhand().copy();
} }

View file

@ -14,7 +14,6 @@ import net.minecraft.nbt.CompoundNBT;
import net.minecraft.tileentity.ITickableTileEntity; import net.minecraft.tileentity.ITickableTileEntity;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.Vec3d;
import net.minecraft.world.gen.Heightmap; import net.minecraft.world.gen.Heightmap;
public class TileEntitySnowCreator extends TileEntityImpl implements ITickableTileEntity { public class TileEntitySnowCreator extends TileEntityImpl implements ITickableTileEntity {

View file

@ -19,6 +19,7 @@ import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.MathHelper;
import net.minecraft.world.GameRules; import net.minecraft.world.GameRules;
import net.minecraft.world.server.ServerWorld; import net.minecraft.world.server.ServerWorld;
import net.minecraft.world.storage.ServerWorldInfo;
import java.util.List; import java.util.List;
@ -47,16 +48,16 @@ public class TileEntityTimeChanger extends TileEntityImpl implements ITickableTi
this.sendToClients(); this.sendToClients();
return; return;
} }
this.world.setDayTime(current + toAdd); ((ServerWorldInfo) this.world.getWorldInfo()).setDayTime(current + toAdd);
BlockPos spot = IAuraChunk.getHighestSpot(this.world, this.pos, 35, this.pos); BlockPos spot = IAuraChunk.getHighestSpot(this.world, this.pos, 35, this.pos);
IAuraChunk.getAuraChunk(this.world, spot).drainAura(spot, (int) toAdd * 20); IAuraChunk.getAuraChunk(this.world, spot).drainAura(spot, (int) toAdd * 20);
if (this.world instanceof ServerWorld) { if (this.world instanceof ServerWorld) {
PlayerList list = this.world.getServer().getPlayerList(); PlayerList list = this.world.getServer().getPlayerList();
list.sendPacketToAllPlayersInDimension(new SUpdateTimePacket( list.sendPacketToAllPlayers(new SUpdateTimePacket(
this.world.getGameTime(), this.world.getDayTime(), this.world.getGameTime(), this.world.getDayTime(),
this.world.getGameRules().getBoolean(GameRules.DO_DAYLIGHT_CYCLE)), this.world.getDimension().getType()); this.world.getGameRules().getBoolean(GameRules.DO_DAYLIGHT_CYCLE)));
} }
return; return;
} }

View file

@ -9,11 +9,11 @@ import de.ellpeck.naturesaura.packet.PacketParticles;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks; import net.minecraft.block.Blocks;
import net.minecraft.block.LeavesBlock; import net.minecraft.block.LeavesBlock;
import net.minecraft.block.LogBlock;
import net.minecraft.entity.item.ItemEntity; import net.minecraft.entity.item.ItemEntity;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.Ingredient; import net.minecraft.item.crafting.Ingredient;
import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.CompoundNBT;
import net.minecraft.tags.BlockTags;
import net.minecraft.tileentity.ITickableTileEntity; import net.minecraft.tileentity.ITickableTileEntity;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.Direction; import net.minecraft.util.Direction;
@ -140,7 +140,7 @@ public class TileEntityWoodStand extends TileEntityImpl implements ITickableTile
for (int z = -1; z <= 1; z++) { for (int z = -1; z <= 1; z++) {
BlockPos offset = pos.add(x, y, z); BlockPos offset = pos.add(x, y, z);
BlockState state = world.getBlockState(offset); BlockState state = world.getBlockState(offset);
if (state.getBlock() instanceof LogBlock || includeLeaves && state.getBlock() instanceof LeavesBlock) { if (state.getBlock().getTags().contains(BlockTags.LOGS.getName()) || includeLeaves && state.getBlock() instanceof LeavesBlock) {
if (drop) { if (drop) {
world.destroyBlock(offset, true); world.destroyBlock(offset, true);
} else { } else {
@ -161,7 +161,7 @@ public class TileEntityWoodStand extends TileEntityImpl implements ITickableTile
} }
for (int i = 0; i < 2; i++) { for (int i = 0; i < 2; i++) {
BlockState state = this.world.getBlockState(this.ritualPos.up(i)); BlockState state = this.world.getBlockState(this.ritualPos.up(i));
if (!(state.getBlock() instanceof LogBlock)) if (!(state.getBlock().getTags().contains(BlockTags.LOGS.getName())))
return false; return false;
} }
if (this.timer < this.recipe.time / 2) { if (this.timer < this.recipe.time / 2) {

View file

@ -49,7 +49,7 @@ public class RenderAuraTimer extends TileEntityRenderer<TileEntityAuraTimer> {
private final ModelRenderer box; private final ModelRenderer box;
public AuraModel() { public AuraModel() {
super(RenderType::entityTranslucent); super(RenderType::getEntityTranslucent);
this.box = new ModelRenderer(this, 0, 0); this.box = new ModelRenderer(this, 0, 0);
this.box.setTextureSize(64, 64); this.box.setTextureSize(64, 64);
this.box.addBox(0, 0, 0, 16, 16, 16); this.box.addBox(0, 0, 0, 16, 16, 16);

View file

@ -5,10 +5,10 @@ import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.vertex.IVertexBuilder; import com.mojang.blaze3d.vertex.IVertexBuilder;
import de.ellpeck.naturesaura.blocks.tiles.TileEntityEnderCrate; import de.ellpeck.naturesaura.blocks.tiles.TileEntityEnderCrate;
import net.minecraft.client.renderer.IRenderTypeBuffer; import net.minecraft.client.renderer.IRenderTypeBuffer;
import net.minecraft.client.renderer.Matrix4f;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.tileentity.TileEntityRenderer; import net.minecraft.client.renderer.tileentity.TileEntityRenderer;
import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
import net.minecraft.util.math.vector.Matrix4f;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
@ -19,7 +19,7 @@ import java.util.stream.IntStream;
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)
public class RenderEnderCrate extends TileEntityRenderer<TileEntityEnderCrate> { public class RenderEnderCrate extends TileEntityRenderer<TileEntityEnderCrate> {
private static final Random RANDOM = new Random(31100L); private static final Random RANDOM = new Random(31100L);
private static final List<RenderType> RENDER_TYPES = IntStream.range(0, 16).mapToObj(i -> RenderType.endPortal(i + 1)).collect(ImmutableList.toImmutableList()); private static final List<RenderType> RENDER_TYPES = IntStream.range(0, 16).mapToObj(i -> RenderType.getEndPortal(i + 1)).collect(ImmutableList.toImmutableList());
public RenderEnderCrate(TileEntityRendererDispatcher rendererDispatcherIn) { public RenderEnderCrate(TileEntityRendererDispatcher rendererDispatcherIn) {
super(rendererDispatcherIn); super(rendererDispatcherIn);
@ -31,7 +31,7 @@ public class RenderEnderCrate extends TileEntityRenderer<TileEntityEnderCrate> {
double d0 = tileEntityIn.getPos().distanceSq(this.renderDispatcher.renderInfo.getProjectedView(), true); double d0 = tileEntityIn.getPos().distanceSq(this.renderDispatcher.renderInfo.getProjectedView(), true);
int i = this.getPasses(d0); int i = this.getPasses(d0);
float f = this.getOffset(); float f = this.getOffset();
Matrix4f matrix4f = matrixStackIn.getLast().getPositionMatrix(); Matrix4f matrix4f = matrixStackIn.getLast().getMatrix();
this.renderCube(f, 0.15F, matrix4f, bufferIn.getBuffer(RENDER_TYPES.get(0))); this.renderCube(f, 0.15F, matrix4f, bufferIn.getBuffer(RENDER_TYPES.get(0)));
for (int j = 1; j < i; ++j) { for (int j = 1; j < i; ++j) {

View file

@ -7,13 +7,13 @@ import de.ellpeck.naturesaura.blocks.tiles.TileEntityGeneratorLimitRemover;
import de.ellpeck.naturesaura.blocks.tiles.TileEntityImpl; import de.ellpeck.naturesaura.blocks.tiles.TileEntityImpl;
import net.minecraft.client.renderer.IRenderTypeBuffer; import net.minecraft.client.renderer.IRenderTypeBuffer;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.Vector3f;
import net.minecraft.client.renderer.model.Model; import net.minecraft.client.renderer.model.Model;
import net.minecraft.client.renderer.model.ModelRenderer; import net.minecraft.client.renderer.model.ModelRenderer;
import net.minecraft.client.renderer.tileentity.TileEntityRenderer; import net.minecraft.client.renderer.tileentity.TileEntityRenderer;
import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.vector.Vector3f;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
@ -51,7 +51,7 @@ public class RenderGeneratorLimitRemover extends TileEntityRenderer<TileEntityGe
private final ModelRenderer box; private final ModelRenderer box;
public ModelLimitRemoverGlint() { public ModelLimitRemoverGlint() {
super(RenderType::entityTranslucent); super(RenderType::getEntityTranslucent);
this.box = new ModelRenderer(this, 0, 0); this.box = new ModelRenderer(this, 0, 0);
this.box.setTextureSize(64, 64); this.box.setTextureSize(64, 64);
this.box.addBox(0, 0, 0, 16, 16, 16); this.box.addBox(0, 0, 0, 16, 16, 16);

View file

@ -4,11 +4,11 @@ import com.mojang.blaze3d.matrix.MatrixStack;
import de.ellpeck.naturesaura.blocks.tiles.TileEntityNatureAltar; import de.ellpeck.naturesaura.blocks.tiles.TileEntityNatureAltar;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.IRenderTypeBuffer; import net.minecraft.client.renderer.IRenderTypeBuffer;
import net.minecraft.client.renderer.Vector3f;
import net.minecraft.client.renderer.model.ItemCameraTransforms; import net.minecraft.client.renderer.model.ItemCameraTransforms;
import net.minecraft.client.renderer.tileentity.TileEntityRenderer; import net.minecraft.client.renderer.tileentity.TileEntityRenderer;
import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.math.vector.Vector3f;
public class RenderNatureAltar extends TileEntityRenderer<TileEntityNatureAltar> { public class RenderNatureAltar extends TileEntityRenderer<TileEntityNatureAltar> {
public RenderNatureAltar(TileEntityRendererDispatcher rendererDispatcherIn) { public RenderNatureAltar(TileEntityRendererDispatcher rendererDispatcherIn) {

View file

@ -4,7 +4,6 @@ import com.mojang.blaze3d.matrix.MatrixStack;
import de.ellpeck.naturesaura.blocks.tiles.TileEntityOfferingTable; import de.ellpeck.naturesaura.blocks.tiles.TileEntityOfferingTable;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.IRenderTypeBuffer; import net.minecraft.client.renderer.IRenderTypeBuffer;
import net.minecraft.client.renderer.Vector3f;
import net.minecraft.client.renderer.model.ItemCameraTransforms; import net.minecraft.client.renderer.model.ItemCameraTransforms;
import net.minecraft.client.renderer.tileentity.TileEntityRenderer; import net.minecraft.client.renderer.tileentity.TileEntityRenderer;
import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
@ -12,6 +11,7 @@ import net.minecraft.item.BlockItem;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.vector.Vector3f;
import java.util.Random; import java.util.Random;

View file

@ -6,13 +6,13 @@ import de.ellpeck.naturesaura.NaturesAura;
import de.ellpeck.naturesaura.blocks.tiles.TileEntityProjectileGenerator; import de.ellpeck.naturesaura.blocks.tiles.TileEntityProjectileGenerator;
import net.minecraft.client.renderer.IRenderTypeBuffer; import net.minecraft.client.renderer.IRenderTypeBuffer;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.Vector3f;
import net.minecraft.client.renderer.model.Model; import net.minecraft.client.renderer.model.Model;
import net.minecraft.client.renderer.model.ModelRenderer; import net.minecraft.client.renderer.model.ModelRenderer;
import net.minecraft.client.renderer.tileentity.TileEntityRenderer; import net.minecraft.client.renderer.tileentity.TileEntityRenderer;
import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
import net.minecraft.util.Direction; import net.minecraft.util.Direction;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.vector.Vector3f;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
@ -50,7 +50,7 @@ public class RenderProjectileGenerator extends TileEntityRenderer<TileEntityProj
private final ModelRenderer box; private final ModelRenderer box;
public ModelOverlay() { public ModelOverlay() {
super(RenderType::entityTranslucent); super(RenderType::getEntityTranslucent);
this.box = new ModelRenderer(this, 0, 0); this.box = new ModelRenderer(this, 0, 0);
this.box.setTextureSize(64, 64); this.box.setTextureSize(64, 64);
this.box.addBox(0, 0, 0, 16, 16, 16); this.box.addBox(0, 0, 0, 16, 16, 16);

View file

@ -5,13 +5,13 @@ import de.ellpeck.naturesaura.blocks.tiles.TileEntityWoodStand;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.IRenderTypeBuffer; import net.minecraft.client.renderer.IRenderTypeBuffer;
import net.minecraft.client.renderer.RenderTypeLookup; import net.minecraft.client.renderer.RenderTypeLookup;
import net.minecraft.client.renderer.Vector3f;
import net.minecraft.client.renderer.model.ItemCameraTransforms; import net.minecraft.client.renderer.model.ItemCameraTransforms;
import net.minecraft.client.renderer.tileentity.TileEntityRenderer; import net.minecraft.client.renderer.tileentity.TileEntityRenderer;
import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
import net.minecraft.item.BlockItem; import net.minecraft.item.BlockItem;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.math.vector.Vector3f;
public class RenderWoodStand extends TileEntityRenderer<TileEntityWoodStand> { public class RenderWoodStand extends TileEntityRenderer<TileEntityWoodStand> {

View file

@ -52,7 +52,7 @@ public class AnimalEffect implements IDrainSpotEffect {
public ActiveType isActiveHere(PlayerEntity player, Chunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { public ActiveType isActiveHere(PlayerEntity player, Chunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) {
if (!this.calcValues(player.world, pos, spot)) if (!this.calcValues(player.world, pos, spot))
return ActiveType.INACTIVE; return ActiveType.INACTIVE;
if (!this.bb.contains(player.getPositionVector())) if (!this.bb.contains(player.getPositionVec()))
return ActiveType.INACTIVE; return ActiveType.INACTIVE;
if (!NaturesAuraAPI.instance().isEffectPowderActive(player.world, player.getPosition(), NAME)) if (!NaturesAuraAPI.instance().isEffectPowderActive(player.world, player.getPosition(), NAME))
return ActiveType.INHIBITED; return ActiveType.INHIBITED;

View file

@ -45,7 +45,7 @@ public class BreathlessEffect implements IDrainSpotEffect {
public ActiveType isActiveHere(PlayerEntity player, Chunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { public ActiveType isActiveHere(PlayerEntity player, Chunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) {
if (!this.calcValues(player.world, pos, spot)) if (!this.calcValues(player.world, pos, spot))
return ActiveType.INACTIVE; return ActiveType.INACTIVE;
if (!this.bb.contains(player.getPositionVector())) if (!this.bb.contains(player.getPositionVec()))
return ActiveType.INACTIVE; return ActiveType.INACTIVE;
return ActiveType.ACTIVE; return ActiveType.ACTIVE;
} }

View file

@ -41,7 +41,7 @@ public class CacheRechargeEffect implements IDrainSpotEffect {
public ActiveType isActiveHere(PlayerEntity player, Chunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { public ActiveType isActiveHere(PlayerEntity player, Chunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) {
if (!this.calcValues(player.world, pos, spot)) if (!this.calcValues(player.world, pos, spot))
return ActiveType.INACTIVE; return ActiveType.INACTIVE;
if (!this.bb.contains(player.getPositionVector())) if (!this.bb.contains(player.getPositionVec()))
return ActiveType.INACTIVE; return ActiveType.INACTIVE;
if (NaturesAuraAPI.instance().isEffectPowderActive(player.world, player.getPosition(), NAME)) if (NaturesAuraAPI.instance().isEffectPowderActive(player.world, player.getPosition(), NAME))
return ActiveType.INHIBITED; return ActiveType.INHIBITED;

View file

@ -1,5 +1,6 @@
package de.ellpeck.naturesaura.chunk.effect; package de.ellpeck.naturesaura.chunk.effect;
import com.sun.javafx.geom.Vec3d;
import de.ellpeck.naturesaura.ModConfig; import de.ellpeck.naturesaura.ModConfig;
import de.ellpeck.naturesaura.NaturesAura; import de.ellpeck.naturesaura.NaturesAura;
import de.ellpeck.naturesaura.api.NaturesAuraAPI; import de.ellpeck.naturesaura.api.NaturesAuraAPI;
@ -14,9 +15,11 @@ import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.BlockItemUseContext; import net.minecraft.item.BlockItemUseContext;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemUseContext; import net.minecraft.item.ItemUseContext;
import net.minecraft.tags.ITag;
import net.minecraft.tags.Tag; import net.minecraft.tags.Tag;
import net.minecraft.util.*; import net.minecraft.util.*;
import net.minecraft.util.math.*; import net.minecraft.util.math.*;
import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraft.world.chunk.Chunk; import net.minecraft.world.chunk.Chunk;
import net.minecraft.world.server.ServerWorld; import net.minecraft.world.server.ServerWorld;
@ -82,13 +85,13 @@ public class OreSpawnEffect implements IDrainSpotEffect {
} }
int totalWeight = WeightedRandom.getTotalWeight(ores); int totalWeight = WeightedRandom.getTotalWeight(ores);
List<Tuple<Vec3d, Integer>> powders = NaturesAuraAPI.instance().getActiveEffectPowders(world, List<Tuple<Vector3d, Integer>> powders = NaturesAuraAPI.instance().getActiveEffectPowders(world,
new AxisAlignedBB(pos).grow(this.dist), NAME); new AxisAlignedBB(pos).grow(this.dist), NAME);
if (powders.isEmpty()) if (powders.isEmpty())
return; return;
for (int i = 0; i < this.amount; i++) { for (int i = 0; i < this.amount; i++) {
Tuple<Vec3d, Integer> powder = powders.get(i % powders.size()); Tuple<Vector3d, Integer> powder = powders.get(i % powders.size());
Vec3d powderPos = powder.getA(); Vector3d powderPos = powder.getA();
int range = powder.getB(); int range = powder.getB();
int x = MathHelper.floor(powderPos.x + world.rand.nextGaussian() * range); int x = MathHelper.floor(powderPos.x + world.rand.nextGaussian() * range);
int y = MathHelper.floor(powderPos.y + world.rand.nextGaussian() * range); int y = MathHelper.floor(powderPos.y + world.rand.nextGaussian() * range);
@ -103,7 +106,7 @@ public class OreSpawnEffect implements IDrainSpotEffect {
outer: outer:
while (true) { while (true) {
WeightedOre ore = WeightedRandom.getRandomItem(world.rand, ores, totalWeight); WeightedOre ore = WeightedRandom.getRandomItem(world.rand, ores, totalWeight);
Tag<Block> tag = world.getTags().getBlocks().get(ore.tag); ITag<Block> tag = world.getTags().func_241835_a().get(ore.tag);
if (tag == null) if (tag == null)
continue; continue;
for (Block toPlace : tag.getAllElements()) { for (Block toPlace : tag.getAllElements()) {
@ -112,7 +115,7 @@ public class OreSpawnEffect implements IDrainSpotEffect {
FakePlayer player = FakePlayerFactory.getMinecraft((ServerWorld) world); FakePlayer player = FakePlayerFactory.getMinecraft((ServerWorld) world);
player.setHeldItem(Hand.MAIN_HAND, ItemStack.EMPTY); player.setHeldItem(Hand.MAIN_HAND, ItemStack.EMPTY);
BlockRayTraceResult ray = new BlockRayTraceResult(new Vec3d(pos).add(0.5F, 0.5F, 0.5F), Direction.UP, pos, false); BlockRayTraceResult ray = new BlockRayTraceResult(Vector3d.copyCentered(pos), Direction.UP, pos, false);
BlockItemUseContext context = new BlockItemUseContext(new ItemUseContext(player, Hand.MAIN_HAND, ray)); BlockItemUseContext context = new BlockItemUseContext(new ItemUseContext(player, Hand.MAIN_HAND, ray));
BlockState stateToPlace = toPlace.getStateForPlacement(context); BlockState stateToPlace = toPlace.getStateForPlacement(context);
if (SPAWN_EXCEPTIONS.contains(stateToPlace)) if (SPAWN_EXCEPTIONS.contains(stateToPlace))

View file

@ -19,19 +19,30 @@ import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.InterModComms; import net.minecraftforge.fml.InterModComms;
import net.minecraftforge.fml.event.lifecycle.InterModEnqueueEvent; import net.minecraftforge.fml.event.lifecycle.InterModEnqueueEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import top.theillusivec4.curios.api.CurioTags; import top.theillusivec4.curios.api.CuriosCapability;
import top.theillusivec4.curios.api.CuriosAPI;
import top.theillusivec4.curios.api.capability.CuriosCapability;
import top.theillusivec4.curios.api.capability.ICurio;
import top.theillusivec4.curios.api.imc.CurioIMCMessage;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.util.Map; import java.util.Map;
// TODO curios
public class CuriosCompat implements ICompat { public class CuriosCompat implements ICompat {
@Override
public void setup() {
private static final Map<Item, Tag<Item>> TYPES = ImmutableMap.<Item, Tag<Item>>builder() }
@Override
public void setupClient() {
}
@Override
public void addItemTags(ItemTagProvider provider) {
}
/*private static final Map<Item, Tag<Item>> TYPES = ImmutableMap.<Item, Tag<Item>>builder()
.put(ModItems.EYE, CurioTags.CHARM) .put(ModItems.EYE, CurioTags.CHARM)
.put(ModItems.EYE_IMPROVED, CurioTags.CHARM) .put(ModItems.EYE_IMPROVED, CurioTags.CHARM)
.put(ModItems.AURA_CACHE, CurioTags.BELT) .put(ModItems.AURA_CACHE, CurioTags.BELT)
@ -94,5 +105,5 @@ public class CuriosCompat implements ICompat {
public void addItemTags(ItemTagProvider provider) { public void addItemTags(ItemTagProvider provider) {
for (Map.Entry<Item, Tag<Item>> entry : TYPES.entrySet()) for (Map.Entry<Item, Tag<Item>> entry : TYPES.entrySet())
provider.getBuilder(entry.getValue()).add(entry.getKey()); provider.getBuilder(entry.getValue()).add(entry.getKey());
} }*/
} }

View file

@ -22,7 +22,7 @@ public class EnchantibilityAuraMending extends AbstractEnchantEffect {
return; return;
if (event.player.world.isRemote || event.player.world.getGameTime() % 10 != 0) if (event.player.world.isRemote || event.player.world.getGameTime() % 10 != 0)
return; return;
if (!event.player.isShiftKeyDown() || event.player.getHealth() >= event.player.getMaxHealth()) if (!event.player.isSneaking() || event.player.getHealth() >= event.player.getMaxHealth())
return; return;
int usage = 5000; int usage = 5000;
if (NaturesAuraAPI.instance().extractAuraFromPlayer(event.player, usage, false)) if (NaturesAuraAPI.instance().extractAuraFromPlayer(event.player, usage, false))

View file

@ -14,8 +14,6 @@ import mezz.jei.api.ingredients.IIngredients;
import mezz.jei.api.recipe.category.IRecipeCategory; import mezz.jei.api.recipe.category.IRecipeCategory;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.IRenderTypeBuffer; import net.minecraft.client.renderer.IRenderTypeBuffer;
import net.minecraft.client.renderer.Quaternion;
import net.minecraft.client.renderer.Vector3f;
import net.minecraft.client.renderer.entity.EntityRendererManager; import net.minecraft.client.renderer.entity.EntityRendererManager;
import net.minecraft.client.resources.I18n; import net.minecraft.client.resources.I18n;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
@ -25,6 +23,8 @@ import net.minecraft.item.ItemStack;
import net.minecraft.item.SpawnEggItem; import net.minecraft.item.SpawnEggItem;
import net.minecraft.item.crafting.Ingredient; import net.minecraft.item.crafting.Ingredient;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.vector.Quaternion;
import net.minecraft.util.math.vector.Vector3f;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
@ -122,7 +122,7 @@ public class AnimalSpawnerCategory implements IRecipeCategory<AnimalSpawnerRecip
} }
@Override @Override
public void draw(AnimalSpawnerRecipe recipe, double mouseX, double mouseY) { public void draw(AnimalSpawnerRecipe recipe, MatrixStack matrixStack, double mouseX, double mouseY) {
Minecraft minecraft = Minecraft.getInstance(); Minecraft minecraft = Minecraft.getInstance();
Entity entity = this.entityCache.get(recipe.entity); Entity entity = this.entityCache.get(recipe.entity);
if (entity == null) { if (entity == null) {
@ -133,7 +133,8 @@ public class AnimalSpawnerCategory implements IRecipeCategory<AnimalSpawnerRecip
float size = Math.max(1F, Math.max(recipe.entity.getWidth(), recipe.entity.getHeight())); float size = Math.max(1F, Math.max(recipe.entity.getWidth(), recipe.entity.getHeight()));
renderEntity(35, 55, 100F / size * 0.4F, 40, size * 0.5F, (LivingEntity) entity); renderEntity(35, 55, 100F / size * 0.4F, 40, size * 0.5F, (LivingEntity) entity);
String name = recipe.entity.getName().getFormattedText(); String name = recipe.entity.getName().getString();
minecraft.fontRenderer.drawStringWithShadow(name, 36 - minecraft.fontRenderer.getStringWidth(name) / 2F, 55, 0xFFFFFF); minecraft.fontRenderer.drawStringWithShadow(matrixStack, name, 36 - minecraft.fontRenderer.getStringWidth(name) / 2F, 55, 0xFFFFFF);
} }
} }

View file

@ -20,6 +20,8 @@ import net.minecraft.item.crafting.IRecipe;
import net.minecraft.item.crafting.IRecipeType; import net.minecraft.item.crafting.IRecipeType;
import net.minecraft.item.crafting.RecipeManager; import net.minecraft.item.crafting.RecipeManager;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraft.util.text.StringTextComponent;
import net.minecraft.util.text.Style;
import net.minecraft.util.text.TextFormatting; import net.minecraft.util.text.TextFormatting;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
@ -95,11 +97,11 @@ public class PatchouliCompat implements ICompat {
RenderHelper.disableStandardItemLighting(); RenderHelper.disableStandardItemLighting();
GlStateManager.color4f(1, 1, 1, 1); GlStateManager.color4f(1, 1, 1, 1);
event.gui.getMinecraft().getTextureManager().bindTexture(ClientEvents.BOOK_GUI); event.gui.getMinecraft().getTextureManager().bindTexture(ClientEvents.BOOK_GUI);
AbstractGui.blit(x, y, 469, 0, 43, 42, 512, 256); AbstractGui.blit(event.matrixStack, x, y, 469, 0, 43, 42, 512, 256);
if (event.mouseX >= x && event.mouseY >= y && event.mouseX < x + 43 && event.mouseY < y + 42) if (event.mouseX >= x && event.mouseY >= y && event.mouseX < x + 43 && event.mouseY < y + 42)
GuiUtils.drawHoveringText( GuiUtils.drawHoveringText(event.matrixStack,
Collections.singletonList(TextFormatting.GOLD + "It's the author Ellpeck's birthday!"), Collections.singletonList(new StringTextComponent("It's the author Ellpeck's birthday!").setStyle(Style.EMPTY.setFormatting(TextFormatting.GOLD))),
event.mouseX, event.mouseY, event.gui.width, event.gui.height, 0, event.gui.getMinecraft().fontRenderer); event.mouseX, event.mouseY, event.gui.width, event.gui.height, 0, event.gui.getMinecraft().fontRenderer);
} else if (now.getMonth() == Month.JUNE) { } else if (now.getMonth() == Month.JUNE) {
int x = event.gui.width / 2 + 272 / 2; int x = event.gui.width / 2 + 272 / 2;
@ -108,15 +110,15 @@ public class PatchouliCompat implements ICompat {
RenderHelper.disableStandardItemLighting(); RenderHelper.disableStandardItemLighting();
GlStateManager.color4f(1, 1, 1, 1); GlStateManager.color4f(1, 1, 1, 1);
event.gui.getMinecraft().getTextureManager().bindTexture(ClientEvents.BOOK_GUI); event.gui.getMinecraft().getTextureManager().bindTexture(ClientEvents.BOOK_GUI);
AbstractGui.blit(x, y, 424, 0, 45, 26, 512, 256); AbstractGui.blit(event.matrixStack, x, y, 424, 0, 45, 26, 512, 256);
if (event.mouseX >= x && event.mouseY >= y && event.mouseX < x + 45 && event.mouseY < y + 26) if (event.mouseX >= x && event.mouseY >= y && event.mouseX < x + 45 && event.mouseY < y + 26)
GuiUtils.drawHoveringText( GuiUtils.drawHoveringText(event.matrixStack,
Collections.singletonList("§6Happy §4P§6r§ei§2d§9e§5!"), Collections.singletonList(new StringTextComponent("§6Happy §4P§6r§ei§2d§9e§5!")),
event.mouseX, event.mouseY, event.gui.width, event.gui.height, 0, event.gui.getMinecraft().fontRenderer); event.mouseX, event.mouseY, event.gui.width, event.gui.height, 0, event.gui.getMinecraft().fontRenderer);
} }
String name = event.gui.getMinecraft().player.getName().getFormattedText(); String name = event.gui.getMinecraft().player.getName().getString();
FancyInfo info = SupporterFancyHandler.FANCY_INFOS.get(name); FancyInfo info = SupporterFancyHandler.FANCY_INFOS.get(name);
if (info != null) { if (info != null) {
int x = event.gui.width / 2 - 272 / 2 + 20; int x = event.gui.width / 2 - 272 / 2 + 20;
@ -126,20 +128,20 @@ public class PatchouliCompat implements ICompat {
RenderSystem.color4f(1, 1, 1, 1); RenderSystem.color4f(1, 1, 1, 1);
event.gui.getMinecraft().getTextureManager().bindTexture(ClientEvents.BOOK_GUI); event.gui.getMinecraft().getTextureManager().bindTexture(ClientEvents.BOOK_GUI);
AbstractGui.blit(x, y, 496, 44, 16, 18, 512, 256); AbstractGui.blit(event.matrixStack, x, y, 496, 44, 16, 18, 512, 256);
if (info.tier == 1) { if (info.tier == 1) {
AbstractGui.blit(x, y, 496 - 16, 44, 16, 18, 512, 256); AbstractGui.blit(event.matrixStack, x, y, 496 - 16, 44, 16, 18, 512, 256);
} else { } else {
float r = ((info.color >> 16) & 255) / 255F; float r = ((info.color >> 16) & 255) / 255F;
float g = ((info.color >> 8) & 255) / 255F; float g = ((info.color >> 8) & 255) / 255F;
float b = (info.color & 255) / 255F; float b = (info.color & 255) / 255F;
RenderSystem.color3f(r, g, b); RenderSystem.color3f(r, g, b);
AbstractGui.blit(x, y, 496 - 32, 44, 16, 18, 512, 256); AbstractGui.blit(event.matrixStack, x, y, 496 - 32, 44, 16, 18, 512, 256);
} }
if (event.mouseX >= x && event.mouseY >= y && event.mouseX < x + 16 && event.mouseY < y + 18) if (event.mouseX >= x && event.mouseY >= y && event.mouseX < x + 16 && event.mouseY < y + 18)
GuiUtils.drawHoveringText( GuiUtils.drawHoveringText(event.matrixStack,
Collections.singletonList(TextFormatting.YELLOW + "Thanks for your support, " + name + "!"), Collections.singletonList(new StringTextComponent("Thanks for your support, " + name + "!").setStyle(Style.EMPTY.setFormatting(TextFormatting.YELLOW))),
event.mouseX, event.mouseY, event.gui.width, event.gui.height, 0, event.gui.getMinecraft().fontRenderer); event.mouseX, event.mouseY, event.gui.width, event.gui.height, 0, event.gui.getMinecraft().fontRenderer);
} }

View file

@ -1,12 +1,12 @@
package de.ellpeck.naturesaura.compat.patchouli; package de.ellpeck.naturesaura.compat.patchouli;
import de.ellpeck.naturesaura.api.NaturesAuraAPI;
import de.ellpeck.naturesaura.recipes.AltarRecipe; import de.ellpeck.naturesaura.recipes.AltarRecipe;
import de.ellpeck.naturesaura.items.ItemAuraBottle; import de.ellpeck.naturesaura.items.ItemAuraBottle;
import de.ellpeck.naturesaura.items.ModItems; import de.ellpeck.naturesaura.items.ModItems;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.Ingredient; import net.minecraft.item.crafting.Ingredient;
import vazkii.patchouli.api.IComponentProcessor; import vazkii.patchouli.api.IComponentProcessor;
import vazkii.patchouli.api.IVariable;
import vazkii.patchouli.api.IVariableProvider; import vazkii.patchouli.api.IVariableProvider;
import vazkii.patchouli.api.PatchouliAPI; import vazkii.patchouli.api.PatchouliAPI;
@ -15,33 +15,33 @@ public class ProcessorAltar implements IComponentProcessor {
private AltarRecipe recipe; private AltarRecipe recipe;
@Override @Override
public void setup(IVariableProvider<String> provider) { public void setup(IVariableProvider provider) {
this.recipe = PatchouliCompat.getRecipe("altar", provider.get("recipe")); this.recipe = PatchouliCompat.getRecipe("altar", provider.get("recipe").asString());
} }
@Override @Override
public String process(String key) { public IVariable process(String key) {
if (this.recipe == null) if (this.recipe == null)
return null; return IVariable.empty();
switch (key) { switch (key) {
case "input": case "input":
return PatchouliAPI.instance.serializeIngredient(this.recipe.input); return IVariable.from(this.recipe.input);
case "output": case "output":
return PatchouliAPI.instance.serializeItemStack(this.recipe.output); return IVariable.from(this.recipe.output);
case "catalyst": case "catalyst":
if (this.recipe.catalyst != Ingredient.EMPTY) if (this.recipe.catalyst != Ingredient.EMPTY)
return PatchouliAPI.instance.serializeIngredient(this.recipe.catalyst); return IVariable.from(this.recipe.catalyst);
else else
return null; return IVariable.empty();
case "type": case "type":
if (this.recipe.requiredType != null) if (this.recipe.requiredType != null)
return PatchouliAPI.instance.serializeItemStack(ItemAuraBottle.setType(new ItemStack(ModItems.AURA_BOTTLE), this.recipe.requiredType)); return IVariable.from(ItemAuraBottle.setType(new ItemStack(ModItems.AURA_BOTTLE), this.recipe.requiredType));
else else
return null; return IVariable.empty();
case "name": case "name":
return this.recipe.output.getDisplayName().getFormattedText(); return IVariable.wrap(this.recipe.output.getDisplayName().getString());
default: default:
return null; return IVariable.empty();
} }
} }

View file

@ -5,6 +5,7 @@ import de.ellpeck.naturesaura.recipes.AnimalSpawnerRecipe;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.item.SpawnEggItem; import net.minecraft.item.SpawnEggItem;
import vazkii.patchouli.api.IComponentProcessor; import vazkii.patchouli.api.IComponentProcessor;
import vazkii.patchouli.api.IVariable;
import vazkii.patchouli.api.IVariableProvider; import vazkii.patchouli.api.IVariableProvider;
import vazkii.patchouli.api.PatchouliAPI; import vazkii.patchouli.api.PatchouliAPI;
@ -13,31 +14,31 @@ public class ProcessorAnimalSpawner implements IComponentProcessor {
private AnimalSpawnerRecipe recipe; private AnimalSpawnerRecipe recipe;
@Override @Override
public void setup(IVariableProvider<String> provider) { public void setup(IVariableProvider provider) {
this.recipe = PatchouliCompat.getRecipe("animal_spawner", provider.get("recipe")); this.recipe = PatchouliCompat.getRecipe("animal_spawner", provider.get("recipe").asString());
} }
@Override @Override
public String process(String key) { public IVariable process(String key) {
if (this.recipe == null) if (this.recipe == null)
return null; return IVariable.empty();
if (key.startsWith("input")) { if (key.startsWith("input")) {
int id = Integer.parseInt(key.substring(5)) - 1; int id = Integer.parseInt(key.substring(5)) - 1;
if (this.recipe.ingredients.length > id) if (this.recipe.ingredients.length > id)
return PatchouliAPI.instance.serializeIngredient(this.recipe.ingredients[id]); return IVariable.from(this.recipe.ingredients[id]);
else else
return null; return IVariable.empty();
} else { } else {
switch (key) { switch (key) {
case "name": case "name":
return this.recipe.entity.getName().getFormattedText(); return IVariable.wrap(this.recipe.entity.getName().getString());
case "entity": case "entity":
return this.recipe.entity.getRegistryName().toString(); return IVariable.wrap(this.recipe.entity.getRegistryName().toString());
case "egg": case "egg":
ItemStack egg = new ItemStack(SpawnEggItem.getEgg(this.recipe.entity)); ItemStack egg = new ItemStack(SpawnEggItem.getEgg(this.recipe.entity));
return PatchouliAPI.instance.serializeItemStack(egg); return IVariable.from(egg);
default: default:
return null; return IVariable.empty();
} }
} }
} }

View file

@ -3,6 +3,7 @@ package de.ellpeck.naturesaura.compat.patchouli;
import de.ellpeck.naturesaura.api.NaturesAuraAPI; import de.ellpeck.naturesaura.api.NaturesAuraAPI;
import de.ellpeck.naturesaura.recipes.OfferingRecipe; import de.ellpeck.naturesaura.recipes.OfferingRecipe;
import vazkii.patchouli.api.IComponentProcessor; import vazkii.patchouli.api.IComponentProcessor;
import vazkii.patchouli.api.IVariable;
import vazkii.patchouli.api.IVariableProvider; import vazkii.patchouli.api.IVariableProvider;
import vazkii.patchouli.api.PatchouliAPI; import vazkii.patchouli.api.PatchouliAPI;
@ -11,25 +12,25 @@ public class ProcessorOffering implements IComponentProcessor {
private OfferingRecipe recipe; private OfferingRecipe recipe;
@Override @Override
public void setup(IVariableProvider<String> provider) { public void setup(IVariableProvider provider) {
this.recipe = PatchouliCompat.getRecipe("offering", provider.get("recipe")); this.recipe = PatchouliCompat.getRecipe("offering", provider.get("recipe").asString());
} }
@Override @Override
public String process(String key) { public IVariable process(String key) {
if (this.recipe == null) if (this.recipe == null)
return null; return IVariable.empty();
switch (key) { switch (key) {
case "input": case "input":
return PatchouliAPI.instance.serializeIngredient(this.recipe.input); return IVariable.from(this.recipe.input);
case "output": case "output":
return PatchouliAPI.instance.serializeItemStack(this.recipe.output); return IVariable.from(this.recipe.output);
case "start": case "start":
return PatchouliAPI.instance.serializeIngredient(this.recipe.startItem); return IVariable.from(this.recipe.startItem);
case "name": case "name":
return this.recipe.output.getDisplayName().getFormattedText(); return IVariable.wrap(this.recipe.output.getDisplayName().getString());
default: default:
return null; return IVariable.empty();
} }
} }
} }

View file

@ -3,6 +3,7 @@ package de.ellpeck.naturesaura.compat.patchouli;
import de.ellpeck.naturesaura.api.NaturesAuraAPI; import de.ellpeck.naturesaura.api.NaturesAuraAPI;
import de.ellpeck.naturesaura.recipes.TreeRitualRecipe; import de.ellpeck.naturesaura.recipes.TreeRitualRecipe;
import vazkii.patchouli.api.IComponentProcessor; import vazkii.patchouli.api.IComponentProcessor;
import vazkii.patchouli.api.IVariable;
import vazkii.patchouli.api.IVariableProvider; import vazkii.patchouli.api.IVariableProvider;
import vazkii.patchouli.api.PatchouliAPI; import vazkii.patchouli.api.PatchouliAPI;
@ -11,30 +12,30 @@ public class ProcessorTreeRitual implements IComponentProcessor {
private TreeRitualRecipe recipe; private TreeRitualRecipe recipe;
@Override @Override
public void setup(IVariableProvider<String> provider) { public void setup(IVariableProvider provider) {
this.recipe = PatchouliCompat.getRecipe("tree_ritual", provider.get("recipe")); this.recipe = PatchouliCompat.getRecipe("tree_ritual", provider.get("recipe").asString());
} }
@Override @Override
public String process(String key) { public IVariable process(String key) {
if (this.recipe == null) if (this.recipe == null)
return null; return IVariable.empty();
if (key.startsWith("input")) { if (key.startsWith("input")) {
int id = Integer.parseInt(key.substring(5)) - 1; int id = Integer.parseInt(key.substring(5)) - 1;
if (this.recipe.ingredients.length > id) if (this.recipe.ingredients.length > id)
return PatchouliAPI.instance.serializeIngredient(this.recipe.ingredients[id]); return IVariable.from(this.recipe.ingredients[id]);
else else
return null; return IVariable.empty();
} else { } else {
switch (key) { switch (key) {
case "output": case "output":
return PatchouliAPI.instance.serializeItemStack(this.recipe.result); return IVariable.from(this.recipe.result);
case "sapling": case "sapling":
return PatchouliAPI.instance.serializeIngredient(this.recipe.saplingType); return IVariable.from(this.recipe.saplingType);
case "name": case "name":
return this.recipe.result.getDisplayName().getFormattedText(); return IVariable.wrap(this.recipe.result.getDisplayName().getString());
default: default:
return null; return IVariable.empty();
} }
} }
} }

View file

@ -18,11 +18,11 @@ import net.minecraft.data.DirectoryCache;
import net.minecraft.data.IDataProvider; import net.minecraft.data.IDataProvider;
import net.minecraft.data.loot.BlockLootTables; import net.minecraft.data.loot.BlockLootTables;
import net.minecraft.item.Items; import net.minecraft.item.Items;
import net.minecraft.loot.*;
import net.minecraft.loot.conditions.BlockStateProperty;
import net.minecraft.loot.conditions.RandomChance;
import net.minecraft.loot.functions.SetCount;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraft.world.storage.loot.*;
import net.minecraft.world.storage.loot.conditions.BlockStateProperty;
import net.minecraft.world.storage.loot.conditions.RandomChance;
import net.minecraft.world.storage.loot.functions.SetCount;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import java.io.IOException; import java.io.IOException;
@ -103,7 +103,7 @@ public class BlockLootProvider implements IDataProvider {
} }
public static LootTable.Builder genFlowerPot(Block block) { public static LootTable.Builder genFlowerPot(Block block) {
return droppingAndFlowerPot(((FlowerPotBlock) block).func_220276_d()); return droppingAndFlowerPot(((FlowerPotBlock) block).getFlower());
} }
public static <T> T survivesExplosion(Block block, ILootConditionConsumer<T> then) { public static <T> T survivesExplosion(Block block, ILootConditionConsumer<T> then) {

View file

@ -7,7 +7,7 @@ import de.ellpeck.naturesaura.reg.ModRegistry;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.data.DataGenerator; import net.minecraft.data.DataGenerator;
import net.minecraftforge.client.model.generators.BlockStateProvider; import net.minecraftforge.client.model.generators.BlockStateProvider;
import net.minecraftforge.client.model.generators.ExistingFileHelper; import net.minecraftforge.common.data.ExistingFileHelper;
public class BlockStateGenerator extends BlockStateProvider { public class BlockStateGenerator extends BlockStateProvider {
public BlockStateGenerator(DataGenerator gen, ExistingFileHelper exFileHelper) { public BlockStateGenerator(DataGenerator gen, ExistingFileHelper exFileHelper) {

View file

@ -13,13 +13,13 @@ public class BlockTagProvider extends BlockTagsProvider {
@Override @Override
protected void registerTags() { protected void registerTags() {
this.getBuilder(BlockTags.LOGS).add(ModBlocks.ANCIENT_LOG, ModBlocks.ANCIENT_BARK); this.getOrCreateBuilder(BlockTags.LOGS).add(ModBlocks.ANCIENT_LOG, ModBlocks.ANCIENT_BARK);
this.getBuilder(BlockTags.PLANKS).add(ModBlocks.ANCIENT_PLANKS); this.getOrCreateBuilder(BlockTags.PLANKS).add(ModBlocks.ANCIENT_PLANKS);
this.getBuilder(BlockTags.STAIRS).add(ModBlocks.ANCIENT_STAIRS, ModBlocks.INFUSED_BRICK_STAIRS, ModBlocks.INFUSED_STAIRS); this.getOrCreateBuilder(BlockTags.STAIRS).add(ModBlocks.ANCIENT_STAIRS, ModBlocks.INFUSED_BRICK_STAIRS, ModBlocks.INFUSED_STAIRS);
this.getBuilder(BlockTags.LEAVES).add(ModBlocks.GOLDEN_LEAVES, ModBlocks.ANCIENT_LEAVES, ModBlocks.DECAYED_LEAVES); this.getOrCreateBuilder(BlockTags.LEAVES).add(ModBlocks.GOLDEN_LEAVES, ModBlocks.ANCIENT_LEAVES, ModBlocks.DECAYED_LEAVES);
this.getBuilder(BlockTags.RAILS).add(ModBlocks.DIMENSION_RAIL_END, ModBlocks.DIMENSION_RAIL_NETHER, ModBlocks.DIMENSION_RAIL_OVERWORLD); this.getOrCreateBuilder(BlockTags.RAILS).add(ModBlocks.DIMENSION_RAIL_END, ModBlocks.DIMENSION_RAIL_NETHER, ModBlocks.DIMENSION_RAIL_OVERWORLD);
this.getBuilder(BlockTags.SLABS).add(ModBlocks.ANCIENT_SLAB, ModBlocks.INFUSED_SLAB, ModBlocks.INFUSED_BRICK_SLAB); this.getOrCreateBuilder(BlockTags.SLABS).add(ModBlocks.ANCIENT_SLAB, ModBlocks.INFUSED_SLAB, ModBlocks.INFUSED_BRICK_SLAB);
this.getBuilder(Tags.Blocks.DIRT).add(ModBlocks.NETHER_GRASS); this.getOrCreateBuilder(Tags.Blocks.DIRT).add(ModBlocks.NETHER_GRASS);
this.getBuilder(BlockTags.SMALL_FLOWERS).add(ModBlocks.END_FLOWER, ModBlocks.AURA_BLOOM); this.getOrCreateBuilder(BlockTags.SMALL_FLOWERS).add(ModBlocks.END_FLOWER, ModBlocks.AURA_BLOOM);
} }
} }

View file

@ -8,8 +8,8 @@ import de.ellpeck.naturesaura.reg.ModRegistry;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.data.DataGenerator; import net.minecraft.data.DataGenerator;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraftforge.client.model.generators.ExistingFileHelper;
import net.minecraftforge.client.model.generators.ItemModelProvider; import net.minecraftforge.client.model.generators.ItemModelProvider;
import net.minecraftforge.common.data.ExistingFileHelper;
public class ItemModelGenerator extends ItemModelProvider { public class ItemModelGenerator extends ItemModelProvider {
public ItemModelGenerator(DataGenerator generator, ExistingFileHelper existingFileHelper) { public ItemModelGenerator(DataGenerator generator, ExistingFileHelper existingFileHelper) {

View file

@ -1,5 +1,6 @@
package de.ellpeck.naturesaura.data; package de.ellpeck.naturesaura.data;
import de.ellpeck.naturesaura.NaturesAura;
import de.ellpeck.naturesaura.compat.Compat; import de.ellpeck.naturesaura.compat.Compat;
import de.ellpeck.naturesaura.items.ModItems; import de.ellpeck.naturesaura.items.ModItems;
import net.minecraft.data.DataGenerator; import net.minecraft.data.DataGenerator;
@ -9,10 +10,11 @@ import net.minecraft.tags.BlockTags;
import net.minecraft.tags.ItemTags; import net.minecraft.tags.ItemTags;
import net.minecraft.tags.Tag; import net.minecraft.tags.Tag;
import net.minecraftforge.common.Tags; import net.minecraftforge.common.Tags;
import net.minecraftforge.common.data.ExistingFileHelper;
public class ItemTagProvider extends ItemTagsProvider { public class ItemTagProvider extends ItemTagsProvider {
public ItemTagProvider(DataGenerator generatorIn) { public ItemTagProvider(DataGenerator generatorIn, BlockTagProvider blockTagProvider, ExistingFileHelper helper) {
super(generatorIn); super(generatorIn, blockTagProvider, NaturesAura.MOD_ID, helper);
} }
@Override @Override
@ -24,13 +26,8 @@ public class ItemTagProvider extends ItemTagsProvider {
this.copy(BlockTags.RAILS, ItemTags.RAILS); this.copy(BlockTags.RAILS, ItemTags.RAILS);
this.copy(BlockTags.SLABS, ItemTags.SLABS); this.copy(BlockTags.SLABS, ItemTags.SLABS);
this.getBuilder(Tags.Items.RODS_WOODEN).add(ModItems.ANCIENT_STICK); this.getOrCreateBuilder(Tags.Items.RODS_WOODEN).add(ModItems.ANCIENT_STICK);
Compat.addItemTags(this); Compat.addItemTags(this);
} }
@Override
public Tag.Builder<Item> getBuilder(Tag<Item> tagIn) {
return super.getBuilder(tagIn);
}
} }

View file

@ -1,7 +1,7 @@
package de.ellpeck.naturesaura.data; package de.ellpeck.naturesaura.data;
import net.minecraft.data.DataGenerator; import net.minecraft.data.DataGenerator;
import net.minecraftforge.client.model.generators.ExistingFileHelper; import net.minecraftforge.common.data.ExistingFileHelper;
import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.event.lifecycle.GatherDataEvent; import net.minecraftforge.fml.event.lifecycle.GatherDataEvent;
@ -13,9 +13,10 @@ public final class ModData {
public static void gatherData(GatherDataEvent event) { public static void gatherData(GatherDataEvent event) {
DataGenerator generator = event.getGenerator(); DataGenerator generator = event.getGenerator();
ExistingFileHelper ex = event.getExistingFileHelper(); ExistingFileHelper ex = event.getExistingFileHelper();
BlockTagProvider blockTags = new BlockTagProvider(generator);
generator.addProvider(blockTags);
generator.addProvider(new ItemTagProvider(generator, blockTags, ex));
generator.addProvider(new BlockLootProvider(generator)); generator.addProvider(new BlockLootProvider(generator));
generator.addProvider(new BlockTagProvider(generator));
generator.addProvider(new ItemTagProvider(generator));
generator.addProvider(new BlockStateGenerator(generator, ex)); generator.addProvider(new BlockStateGenerator(generator, ex));
generator.addProvider(new ItemModelGenerator(generator, ex)); generator.addProvider(new ItemModelGenerator(generator, ex));
} }

View file

@ -10,7 +10,7 @@ import net.minecraft.item.ItemStack;
public class AuraMendingEnchantment extends ModEnchantment { public class AuraMendingEnchantment extends ModEnchantment {
public AuraMendingEnchantment() { public AuraMendingEnchantment() {
super("aura_mending", Rarity.RARE, EnchantmentType.ALL, EquipmentSlotType.values()); super("aura_mending", Rarity.RARE, EnchantmentType.BREAKABLE, EquipmentSlotType.values());
} }
@Override @Override

View file

@ -22,7 +22,7 @@ import net.minecraft.util.ResourceLocation;
import net.minecraft.util.Tuple; import net.minecraft.util.Tuple;
import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
@ -85,15 +85,15 @@ public class EntityEffectInhibitor extends Entity implements IVisualizable {
private void addToPowderList() { private void addToPowderList() {
if (!this.isAddedToWorld() || this.getInhibitedEffect() == null) if (!this.isAddedToWorld() || this.getInhibitedEffect() == null)
return; return;
List<Tuple<Vec3d, Integer>> powders = this.getPowderList(); List<Tuple<Vector3d, Integer>> powders = this.getPowderList();
powders.add(new Tuple<>(this.getPositionVector(), this.getAmount())); powders.add(new Tuple<>(this.getPositionVec(), this.getAmount()));
} }
private void removeFromPowderList() { private void removeFromPowderList() {
if (!this.isAddedToWorld() || this.getInhibitedEffect() == null) if (!this.isAddedToWorld() || this.getInhibitedEffect() == null)
return; return;
List<Tuple<Vec3d, Integer>> powders = this.getPowderList(); List<Tuple<Vector3d, Integer>> powders = this.getPowderList();
Vec3d pos = this.getPositionVector(); Vector3d pos = this.getPositionVec();
for (int i = 0; i < powders.size(); i++) for (int i = 0; i < powders.size(); i++)
if (pos.equals(powders.get(i).getA())) { if (pos.equals(powders.get(i).getA())) {
powders.remove(i); powders.remove(i);
@ -101,8 +101,8 @@ public class EntityEffectInhibitor extends Entity implements IVisualizable {
} }
} }
private List<Tuple<Vec3d, Integer>> getPowderList() { private List<Tuple<Vector3d, Integer>> getPowderList() {
ListMultimap<ResourceLocation, Tuple<Vec3d, Integer>> powders = ((WorldData) IWorldData.getWorldData(this.world)).effectPowders; ListMultimap<ResourceLocation, Tuple<Vector3d, Integer>> powders = ((WorldData) IWorldData.getWorldData(this.world)).effectPowders;
return powders.get(this.getInhibitedEffect()); return powders.get(this.getInhibitedEffect());
} }
@ -196,7 +196,7 @@ public class EntityEffectInhibitor extends Entity implements IVisualizable {
@Override @Override
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)
public AxisAlignedBB getVisualizationBounds(World world, BlockPos pos) { public AxisAlignedBB getVisualizationBounds(World world, BlockPos pos) {
return Helper.aabb(this.getPositionVector()).grow(this.getAmount()); return Helper.aabb(this.getPositionVec()).grow(this.getAmount());
} }
@Override @Override

View file

@ -16,13 +16,14 @@ import net.minecraft.nbt.ListNBT;
import net.minecraft.nbt.LongNBT; import net.minecraft.nbt.LongNBT;
import net.minecraft.network.IPacket; import net.minecraft.network.IPacket;
import net.minecraft.util.DamageSource; import net.minecraft.util.DamageSource;
import net.minecraft.util.RegistryKey;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.math.RayTraceResult;
import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.world.GameRules; import net.minecraft.world.GameRules;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraft.world.dimension.DimensionType; import net.minecraft.world.server.ServerWorld;
import net.minecraftforge.common.util.Constants; import net.minecraftforge.common.util.Constants;
import net.minecraftforge.common.util.ITeleporter; import net.minecraftforge.common.util.ITeleporter;
import net.minecraftforge.fml.network.NetworkHooks; import net.minecraftforge.fml.network.NetworkHooks;
@ -133,9 +134,10 @@ public class EntityMoverMinecart extends AbstractMinecartEntity {
this.spotOffsets.add(BlockPos.fromLong(((LongNBT) base).getLong())); this.spotOffsets.add(BlockPos.fromLong(((LongNBT) base).getLong()));
} }
@Nullable @Nullable
@Override @Override
public Entity changeDimension(DimensionType destination, ITeleporter teleporter) { public Entity changeDimension(ServerWorld destination, ITeleporter teleporter) {
Entity entity = super.changeDimension(destination, teleporter); Entity entity = super.changeDimension(destination, teleporter);
if (entity instanceof EntityMoverMinecart) { if (entity instanceof EntityMoverMinecart) {
BlockPos pos = entity.getPosition(); BlockPos pos = entity.getPosition();
@ -172,7 +174,7 @@ public class EntityMoverMinecart extends AbstractMinecartEntity {
@Override @Override
protected void applyDrag() { protected void applyDrag() {
Vec3d motion = this.getMotion(); Vector3d motion = this.getMotion();
this.setMotion(motion.x * 0.99F, 0, motion.z * 0.99F); this.setMotion(motion.x * 0.99F, 0, motion.z * 0.99F);
} }

View file

@ -4,8 +4,8 @@ import de.ellpeck.naturesaura.api.NaturesAuraAPI;
import de.ellpeck.naturesaura.packet.PacketHandler; import de.ellpeck.naturesaura.packet.PacketHandler;
import de.ellpeck.naturesaura.packet.PacketParticles; import de.ellpeck.naturesaura.packet.PacketParticles;
import net.minecraft.entity.EntityType; import net.minecraft.entity.EntityType;
import net.minecraft.entity.item.EyeOfEnderEntity;
import net.minecraft.entity.item.ItemEntity; import net.minecraft.entity.item.ItemEntity;
import net.minecraft.entity.projectile.EyeOfEnderEntity;
import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.CompoundNBT;
import net.minecraft.network.IPacket; import net.minecraft.network.IPacket;
import net.minecraft.network.datasync.DataParameter; import net.minecraft.network.datasync.DataParameter;
@ -15,7 +15,7 @@ import net.minecraft.particles.ParticleTypes;
import net.minecraft.util.SoundEvents; import net.minecraft.util.SoundEvents;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.common.ForgeHooks; import net.minecraftforge.common.ForgeHooks;
import net.minecraftforge.fml.network.NetworkHooks; import net.minecraftforge.fml.network.NetworkHooks;
@ -78,7 +78,7 @@ public class EntityStructureFinder extends EyeOfEnderEntity {
public void tick() { public void tick() {
this.baseTick(); this.baseTick();
Vec3d vec3d = this.getMotion(); Vector3d vec3d = this.getMotion();
double d0 = this.getPosX() + vec3d.x; double d0 = this.getPosX() + vec3d.x;
double d1 = this.getPosY() + vec3d.y; double d1 = this.getPosY() + vec3d.y;
double d2 = this.getPosZ() + vec3d.z; double d2 = this.getPosZ() + vec3d.z;
@ -108,7 +108,7 @@ public class EntityStructureFinder extends EyeOfEnderEntity {
} }
int j = this.getPosY() < this.targetY ? 1 : -1; int j = this.getPosY() < this.targetY ? 1 : -1;
vec3d = new Vec3d(Math.cos(f2) * d5, d6 + ((double) j - d6) * (double) 0.015F, Math.sin(f2) * d5); vec3d = new Vector3d(Math.cos(f2) * d5, d6 + ((double) j - d6) * (double) 0.015F, Math.sin(f2) * d5);
this.setMotion(vec3d); this.setMotion(vec3d);
} }

View file

@ -6,7 +6,6 @@ import de.ellpeck.naturesaura.items.ItemEffectPowder;
import de.ellpeck.naturesaura.items.ModItems; import de.ellpeck.naturesaura.items.ModItems;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.IRenderTypeBuffer; import net.minecraft.client.renderer.IRenderTypeBuffer;
import net.minecraft.client.renderer.Vector3f;
import net.minecraft.client.renderer.entity.EntityRenderer; import net.minecraft.client.renderer.entity.EntityRenderer;
import net.minecraft.client.renderer.entity.EntityRendererManager; import net.minecraft.client.renderer.entity.EntityRendererManager;
import net.minecraft.client.renderer.model.ItemCameraTransforms; import net.minecraft.client.renderer.model.ItemCameraTransforms;
@ -14,6 +13,8 @@ import net.minecraft.client.renderer.texture.AtlasTexture;
import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.client.renderer.texture.OverlayTexture;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.util.math.vector.Vector3f;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
@ -44,7 +45,7 @@ public class RenderEffectInhibitor extends EntityRenderer<EntityEffectInhibitor>
ResourceLocation effect = entity.getInhibitedEffect(); ResourceLocation effect = entity.getInhibitedEffect();
ItemStack stack = this.items.computeIfAbsent(effect, ItemStack stack = this.items.computeIfAbsent(effect,
res -> ItemEffectPowder.setEffect(new ItemStack(ModItems.EFFECT_POWDER), effect)); res -> ItemEffectPowder.setEffect(new ItemStack(ModItems.EFFECT_POWDER), effect));
Minecraft.getInstance().getItemRenderer().renderItem(stack, ItemCameraTransforms.TransformType.GROUND, packedLightIn, OverlayTexture.DEFAULT_LIGHT, matrixStackIn, bufferIn); Minecraft.getInstance().getItemRenderer().renderItem(stack, ItemCameraTransforms.TransformType.GROUND, packedLightIn, OverlayTexture.NO_OVERLAY, matrixStackIn, bufferIn);
matrixStackIn.pop(); matrixStackIn.pop();
} }
} }

View file

@ -7,13 +7,13 @@ import de.ellpeck.naturesaura.entities.EntityMoverMinecart;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.client.renderer.IRenderTypeBuffer; import net.minecraft.client.renderer.IRenderTypeBuffer;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.Vector3f;
import net.minecraft.client.renderer.entity.EntityRendererManager; import net.minecraft.client.renderer.entity.EntityRendererManager;
import net.minecraft.client.renderer.entity.MinecartRenderer; import net.minecraft.client.renderer.entity.MinecartRenderer;
import net.minecraft.client.renderer.model.Model; import net.minecraft.client.renderer.model.Model;
import net.minecraft.client.renderer.model.ModelRenderer; import net.minecraft.client.renderer.model.ModelRenderer;
import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.client.renderer.texture.OverlayTexture;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.vector.Vector3f;
public class RenderMoverMinecart extends MinecartRenderer<EntityMoverMinecart> { public class RenderMoverMinecart extends MinecartRenderer<EntityMoverMinecart> {
@ -35,7 +35,7 @@ public class RenderMoverMinecart extends MinecartRenderer<EntityMoverMinecart> {
matrixStackIn.translate(0, 22 / 16F, 0); matrixStackIn.translate(0, 22 / 16F, 0);
matrixStackIn.translate(0, 0, 1); matrixStackIn.translate(0, 0, 1);
matrixStackIn.rotate(Vector3f.XP.rotationDegrees(180)); matrixStackIn.rotate(Vector3f.XP.rotationDegrees(180));
this.model.render(matrixStackIn, bufferIn.getBuffer(this.model.getRenderType(RES)), packedLightIn, OverlayTexture.DEFAULT_LIGHT, 1, 1, 1, 1); this.model.render(matrixStackIn, bufferIn.getBuffer(this.model.getRenderType(RES)), packedLightIn, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
matrixStackIn.pop(); matrixStackIn.pop();
} }
@ -44,7 +44,7 @@ public class RenderMoverMinecart extends MinecartRenderer<EntityMoverMinecart> {
private final ModelRenderer box; private final ModelRenderer box;
public ModelMoverMinecart() { public ModelMoverMinecart() {
super(RenderType::entityCutout); super(RenderType::getEntityCutout);
this.box = new ModelRenderer(this, 0, 0); this.box = new ModelRenderer(this, 0, 0);
this.box.setTextureSize(64, 64); this.box.setTextureSize(64, 64);
this.box.addBox(0, 0, 0, 16, 24, 16); this.box.addBox(0, 0, 0, 16, 24, 16);

View file

@ -1,6 +1,6 @@
package de.ellpeck.naturesaura.entities.render; package de.ellpeck.naturesaura.entities.render;
import net.minecraft.client.renderer.culling.ClippingHelperImpl; import net.minecraft.client.renderer.culling.ClippingHelper;
import net.minecraft.client.renderer.entity.EntityRenderer; import net.minecraft.client.renderer.entity.EntityRenderer;
import net.minecraft.client.renderer.entity.EntityRendererManager; import net.minecraft.client.renderer.entity.EntityRendererManager;
import net.minecraft.client.renderer.texture.AtlasTexture; import net.minecraft.client.renderer.texture.AtlasTexture;
@ -13,7 +13,7 @@ public class RenderStub extends EntityRenderer<Entity> {
} }
@Override @Override
public boolean shouldRender(Entity livingEntityIn, ClippingHelperImpl camera, double camX, double camY, double camZ) { public boolean shouldRender(Entity livingEntityIn, ClippingHelper camera, double camX, double camY, double camZ) {
return false; return false;
} }

View file

@ -1,5 +1,6 @@
package de.ellpeck.naturesaura.events; package de.ellpeck.naturesaura.events;
import com.mojang.blaze3d.matrix.MatrixStack;
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 de.ellpeck.naturesaura.Helper; import de.ellpeck.naturesaura.Helper;
@ -31,15 +32,18 @@ import net.minecraft.entity.Entity;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.item.Items; import net.minecraft.item.Items;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IReorderingProcessor;
import net.minecraft.util.RegistryKey;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraft.util.Tuple; import net.minecraft.util.Tuple;
import net.minecraft.util.math.*; import net.minecraft.util.math.*;
import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.StringTextComponent; import net.minecraft.util.text.StringTextComponent;
import net.minecraft.util.text.TextFormatting; import net.minecraft.util.text.TextFormatting;
import net.minecraft.util.text.TranslationTextComponent;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraft.world.biome.BiomeColors; import net.minecraft.world.biome.BiomeColors;
import net.minecraft.world.dimension.DimensionType;
import net.minecraft.world.gen.Heightmap; import net.minecraft.world.gen.Heightmap;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
@ -71,25 +75,6 @@ public class ClientEvents {
private static ItemStack heldEye = ItemStack.EMPTY; private static ItemStack heldEye = ItemStack.EMPTY;
private static ItemStack heldOcular = ItemStack.EMPTY; private static ItemStack heldOcular = ItemStack.EMPTY;
@SubscribeEvent
public void onTooltip(ItemTooltipEvent event) {
if (ModList.get().isLoaded("enchdesc"))
return;
ItemStack stack = event.getItemStack();
List<ITextComponent> tooltip = event.getToolTip();
for (Map.Entry<Enchantment, Integer> entry : EnchantmentHelper.getEnchantments(stack).entrySet()) {
Enchantment enchantment = entry.getKey();
if (!(enchantment instanceof ModEnchantment))
continue;
String info = I18n.format(enchantment.getName() + ".desc");
List<String> split = Minecraft.getInstance().fontRenderer.listFormattedStringToWidth(info, 250);
ITextComponent name = enchantment.getDisplayName(entry.getValue());
int addIndex = tooltip.indexOf(name) + 1;
for (int i = split.size() - 1; i >= 0; i--)
tooltip.add(addIndex, new StringTextComponent(TextFormatting.DARK_GRAY + split.get(i)));
}
}
@SubscribeEvent @SubscribeEvent
public void onDebugRender(RenderGameOverlayEvent.Text event) { public void onDebugRender(RenderGameOverlayEvent.Text event) {
Minecraft mc = Minecraft.getInstance(); Minecraft mc = Minecraft.getInstance();
@ -152,7 +137,7 @@ public class ClientEvents {
mc.world.rand.nextGaussian() * 0.01F, mc.world.rand.nextGaussian() * 0.01F,
mc.world.rand.nextFloat() * 0.025F, mc.world.rand.nextFloat() * 0.025F,
mc.world.rand.nextGaussian() * 0.01F, mc.world.rand.nextGaussian() * 0.01F,
BiomeColors.func_228361_b_(mc.world, pos), BiomeColors.getGrassColor(mc.world, pos),
Math.min(2F, 1F + mc.world.rand.nextFloat() * (excess / 30000F)), Math.min(2F, 1F + mc.world.rand.nextFloat() * (excess / 30000F)),
Math.min(300, 100 + mc.world.rand.nextInt(excess / 3000 + 1)), Math.min(300, 100 + mc.world.rand.nextInt(excess / 3000 + 1)),
0F, false, true); 0F, false, true);
@ -165,7 +150,7 @@ public class ClientEvents {
NaturesAuraAPI.IInternalHooks inst = NaturesAuraAPI.instance(); NaturesAuraAPI.IInternalHooks inst = NaturesAuraAPI.instance();
inst.setParticleSpawnRange(512); inst.setParticleSpawnRange(512);
inst.setParticleDepth(false); inst.setParticleDepth(false);
for (BlockPos pos : ItemRangeVisualizer.VISUALIZED_RAILS.get(mc.world.getDimension().getType())) { for (BlockPos pos : ItemRangeVisualizer.VISUALIZED_RAILS.get(mc.world.func_234923_W_())) {
NaturesAuraAPI.instance().spawnMagicParticle( NaturesAuraAPI.instance().spawnMagicParticle(
pos.getX() + mc.world.rand.nextFloat(), pos.getX() + mc.world.rand.nextFloat(),
pos.getY() + mc.world.rand.nextFloat(), pos.getY() + mc.world.rand.nextFloat(),
@ -195,13 +180,14 @@ public class ClientEvents {
@SubscribeEvent @SubscribeEvent
public void onWorldRender(RenderWorldLastEvent event) { public void onWorldRender(RenderWorldLastEvent event) {
Minecraft mc = Minecraft.getInstance(); Minecraft mc = Minecraft.getInstance();
MatrixStack stack = event.getMatrixStack();
ParticleHandler.renderParticles(event.getMatrixStack(), mc.getRenderPartialTicks()); ParticleHandler.renderParticles(event.getMatrixStack(), mc.getRenderPartialTicks());
RenderSystem.pushMatrix(); RenderSystem.pushMatrix();
RenderSystem.multMatrix(event.getMatrixStack().getLast().getPositionMatrix()); RenderSystem.multMatrix(event.getMatrixStack().getLast().getMatrix());
ActiveRenderInfo info = mc.gameRenderer.getActiveRenderInfo(); ActiveRenderInfo info = mc.gameRenderer.getActiveRenderInfo();
Vec3d view = info.getProjectedView(); Vector3d view = info.getProjectedView();
GL11.glTranslated(-view.getX(), -view.getY(), -view.getZ()); GL11.glTranslated(-view.getX(), -view.getY(), -view.getZ());
if (mc.gameSettings.showDebugInfo && mc.player.isCreative() && ModConfig.instance.debugWorld.get()) { if (mc.gameSettings.showDebugInfo && mc.player.isCreative() && ModConfig.instance.debugWorld.get()) {
@ -230,7 +216,7 @@ public class ClientEvents {
RenderSystem.translated((pos.getX() + 0.1) / scale, (pos.getY() + 1.001) / scale, (pos.getZ() + 0.1) / scale); RenderSystem.translated((pos.getX() + 0.1) / scale, (pos.getY() + 1.001) / scale, (pos.getZ() + 0.1) / scale);
RenderSystem.rotatef(90F, 1F, 0F, 0F); RenderSystem.rotatef(90F, 1F, 0F, 0F);
RenderSystem.scalef(0.65F, 0.65F, 0.65F); RenderSystem.scalef(0.65F, 0.65F, 0.65F);
mc.fontRenderer.drawString(format.format(spot.getValue()), 0, 0, 0); mc.fontRenderer.drawString(stack,format.format(spot.getValue()), 0, 0, 0);
RenderSystem.popMatrix(); RenderSystem.popMatrix();
} }
@ -239,7 +225,7 @@ public class ClientEvents {
} }
if (Helper.isHoldingItem(mc.player, ModItems.RANGE_VISUALIZER)) { if (Helper.isHoldingItem(mc.player, ModItems.RANGE_VISUALIZER)) {
DimensionType dim = mc.world.getDimension().getType(); RegistryKey<World> dim = mc.world.func_234923_W_();
GL11.glPushMatrix(); GL11.glPushMatrix();
GL11.glDisable(GL11.GL_CULL_FACE); GL11.glDisable(GL11.GL_CULL_FACE);
GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS); GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS);
@ -283,6 +269,7 @@ public class ClientEvents {
@SubscribeEvent @SubscribeEvent
public void onOverlayRender(RenderGameOverlayEvent.Post event) { public void onOverlayRender(RenderGameOverlayEvent.Post event) {
Minecraft mc = Minecraft.getInstance(); Minecraft mc = Minecraft.getInstance();
MatrixStack stack = event.getMatrixStack();
if (event.getType() == ElementType.ALL) { if (event.getType() == ElementType.ALL) {
MainWindow res = event.getWindow(); MainWindow res = event.getWindow();
if (mc.player != null) { if (mc.player != null) {
@ -300,14 +287,14 @@ public class ClientEvents {
RenderSystem.color4f((color >> 16 & 255) / 255F, (color >> 8 & 255) / 255F, (color & 255) / 255F, 1); RenderSystem.color4f((color >> 16 & 255) / 255F, (color >> 8 & 255) / 255F, (color & 255) / 255F, 1);
mc.getTextureManager().bindTexture(OVERLAYS); mc.getTextureManager().bindTexture(OVERLAYS);
if (width < 80) if (width < 80)
AbstractGui.blit(x + width, y, width, 0, 80 - width, 6, 256, 256); AbstractGui.blit(stack, x + width, y, width, 0, 80 - width, 6, 256, 256);
if (width > 0) if (width > 0)
AbstractGui.blit(x, y, 0, 6, width, 6, 256, 256); AbstractGui.blit(stack, x, y, 0, 6, width, 6, 256, 256);
float scale = 0.75F; float scale = 0.75F;
RenderSystem.scalef(scale, scale, scale); RenderSystem.scalef(scale, scale, scale);
String s = heldCache.getDisplayName().getFormattedText(); String s = heldCache.getDisplayName().getString();
mc.fontRenderer.drawStringWithShadow(s, conf == 1 ? x / scale : (x + 80) / scale - mc.fontRenderer.getStringWidth(s), (y - 7) / scale, color); mc.fontRenderer.drawStringWithShadow(stack, s, conf == 1 ? x / scale : (x + 80) / scale - mc.fontRenderer.getStringWidth(s), (y - 7) / scale, color);
RenderSystem.color4f(1F, 1F, 1F, 1); RenderSystem.color4f(1F, 1F, 1F, 1);
RenderSystem.popMatrix(); RenderSystem.popMatrix();
@ -336,33 +323,33 @@ public class ClientEvents {
int tHeight = MathHelper.ceil(MathHelper.clamp(totalPercentage, 0F, 1F) * 50); int tHeight = MathHelper.ceil(MathHelper.clamp(totalPercentage, 0F, 1F) * 50);
int y = !heldOcular.isEmpty() && totalPercentage > 1F ? startY + 26 : startY; int y = !heldOcular.isEmpty() && totalPercentage > 1F ? startY + 26 : startY;
if (tHeight < 50) if (tHeight < 50)
AbstractGui.blit(startX, y, 6, 12, 6, 50 - tHeight, 256, 256); AbstractGui.blit(stack, startX, y, 6, 12, 6, 50 - tHeight, 256, 256);
if (tHeight > 0) if (tHeight > 0)
AbstractGui.blit(startX, y + 50 - tHeight, 0, 12 + 50 - tHeight, 6, tHeight, 256, 256); AbstractGui.blit(stack, startX, y + 50 - tHeight, 0, 12 + 50 - tHeight, 6, tHeight, 256, 256);
if (!heldOcular.isEmpty()) { if (!heldOcular.isEmpty()) {
int topHeight = MathHelper.ceil(MathHelper.clamp((totalPercentage - 1F) * 2F, 0F, 1F) * 25); int topHeight = MathHelper.ceil(MathHelper.clamp((totalPercentage - 1F) * 2F, 0F, 1F) * 25);
if (topHeight > 0) { if (topHeight > 0) {
if (topHeight < 25) if (topHeight < 25)
AbstractGui.blit(startX, startY, 18, 12, 6, 25 - topHeight, 256, 256); AbstractGui.blit(stack, startX, startY, 18, 12, 6, 25 - topHeight, 256, 256);
AbstractGui.blit(startX, startY + 25 - topHeight, 12, 12 + 25 - topHeight, 6, topHeight, 256, 256); AbstractGui.blit(stack, startX, startY + 25 - topHeight, 12, 12 + 25 - topHeight, 6, topHeight, 256, 256);
} }
int bottomHeight = MathHelper.floor(MathHelper.clamp((totalPercentage + 1F) * 2F - 1F, 0F, 1F) * 25); int bottomHeight = MathHelper.floor(MathHelper.clamp((totalPercentage + 1F) * 2F - 1F, 0F, 1F) * 25);
if (bottomHeight < 25) { if (bottomHeight < 25) {
AbstractGui.blit(startX, startY + 51, 18, 12, 6, 25 - bottomHeight, 256, 256); AbstractGui.blit(stack, startX, startY + 51, 18, 12, 6, 25 - bottomHeight, 256, 256);
if (bottomHeight > 0) if (bottomHeight > 0)
AbstractGui.blit(startX, startY + 51 + 25 - bottomHeight, 12, 12 + 25 - bottomHeight, 6, bottomHeight, 256, 256); AbstractGui.blit(stack, startX, startY + 51 + 25 - bottomHeight, 12, 12 + 25 - bottomHeight, 6, bottomHeight, 256, 256);
} }
} }
if (totalPercentage > (heldOcular.isEmpty() ? 1F : 1.5F)) if (totalPercentage > (heldOcular.isEmpty() ? 1F : 1.5F))
mc.fontRenderer.drawStringWithShadow("+", startX + plusOffX, startY - 0.5F, color); mc.fontRenderer.drawStringWithShadow(stack, "+", startX + plusOffX, startY - 0.5F, color);
if (totalPercentage < (heldOcular.isEmpty() ? 0F : -0.5F)) if (totalPercentage < (heldOcular.isEmpty() ? 0F : -0.5F))
mc.fontRenderer.drawStringWithShadow("-", startX + plusOffX, startY - 0.5F + (heldOcular.isEmpty() ? 44 : 70), color); mc.fontRenderer.drawStringWithShadow(stack, "-", startX + plusOffX, startY - 0.5F + (heldOcular.isEmpty() ? 44 : 70), color);
RenderSystem.pushMatrix(); RenderSystem.pushMatrix();
RenderSystem.scalef(textScale, textScale, textScale); RenderSystem.scalef(textScale, textScale, textScale);
mc.fontRenderer.drawStringWithShadow(text, textX / textScale, textY / textScale, color); mc.fontRenderer.drawStringWithShadow(stack, text, textX / textScale, textY / textScale, color);
RenderSystem.popMatrix(); RenderSystem.popMatrix();
if (!heldOcular.isEmpty()) { if (!heldOcular.isEmpty()) {
@ -374,12 +361,12 @@ public class ClientEvents {
for (Tuple<ItemStack, Boolean> effect : SHOWING_EFFECTS.values()) { for (Tuple<ItemStack, Boolean> effect : SHOWING_EFFECTS.values()) {
int theX = (int) (stackX / scale); int theX = (int) (stackX / scale);
int theY = (int) (stackY / scale); int theY = (int) (stackY / scale);
ItemStack stack = effect.getA(); ItemStack itemStack = effect.getA();
Helper.renderItemInGui(stack, theX, theY, 1F); Helper.renderItemInGui(itemStack, theX, theY, 1F);
if (effect.getB()) { if (effect.getB()) {
GlStateManager.disableDepthTest(); GlStateManager.disableDepthTest();
mc.getTextureManager().bindTexture(OVERLAYS); mc.getTextureManager().bindTexture(OVERLAYS);
AbstractGui.blit(theX, theY, 240, 0, 16, 16, 256, 256); AbstractGui.blit(stack, theX, theY, 240, 0, 16, 16, 256, 256);
GlStateManager.enableDepthTest(); GlStateManager.enableDepthTest();
} }
stackY += 8; stackY += 8;
@ -398,40 +385,40 @@ public class ClientEvents {
if (tile != null && (container = tile.getCapability(NaturesAuraAPI.capAuraContainer, null).orElse(null)) != null) { if (tile != null && (container = tile.getCapability(NaturesAuraAPI.capAuraContainer, null).orElse(null)) != null) {
BlockState state = mc.world.getBlockState(pos); BlockState state = mc.world.getBlockState(pos);
ItemStack blockStack = state.getBlock().getPickBlock(state, mc.objectMouseOver, mc.world, pos, mc.player); ItemStack blockStack = state.getBlock().getPickBlock(state, mc.objectMouseOver, mc.world, pos, mc.player);
this.drawContainerInfo(container.getStoredAura(), container.getMaxAura(), container.getAuraColor(), this.drawContainerInfo(stack,container.getStoredAura(), container.getMaxAura(), container.getAuraColor(),
mc, res, 35, blockStack.getDisplayName().getFormattedText(), null); mc, res, 35, blockStack.getDisplayName().getString(), null);
if (tile instanceof TileEntityNatureAltar) { if (tile instanceof TileEntityNatureAltar) {
ItemStack tileStack = ((TileEntityNatureAltar) tile).getItemHandler(null).getStackInSlot(0); ItemStack tileStack = ((TileEntityNatureAltar) tile).getItemHandler(null).getStackInSlot(0);
if (!tileStack.isEmpty()) { if (!tileStack.isEmpty()) {
IAuraContainer stackCont = tileStack.getCapability(NaturesAuraAPI.capAuraContainer, null).orElse(null); IAuraContainer stackCont = tileStack.getCapability(NaturesAuraAPI.capAuraContainer, null).orElse(null);
if (stackCont != null) { if (stackCont != null) {
this.drawContainerInfo(stackCont.getStoredAura(), stackCont.getMaxAura(), stackCont.getAuraColor(), this.drawContainerInfo(stack,stackCont.getStoredAura(), stackCont.getMaxAura(), stackCont.getAuraColor(),
mc, res, 55, tileStack.getDisplayName().getFormattedText(), null); mc, res, 55, tileStack.getDisplayName().getString(), null);
} }
} }
} }
} else if (tile instanceof TileEntityRFConverter) { } else if (tile instanceof TileEntityRFConverter) {
EnergyStorage storage = ((TileEntityRFConverter) tile).storage; EnergyStorage storage = ((TileEntityRFConverter) tile).storage;
this.drawContainerInfo(storage.getEnergyStored(), storage.getMaxEnergyStored(), 0xcc4916, this.drawContainerInfo(stack,storage.getEnergyStored(), storage.getMaxEnergyStored(), 0xcc4916,
mc, res, 35, I18n.format("tile.naturesaura.rf_converter.name"), mc, res, 35, I18n.format("tile.naturesaura.rf_converter.name"),
storage.getEnergyStored() + " / " + storage.getMaxEnergyStored() + " RF"); storage.getEnergyStored() + " / " + storage.getMaxEnergyStored() + " RF");
} else if (tile instanceof TileEntityGratedChute) { } else if (tile instanceof TileEntityGratedChute) {
TileEntityGratedChute chute = (TileEntityGratedChute) tile; TileEntityGratedChute chute = (TileEntityGratedChute) tile;
ItemStack stack = chute.getItemHandler(null).getStackInSlot(0); ItemStack itemStack = chute.getItemHandler(null).getStackInSlot(0);
if (stack.isEmpty()) if (itemStack.isEmpty())
mc.fontRenderer.drawStringWithShadow( mc.fontRenderer.drawStringWithShadow(stack,
TextFormatting.GRAY.toString() + TextFormatting.ITALIC + I18n.format("info.naturesaura.empty"), TextFormatting.GRAY.toString() + TextFormatting.ITALIC + I18n.format("info.naturesaura.empty"),
x + 5, y - 11, 0xFFFFFF); x + 5, y - 11, 0xFFFFFF);
else else
Helper.renderItemInGui(stack, x + 2, y - 18, 1F); Helper.renderItemInGui(itemStack, x + 2, y - 18, 1F);
Helper.renderItemInGui(ITEM_FRAME, x - 24, y - 24, 1F); Helper.renderItemInGui(ITEM_FRAME, x - 24, y - 24, 1F);
mc.getTextureManager().bindTexture(OVERLAYS); mc.getTextureManager().bindTexture(OVERLAYS);
int u = chute.isBlacklist ? 240 : 224; int u = chute.isBlacklist ? 240 : 224;
GlStateManager.disableDepthTest(); GlStateManager.disableDepthTest();
AbstractGui.blit(x - 18, y - 18, u, 0, 16, 16, 256, 256); AbstractGui.blit(stack, x - 18, y - 18, u, 0, 16, 16, 256, 256);
GlStateManager.enableDepthTest(); GlStateManager.enableDepthTest();
} else if (tile instanceof TileEntityItemDistributor) { } else if (tile instanceof TileEntityItemDistributor) {
TileEntityItemDistributor distributor = (TileEntityItemDistributor) tile; TileEntityItemDistributor distributor = (TileEntityItemDistributor) tile;
@ -439,15 +426,15 @@ public class ClientEvents {
mc.getTextureManager().bindTexture(OVERLAYS); mc.getTextureManager().bindTexture(OVERLAYS);
int u = !distributor.isRandomMode ? 240 : 224; int u = !distributor.isRandomMode ? 240 : 224;
GlStateManager.disableDepthTest(); GlStateManager.disableDepthTest();
AbstractGui.blit(x - 18, y - 18, u, 0, 16, 16, 256, 256); AbstractGui.blit(stack, x - 18, y - 18, u, 0, 16, 16, 256, 256);
GlStateManager.enableDepthTest(); GlStateManager.enableDepthTest();
} else if (tile instanceof TileEntityAuraTimer) { } else if (tile instanceof TileEntityAuraTimer) {
TileEntityAuraTimer timer = (TileEntityAuraTimer) tile; TileEntityAuraTimer timer = (TileEntityAuraTimer) tile;
ItemStack stack = timer.getItemHandler(null).getStackInSlot(0); ItemStack itemStack = timer.getItemHandler(null).getStackInSlot(0);
if (!stack.isEmpty()) { if (!itemStack.isEmpty()) {
Helper.renderItemInGui(stack, x - 20, y - 20, 1); Helper.renderItemInGui(itemStack, x - 20, y - 20, 1);
mc.fontRenderer.drawStringWithShadow(TextFormatting.GRAY + this.createTimeString(timer.getTotalTime()), x + 5, y - 11, 0xFFFFFF); mc.fontRenderer.drawStringWithShadow(stack,TextFormatting.GRAY + this.createTimeString(timer.getTotalTime()), x + 5, y - 11, 0xFFFFFF);
mc.fontRenderer.drawStringWithShadow(TextFormatting.GRAY + I18n.format("info.naturesaura.remaining", this.createTimeString(timer.getTimeLeft())), x + 5, y + 3, 0xFFFFFF); mc.fontRenderer.drawStringWithShadow(stack,TextFormatting.GRAY + I18n.format("info.naturesaura.remaining", this.createTimeString(timer.getTimeLeft())), x + 5, y + 3, 0xFFFFFF);
} }
} }
} }
@ -468,7 +455,7 @@ public class ClientEvents {
return String.format("%02d:%02d:%02d.%02d", hours, minutes, seconds, ticks); return String.format("%02d:%02d:%02d.%02d", hours, minutes, seconds, ticks);
} }
private void drawContainerInfo(int stored, int max, int color, Minecraft mc, MainWindow res, int yOffset, String name, String textBelow) { private void drawContainerInfo(MatrixStack stack, int stored, int max, int color, Minecraft mc, MainWindow res, int yOffset, String name, String textBelow) {
RenderSystem.color3f((color >> 16 & 255) / 255F, (color >> 8 & 255) / 255F, (color & 255) / 255F); RenderSystem.color3f((color >> 16 & 255) / 255F, (color >> 8 & 255) / 255F, (color & 255) / 255F);
int x = res.getScaledWidth() / 2 - 40; int x = res.getScaledWidth() / 2 - 40;
@ -477,13 +464,13 @@ public class ClientEvents {
mc.getTextureManager().bindTexture(OVERLAYS); mc.getTextureManager().bindTexture(OVERLAYS);
if (width < 80) if (width < 80)
AbstractGui.blit(x + width, y, width, 0, 80 - width, 6, 256, 256); AbstractGui.blit(stack,x + width, y, width, 0, 80 - width, 6, 256, 256);
if (width > 0) if (width > 0)
AbstractGui.blit(x, y, 0, 6, width, 6, 256, 256); AbstractGui.blit(stack,x, y, 0, 6, width, 6, 256, 256);
mc.fontRenderer.drawStringWithShadow(name, x + 40 - mc.fontRenderer.getStringWidth(name) / 2F, y - 9, color); mc.fontRenderer.drawStringWithShadow(stack,name, x + 40 - mc.fontRenderer.getStringWidth(name) / 2F, y - 9, color);
if (textBelow != null) if (textBelow != null)
mc.fontRenderer.drawStringWithShadow(textBelow, x + 40 - mc.fontRenderer.getStringWidth(textBelow) / 2F, y + 7, color); mc.fontRenderer.drawStringWithShadow(stack,textBelow, x + 40 - mc.fontRenderer.getStringWidth(textBelow) / 2F, y + 7, color);
} }
} }

View file

@ -134,6 +134,6 @@ public class CommonEvents {
@SubscribeEvent @SubscribeEvent
public void onServerStarting(FMLServerStartingEvent event) { public void onServerStarting(FMLServerStartingEvent event) {
CommandAura.register(event.getCommandDispatcher()); CommandAura.register(event.getServer().getCommandManager().getDispatcher());
} }
} }

View file

@ -1,13 +1,14 @@
package de.ellpeck.naturesaura.gen; package de.ellpeck.naturesaura.gen;
import net.minecraft.world.gen.feature.BaseTreeFeatureConfig;
import net.minecraft.world.gen.feature.Feature; import net.minecraft.world.gen.feature.Feature;
import net.minecraft.world.gen.feature.NoFeatureConfig; import net.minecraft.world.gen.feature.NoFeatureConfig;
import net.minecraft.world.gen.feature.TreeFeatureConfig; import net.minecraft.world.gen.feature.TreeFeature;
@SuppressWarnings("FieldNamingConvention") @SuppressWarnings("FieldNamingConvention")
public final class ModFeatures { public final class ModFeatures {
public static Feature<TreeFeatureConfig> ANCIENT_TREE; public static Feature<BaseTreeFeatureConfig> ANCIENT_TREE;
public static Feature<NoFeatureConfig> NETHER_WART_MUSHROOM; public static Feature<NoFeatureConfig> NETHER_WART_MUSHROOM;
public static Feature<NoFeatureConfig> AURA_BLOOM; public static Feature<NoFeatureConfig> AURA_BLOOM;
public static Feature<NoFeatureConfig> AURA_CACTUS; public static Feature<NoFeatureConfig> AURA_CACTUS;

View file

@ -1,36 +1,42 @@
package de.ellpeck.naturesaura.gen; package de.ellpeck.naturesaura.gen;
import com.mojang.serialization.Codec;
import de.ellpeck.naturesaura.blocks.ModBlocks; import de.ellpeck.naturesaura.blocks.ModBlocks;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks; import net.minecraft.block.Blocks;
import net.minecraft.block.LogBlock; import net.minecraft.block.RotatedPillarBlock;
import net.minecraft.block.material.Material;
import net.minecraft.util.Direction.Axis; import net.minecraft.util.Direction.Axis;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.MutableBoundingBox; import net.minecraft.util.math.MutableBoundingBox;
import net.minecraft.world.ISeedReader;
import net.minecraft.world.IWorldWriter;
import net.minecraft.world.gen.ChunkGenerator;
import net.minecraft.world.gen.IWorldGenerationReader; import net.minecraft.world.gen.IWorldGenerationReader;
import net.minecraft.world.gen.feature.AbstractTreeFeature; import net.minecraft.world.gen.feature.BaseTreeFeatureConfig;
import net.minecraft.world.gen.feature.TreeFeatureConfig; import net.minecraft.world.gen.feature.Feature;
import net.minecraft.world.gen.feature.TreeFeature;
import java.util.Random; import java.util.Random;
import java.util.Set; import java.util.Set;
public class WorldGenAncientTree extends AbstractTreeFeature<TreeFeatureConfig> { public class WorldGenAncientTree extends Feature<BaseTreeFeatureConfig> {
// what the heck even is this // what the heck even is this
public static final TreeFeatureConfig CONFIG = new TreeFeatureConfig.Builder(null, null, null).build(); public static final BaseTreeFeatureConfig CONFIG = new BaseTreeFeatureConfig.Builder(null, null, null, null, null).build();
public WorldGenAncientTree() { public WorldGenAncientTree() {
super(d -> CONFIG); super(Codec.unit(CONFIG));
} }
@Override @Override
protected boolean func_225557_a_(IWorldGenerationReader world, Random rand, BlockPos pos, Set<BlockPos> cb1, Set<BlockPos> cb2, MutableBoundingBox box, TreeFeatureConfig config) { public boolean func_241855_a(ISeedReader world, ChunkGenerator generator, Random rand, BlockPos pos, BaseTreeFeatureConfig p_241855_5_) {
int height = rand.nextInt(3) + 5; int height = rand.nextInt(3) + 5;
BlockPos trunkTop = pos.up(height); BlockPos trunkTop = pos.up(height);
this.setBlockState(world, pos, Blocks.AIR.getDefaultState()); this.func_230367_a_(world, pos, Blocks.AIR.getDefaultState());
//Roots //Roots
int rootsAmount = rand.nextInt(4) + 5; int rootsAmount = rand.nextInt(4) + 5;
for (int i = 0; i < rootsAmount; i++) { for (int i = 0; i < rootsAmount; i++) {
@ -45,7 +51,7 @@ public class WorldGenAncientTree extends AbstractTreeFeature<TreeFeatureConfig>
if (goal.distanceSq(pos) >= 10 * 10) if (goal.distanceSq(pos) >= 10 * 10)
break; break;
} }
this.makeBranch(cb1, world, pos.up(rand.nextInt(1)), goal, ModBlocks.ANCIENT_BARK.getDefaultState(), false); this.makeBranch(world, pos.up(rand.nextInt(1)), goal, ModBlocks.ANCIENT_BARK.getDefaultState(), false);
} }
//Trunk //Trunk
@ -53,14 +59,13 @@ public class WorldGenAncientTree extends AbstractTreeFeature<TreeFeatureConfig>
for (int z = 0; z <= 1; z++) { for (int z = 0; z <= 1; z++) {
for (int i = height - (x + z) * (rand.nextInt(2) + 2); i >= 0; i--) { for (int i = height - (x + z) * (rand.nextInt(2) + 2); i >= 0; i--) {
BlockPos goal = pos.add(x, i, z); BlockPos goal = pos.add(x, i, z);
if (func_214587_a(world, goal)) { if (!world.hasBlockState(goal, s -> !s.canBeReplacedByLogs(world, goal))) {
this.setBlockState(world, goal, ModBlocks.ANCIENT_LOG.getDefaultState().with(LogBlock.AXIS, Axis.Y)); this.func_230367_a_(world, goal, ModBlocks.ANCIENT_LOG.getDefaultState().with(RotatedPillarBlock.AXIS, Axis.Y));
cb1.add(goal);
} }
} }
} }
} }
this.makeLeaves(cb2, world, trunkTop.up(rand.nextInt(2) - 1), ModBlocks.ANCIENT_LEAVES.getDefaultState(), rand.nextInt(2) + 3, rand); this.makeLeaves(world, trunkTop.up(rand.nextInt(2) - 1), ModBlocks.ANCIENT_LEAVES.getDefaultState(), rand.nextInt(2) + 3, rand);
//Branches //Branches
int branchAmount = rand.nextInt(3) + 4; int branchAmount = rand.nextInt(3) + 4;
@ -71,14 +76,14 @@ public class WorldGenAncientTree extends AbstractTreeFeature<TreeFeatureConfig>
float z = (float) Math.cos(angle) * length; float z = (float) Math.cos(angle) * length;
BlockPos goal = trunkTop.add(x, rand.nextInt(3) + 1, z); BlockPos goal = trunkTop.add(x, rand.nextInt(3) + 1, z);
this.makeBranch(cb1, world, trunkTop, goal, ModBlocks.ANCIENT_LOG.getDefaultState(), true); this.makeBranch(world, trunkTop, goal, ModBlocks.ANCIENT_LOG.getDefaultState(), true);
this.makeLeaves(cb2, world, goal, ModBlocks.ANCIENT_LEAVES.getDefaultState(), rand.nextInt(2) + 2, rand); this.makeLeaves(world, goal, ModBlocks.ANCIENT_LEAVES.getDefaultState(), rand.nextInt(2) + 2, rand);
} }
return true; return true;
} }
private void makeBranch(Set changedBlocks, IWorldGenerationReader world, BlockPos first, BlockPos second, BlockState state, boolean hasAxis) { private void makeBranch(ISeedReader world, BlockPos first, BlockPos second, BlockState state, boolean hasAxis) {
BlockPos pos = second.add(-first.getX(), -first.getY(), -first.getZ()); BlockPos pos = second.add(-first.getX(), -first.getY(), -first.getZ());
int length = this.getHighestCoord(pos); int length = this.getHighestCoord(pos);
float stepX = (float) pos.getX() / (float) length; float stepX = (float) pos.getX() / (float) length;
@ -87,31 +92,29 @@ public class WorldGenAncientTree extends AbstractTreeFeature<TreeFeatureConfig>
for (int i = 0; i <= length; i++) { for (int i = 0; i <= length; i++) {
BlockPos goal = first.add(0.5F + i * stepX, 0.5F + i * stepY, 0.5F + i * stepZ); BlockPos goal = first.add(0.5F + i * stepX, 0.5F + i * stepY, 0.5F + i * stepZ);
if (func_214587_a(world, goal)) { if (!world.hasBlockState(goal, s -> !s.canBeReplacedByLogs(world, goal))) {
if (hasAxis) { if (hasAxis) {
Axis axis = this.getLogAxis(first, goal); Axis axis = this.getLogAxis(first, goal);
this.setBlockState(world, goal, state.with(LogBlock.AXIS, axis)); this.func_230367_a_(world, goal, state.with(RotatedPillarBlock.AXIS, axis));
} else { } else {
this.setBlockState(world, goal, state); this.func_230367_a_(world, goal, state);
} }
changedBlocks.add(goal);
} }
} }
} }
private void makeLeaves(Set changedBlocks, IWorldGenerationReader world, BlockPos pos, BlockState state, int radius, Random rand) { private void makeLeaves(IWorldGenerationReader world, BlockPos pos, BlockState state, int radius, Random rand) {
for (int x = -radius; x <= radius; x++) { for (int x = -radius; x <= radius; x++) {
for (int y = -radius; y <= radius; y++) { for (int y = -radius; y <= radius; y++) {
for (int z = -radius; z <= radius; z++) { for (int z = -radius; z <= radius; z++) {
BlockPos goal = pos.add(x, y, z); BlockPos goal = pos.add(x, y, z);
if (pos.distanceSq(goal) <= radius * radius + rand.nextInt(3) - 1) { if (pos.distanceSq(goal) <= radius * radius + rand.nextInt(3) - 1) {
if (isAirOrLeaves(world, goal)) { if (!world.hasBlockState(goal, s -> s.getMaterial() == Material.LEAVES)) {
if (world.hasBlockState(goal, st -> { if (world.hasBlockState(goal, st -> {
Block block = st.getBlock(); Block block = st.getBlock();
return !(block instanceof LogBlock) && block != Blocks.DIRT && block != Blocks.GRASS; return st.getMaterial() != Material.WOOD && block != Blocks.DIRT && block != Blocks.GRASS;
})) { })) {
this.setBlockState(world, goal, state); this.func_230367_a_(world, goal, state);
changedBlocks.add(goal);
} }
} }
} }

View file

@ -1,14 +1,15 @@
package de.ellpeck.naturesaura.gen; package de.ellpeck.naturesaura.gen;
import com.mojang.serialization.Codec;
import de.ellpeck.naturesaura.blocks.tiles.TileEntityAuraBloom; import de.ellpeck.naturesaura.blocks.tiles.TileEntityAuraBloom;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.MathHelper;
import net.minecraft.world.ISeedReader;
import net.minecraft.world.IWorld; import net.minecraft.world.IWorld;
import net.minecraft.world.gen.ChunkGenerator; import net.minecraft.world.gen.ChunkGenerator;
import net.minecraft.world.gen.GenerationSettings;
import net.minecraft.world.gen.Heightmap; import net.minecraft.world.gen.Heightmap;
import net.minecraft.world.gen.feature.Feature; import net.minecraft.world.gen.feature.Feature;
import net.minecraft.world.gen.feature.IFeatureConfig; import net.minecraft.world.gen.feature.IFeatureConfig;
@ -21,12 +22,12 @@ public class WorldGenAuraBloom extends Feature<NoFeatureConfig> {
private final Block block; private final Block block;
public WorldGenAuraBloom(Block block) { public WorldGenAuraBloom(Block block) {
super(d -> IFeatureConfig.NO_FEATURE_CONFIG); super(Codec.unit(IFeatureConfig.NO_FEATURE_CONFIG));
this.block = block; this.block = block;
} }
@Override @Override
public boolean place(IWorld worldIn, ChunkGenerator<? extends GenerationSettings> generator, Random rand, BlockPos pos, NoFeatureConfig config) { public boolean func_241855_a(ISeedReader worldIn, ChunkGenerator gen, Random rand, BlockPos pos, NoFeatureConfig p_241855_5_) {
if (rand.nextInt(60) != 0) if (rand.nextInt(60) != 0)
return false; return false;

View file

@ -1,13 +1,15 @@
package de.ellpeck.naturesaura.gen; package de.ellpeck.naturesaura.gen;
import com.mojang.serialization.Codec;
import de.ellpeck.naturesaura.blocks.ModBlocks; import de.ellpeck.naturesaura.blocks.ModBlocks;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.Blocks; import net.minecraft.block.Blocks;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.world.ISeedReader;
import net.minecraft.world.IWorld; import net.minecraft.world.IWorld;
import net.minecraft.world.gen.ChunkGenerator; import net.minecraft.world.gen.ChunkGenerator;
import net.minecraft.world.gen.GenerationSettings;
import net.minecraft.world.gen.feature.Feature; import net.minecraft.world.gen.feature.Feature;
import net.minecraft.world.gen.feature.IFeatureConfig;
import net.minecraft.world.gen.feature.NoFeatureConfig; import net.minecraft.world.gen.feature.NoFeatureConfig;
import java.util.Random; import java.util.Random;
@ -15,11 +17,11 @@ import java.util.Random;
public class WorldGenNetherWartMushroom extends Feature<NoFeatureConfig> { public class WorldGenNetherWartMushroom extends Feature<NoFeatureConfig> {
public WorldGenNetherWartMushroom() { public WorldGenNetherWartMushroom() {
super(d -> NoFeatureConfig.NO_FEATURE_CONFIG); super(Codec.unit(IFeatureConfig.NO_FEATURE_CONFIG));
} }
@Override @Override
public boolean place(IWorld worldIn, ChunkGenerator<? extends GenerationSettings> generator, Random rand, BlockPos pos, NoFeatureConfig config) { public boolean func_241855_a(ISeedReader worldIn, ChunkGenerator gen, Random rand, BlockPos pos, NoFeatureConfig p_241855_5_) {
int height = rand.nextInt(5) + 4; int height = rand.nextInt(5) + 4;
if (rand.nextInt(10) == 0) if (rand.nextInt(10) == 0)
height += 5; height += 5;
@ -32,7 +34,7 @@ public class WorldGenNetherWartMushroom extends Feature<NoFeatureConfig> {
} }
// Place stem // Place stem
this.setBlockState(worldIn, pos, Blocks.AIR.getDefaultState()); this.func_230367_a_(worldIn, pos, Blocks.AIR.getDefaultState());
for (int i = 0; i < height; i++) for (int i = 0; i < height; i++)
this.placeIfPossible(worldIn, pos.up(i), Blocks.NETHER_WART_BLOCK); this.placeIfPossible(worldIn, pos.up(i), Blocks.NETHER_WART_BLOCK);

View file

@ -1,5 +1,6 @@
package de.ellpeck.naturesaura.gui; package de.ellpeck.naturesaura.gui;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.platform.GlStateManager;
import net.minecraft.client.gui.screen.inventory.ContainerScreen; import net.minecraft.client.gui.screen.inventory.ContainerScreen;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
@ -21,25 +22,25 @@ public class GuiEnderCrate extends ContainerScreen<ContainerEnderCrate> {
} }
@Override @Override
public void render(int mouseX, int mouseY, float partialTicks) { public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) {
this.renderBackground(); this.renderBackground(matrixStack);
super.render(mouseX, mouseY, partialTicks); super.render(matrixStack, mouseX, mouseY, partialTicks);
this.renderHoveredToolTip(mouseX, mouseY); this.func_230459_a_(matrixStack, mouseX, mouseY);
} }
@Override @Override
protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) { protected void drawGuiContainerForegroundLayer(MatrixStack matrixStack, int mouseX, int mouseY) {
this.font.drawString(this.title.getFormattedText(), 8, 6, 4210752); this.font.drawString(matrixStack, this.title.getString(), 8, 6, 4210752);
this.font.drawString(this.player.inventory.getDisplayName().getFormattedText(), 8, this.ySize - 96 + 2, 4210752); this.font.drawString(matrixStack, this.player.inventory.getDisplayName().getString(), 8, this.ySize - 96 + 2, 4210752);
} }
@Override @Override
protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) { protected void drawGuiContainerBackgroundLayer(MatrixStack matrixStack, float partialTicks, int mouseX, int mouseY) {
GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F); GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F);
this.getMinecraft().getTextureManager().bindTexture(CHEST_GUI_TEXTURE); this.getMinecraft().getTextureManager().bindTexture(CHEST_GUI_TEXTURE);
int i = (this.width - this.xSize) / 2; int i = (this.width - this.xSize) / 2;
int j = (this.height - this.ySize) / 2; int j = (this.height - this.ySize) / 2;
this.blit(i, j, 0, 0, this.xSize, 3 * 18 + 17); this.blit(matrixStack, i, j, 0, 0, this.xSize, 3 * 18 + 17);
this.blit(i, j + 3 * 18 + 17, 0, 126, this.xSize, 96); this.blit(matrixStack, i, j + 3 * 18 + 17, 0, 126, this.xSize, 96);
} }
} }

View file

@ -11,7 +11,6 @@ import de.ellpeck.naturesaura.api.render.ITrinketItem;
import de.ellpeck.naturesaura.enchant.ModEnchantments; import de.ellpeck.naturesaura.enchant.ModEnchantments;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.IRenderTypeBuffer; import net.minecraft.client.renderer.IRenderTypeBuffer;
import net.minecraft.client.renderer.Vector3f;
import net.minecraft.client.renderer.model.ItemCameraTransforms; import net.minecraft.client.renderer.model.ItemCameraTransforms;
import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.client.renderer.texture.OverlayTexture;
import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.enchantment.EnchantmentHelper;
@ -23,6 +22,7 @@ import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.CompoundNBT;
import net.minecraft.util.Direction; import net.minecraft.util.Direction;
import net.minecraft.util.NonNullList; import net.minecraft.util.NonNullList;
import net.minecraft.util.math.vector.Vector3f;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
@ -46,7 +46,7 @@ public class ItemAuraCache extends ItemImpl implements ITrinketItem {
public void inventoryTick(ItemStack stackIn, World worldIn, Entity entityIn, int itemSlot, boolean isSelected) { public void inventoryTick(ItemStack stackIn, World worldIn, Entity entityIn, int itemSlot, boolean isSelected) {
if (!worldIn.isRemote && entityIn instanceof PlayerEntity) { if (!worldIn.isRemote && entityIn instanceof PlayerEntity) {
PlayerEntity player = (PlayerEntity) entityIn; PlayerEntity player = (PlayerEntity) entityIn;
if (player.isShiftKeyDown() && stackIn.getCapability(NaturesAuraAPI.capAuraContainer).isPresent()) { if (player.isSneaking() && stackIn.getCapability(NaturesAuraAPI.capAuraContainer).isPresent()) {
IAuraContainer container = stackIn.getCapability(NaturesAuraAPI.capAuraContainer).orElse(null); IAuraContainer container = stackIn.getCapability(NaturesAuraAPI.capAuraContainer).orElse(null);
if (container.getStoredAura() <= 0) { if (container.getStoredAura() <= 0) {
return; return;
@ -122,7 +122,7 @@ public class ItemAuraCache extends ItemImpl implements ITrinketItem {
matrices.translate(-0.15F, 0.65F, chest ? -0.195F : legs ? -0.165F : -0.1475F); matrices.translate(-0.15F, 0.65F, chest ? -0.195F : legs ? -0.165F : -0.1475F);
matrices.scale(0.5F, 0.5F, 0.5F); matrices.scale(0.5F, 0.5F, 0.5F);
matrices.rotate(Vector3f.XP.rotationDegrees(180F)); matrices.rotate(Vector3f.XP.rotationDegrees(180F));
Minecraft.getInstance().getItemRenderer().renderItem(stack, ItemCameraTransforms.TransformType.GROUND, packedLight, OverlayTexture.DEFAULT_LIGHT, matrices, buffer); Minecraft.getInstance().getItemRenderer().renderItem(stack, ItemCameraTransforms.TransformType.GROUND, packedLight, OverlayTexture.NO_OVERLAY, matrices, buffer);
} }
} }
} }

View file

@ -7,10 +7,7 @@ import net.minecraft.item.ElytraItem;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.item.Items; import net.minecraft.item.Items;
import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.*;
import net.minecraft.util.text.Style;
import net.minecraft.util.text.TextFormatting;
import net.minecraft.util.text.TranslationTextComponent;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
@ -65,12 +62,14 @@ public class ItemBreakPrevention extends ItemImpl {
if (!stack.hasTag() || !stack.getTag().getBoolean(NaturesAura.MOD_ID + ":break_prevention")) if (!stack.hasTag() || !stack.getTag().getBoolean(NaturesAura.MOD_ID + ":break_prevention"))
return; return;
List<ITextComponent> tooltip = event.getToolTip(); List<ITextComponent> tooltip = event.getToolTip();
tooltip.add(new TranslationTextComponent("info." + NaturesAura.MOD_ID + ".break_prevention").setStyle(new Style().setColor(TextFormatting.GRAY))); tooltip.add(new TranslationTextComponent("info." + NaturesAura.MOD_ID + ".break_prevention").setStyle(Style.EMPTY.setFormatting(TextFormatting.GRAY)));
if (ElytraItem.isUsable(stack)) if (ElytraItem.isUsable(stack))
return; return;
if (tooltip.size() < 1) if (tooltip.size() < 1)
return; return;
tooltip.get(0).appendSibling(new TranslationTextComponent("info." + NaturesAura.MOD_ID + ".broken").setStyle(new Style().setColor(TextFormatting.GRAY))); ITextComponent head = tooltip.get(0);
if (head instanceof TextComponent)
((TextComponent) head).append(new TranslationTextComponent("info." + NaturesAura.MOD_ID + ".broken").setStyle(Style.EMPTY.setFormatting(TextFormatting.GRAY)));
} }
} }
} }

View file

@ -25,10 +25,11 @@ public class ItemColorChanger extends ItemImpl implements IColorProvidingItem, I
public ItemColorChanger() { public ItemColorChanger() {
super("color_changer", new Properties().maxStackSize(1)); super("color_changer", new Properties().maxStackSize(1));
this.addPropertyOverride(new ResourceLocation(NaturesAura.MOD_ID, "fill_mode"), // TODO move to using ItemModelsProperties.func_239418_a_ it seems like
/*this.addPropertyOverride(new ResourceLocation(NaturesAura.MOD_ID, "fill_mode"),
(stack, worldIn, entityIn) -> isFillMode(stack) ? 1F : 0F); (stack, worldIn, entityIn) -> isFillMode(stack) ? 1F : 0F);
this.addPropertyOverride(new ResourceLocation(NaturesAura.MOD_ID, "has_color"), this.addPropertyOverride(new ResourceLocation(NaturesAura.MOD_ID, "has_color"),
(stack, worldIn, entityIn) -> getStoredColor(stack) != null ? 1F : 0F); (stack, worldIn, entityIn) -> getStoredColor(stack) != null ? 1F : 0F);*/
} }
private static boolean changeOrCopyColor(PlayerEntity player, ItemStack stack, World world, BlockPos pos, DyeColor firstColor) { private static boolean changeOrCopyColor(PlayerEntity player, ItemStack stack, World world, BlockPos pos, DyeColor firstColor) {
@ -39,7 +40,7 @@ public class ItemColorChanger extends ItemImpl implements IColorProvidingItem, I
DyeColor color = DyeColor.byId(blocks.indexOf(block)); DyeColor color = DyeColor.byId(blocks.indexOf(block));
if (firstColor == null || color == firstColor) { if (firstColor == null || color == firstColor) {
DyeColor stored = getStoredColor(stack); DyeColor stored = getStoredColor(stack);
if (player.isShiftKeyDown()) { if (player.isSneaking()) {
if (stored != color) { if (stored != color) {
world.playSound(player, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, world.playSound(player, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5,
SoundEvents.ITEM_BUCKET_FILL, SoundCategory.PLAYERS, 0.65F, 1F); SoundEvents.ITEM_BUCKET_FILL, SoundCategory.PLAYERS, 0.65F, 1F);
@ -109,7 +110,7 @@ public class ItemColorChanger extends ItemImpl implements IColorProvidingItem, I
@Override @Override
public ActionResult<ItemStack> onItemRightClick(World worldIn, PlayerEntity playerIn, Hand handIn) { public ActionResult<ItemStack> onItemRightClick(World worldIn, PlayerEntity playerIn, Hand handIn) {
ItemStack stack = playerIn.getHeldItem(handIn); ItemStack stack = playerIn.getHeldItem(handIn);
if (playerIn.isShiftKeyDown() && getStoredColor(stack) != null) { if (playerIn.isSneaking() && getStoredColor(stack) != null) {
worldIn.playSound(playerIn, playerIn.getPosX(), playerIn.getPosY(), playerIn.getPosZ(), SoundEvents.ITEM_BUCKET_FILL_LAVA, SoundCategory.PLAYERS, 0.65F, 1F); worldIn.playSound(playerIn, playerIn.getPosX(), playerIn.getPosY(), playerIn.getPosZ(), SoundEvents.ITEM_BUCKET_FILL_LAVA, SoundCategory.PLAYERS, 0.65F, 1F);
if (!worldIn.isRemote) { if (!worldIn.isRemote) {
setFillMode(stack, !isFillMode(stack)); setFillMode(stack, !isFillMode(stack));

View file

@ -27,7 +27,7 @@ public class ItemCrimsonMeal extends ItemImpl {
if (world.rand.nextInt(5) == 0) { if (world.rand.nextInt(5) == 0) {
int age = state.get(NetherWartBlock.AGE); int age = state.get(NetherWartBlock.AGE);
if (age >= 3) { if (age >= 3) {
ModFeatures.NETHER_WART_MUSHROOM.place(world, ((ServerWorld) world).getChunkProvider().getChunkGenerator(), world.rand, pos, IFeatureConfig.NO_FEATURE_CONFIG); ModFeatures.NETHER_WART_MUSHROOM.func_241855_a((ServerWorld) world, ((ServerWorld) world).getChunkProvider().getChunkGenerator(), world.rand, pos, IFeatureConfig.NO_FEATURE_CONFIG);
} else { } else {
world.setBlockState(pos, state.with(NetherWartBlock.AGE, age + 1)); world.setBlockState(pos, state.with(NetherWartBlock.AGE, age + 1));
} }

View file

@ -11,7 +11,7 @@ import net.minecraft.item.ItemUseContext;
import net.minecraft.util.ActionResultType; import net.minecraft.util.ActionResultType;
import net.minecraft.util.NonNullList; import net.minecraft.util.NonNullList;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.TranslationTextComponent; import net.minecraft.util.text.TranslationTextComponent;
import net.minecraft.world.World; import net.minecraft.world.World;
@ -42,7 +42,7 @@ public class ItemEffectPowder extends ItemImpl implements IColorProvidingItem {
public ActionResultType onItemUse(ItemUseContext context) { public ActionResultType onItemUse(ItemUseContext context) {
World world = context.getWorld(); World world = context.getWorld();
if (!world.isRemote) { if (!world.isRemote) {
Vec3d hit = context.getHitVec(); Vector3d hit = context.getHitVec();
ItemStack stack = context.getPlayer().getHeldItem(context.getHand()); ItemStack stack = context.getPlayer().getHeldItem(context.getHand());
EntityEffectInhibitor.place(world, stack, hit.x, hit.y + 1, hit.z); EntityEffectInhibitor.place(world, stack, hit.x, hit.y + 1, hit.z);
stack.setCount(0); stack.setCount(0);

View file

@ -5,12 +5,12 @@ import de.ellpeck.naturesaura.NaturesAura;
import de.ellpeck.naturesaura.api.render.ITrinketItem; import de.ellpeck.naturesaura.api.render.ITrinketItem;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.IRenderTypeBuffer; import net.minecraft.client.renderer.IRenderTypeBuffer;
import net.minecraft.client.renderer.Vector3f;
import net.minecraft.client.renderer.model.ItemCameraTransforms; import net.minecraft.client.renderer.model.ItemCameraTransforms;
import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.client.renderer.texture.OverlayTexture;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.inventory.EquipmentSlotType; import net.minecraft.inventory.EquipmentSlotType;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.math.vector.Vector3f;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
@ -28,7 +28,7 @@ public class ItemEye extends ItemImpl implements ITrinketItem {
matrices.translate(0.1F, 0.225F, armor ? -0.195F : -0.1475F); matrices.translate(0.1F, 0.225F, armor ? -0.195F : -0.1475F);
matrices.scale(0.3F, 0.3F, 0.3F); matrices.scale(0.3F, 0.3F, 0.3F);
matrices.rotate(Vector3f.XP.rotationDegrees(180)); matrices.rotate(Vector3f.XP.rotationDegrees(180));
Minecraft.getInstance().getItemRenderer().renderItem(stack, ItemCameraTransforms.TransformType.GROUND, packedLight, OverlayTexture.DEFAULT_LIGHT, matrices, buffer); Minecraft.getInstance().getItemRenderer().renderItem(stack, ItemCameraTransforms.TransformType.GROUND, packedLight, OverlayTexture.NO_OVERLAY, matrices, buffer);
} }
} }
} }

View file

@ -20,7 +20,7 @@ public class ItemLightStaff extends ItemImpl {
ItemStack stack = playerIn.getHeldItem(handIn); ItemStack stack = playerIn.getHeldItem(handIn);
if (!worldIn.isRemote && NaturesAuraAPI.instance().extractAuraFromPlayer(playerIn, 1000, false)) { if (!worldIn.isRemote && NaturesAuraAPI.instance().extractAuraFromPlayer(playerIn, 1000, false)) {
EntityLightProjectile projectile = new EntityLightProjectile(ModEntities.LIGHT_PROJECTILE, playerIn, worldIn); EntityLightProjectile projectile = new EntityLightProjectile(ModEntities.LIGHT_PROJECTILE, playerIn, worldIn);
projectile.shoot(playerIn, playerIn.rotationPitch, playerIn.rotationYaw, 0, 1.5F, 0); projectile.func_234612_a_(playerIn, playerIn.rotationPitch, playerIn.rotationYaw, 0, 1.5F, 0);
worldIn.addEntity(projectile); worldIn.addEntity(projectile);
} }
return new ActionResult<>(ActionResultType.SUCCESS, stack); return new ActionResult<>(ActionResultType.SUCCESS, stack);

View file

@ -10,6 +10,7 @@ import net.minecraft.util.ActionResult;
import net.minecraft.util.ActionResultType; import net.minecraft.util.ActionResultType;
import net.minecraft.util.Hand; import net.minecraft.util.Hand;
import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.TextComponent;
import net.minecraft.world.World; import net.minecraft.world.World;
import java.util.ArrayList; import java.util.ArrayList;
@ -72,11 +73,11 @@ public class ItemMultiblockMaker extends ItemImpl {
@Override @Override
public ITextComponent getDisplayName(ItemStack stack) { public ITextComponent getDisplayName(ItemStack stack) {
ITextComponent name = super.getDisplayName(stack); TextComponent name = (TextComponent) super.getDisplayName(stack);
int id = getMultiblock(stack); int id = getMultiblock(stack);
if (id < 0) if (id < 0)
return name; return name;
IMultiblock multi = multiblocks().get(id); IMultiblock multi = multiblocks().get(id);
return multi == null ? name : name.appendText(" (" + multi.getName() + ")"); return multi == null ? name : name.appendString(" (" + multi.getName() + ")");
} }
} }

View file

@ -13,19 +13,19 @@ import net.minecraft.item.ItemUseContext;
import net.minecraft.util.ActionResult; import net.minecraft.util.ActionResult;
import net.minecraft.util.ActionResultType; import net.minecraft.util.ActionResultType;
import net.minecraft.util.Hand; import net.minecraft.util.Hand;
import net.minecraft.util.RegistryKey;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.TranslationTextComponent; import net.minecraft.util.text.TranslationTextComponent;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraft.world.dimension.DimensionType;
import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.entity.player.PlayerInteractEvent; import net.minecraftforge.event.entity.player.PlayerInteractEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.eventbus.api.SubscribeEvent;
public class ItemRangeVisualizer extends ItemImpl { public class ItemRangeVisualizer extends ItemImpl {
public static final ListMultimap<DimensionType, BlockPos> VISUALIZED_BLOCKS = ArrayListMultimap.create(); public static final ListMultimap<RegistryKey<World>, BlockPos> VISUALIZED_BLOCKS = ArrayListMultimap.create();
public static final ListMultimap<DimensionType, Entity> VISUALIZED_ENTITIES = ArrayListMultimap.create(); public static final ListMultimap<RegistryKey<World>, Entity> VISUALIZED_ENTITIES = ArrayListMultimap.create();
public static final ListMultimap<DimensionType, BlockPos> VISUALIZED_RAILS = ArrayListMultimap.create(); public static final ListMultimap<RegistryKey<World>, BlockPos> VISUALIZED_RAILS = ArrayListMultimap.create();
public ItemRangeVisualizer() { public ItemRangeVisualizer() {
super("range_visualizer", new Properties().maxStackSize(1)); super("range_visualizer", new Properties().maxStackSize(1));
@ -41,7 +41,7 @@ public class ItemRangeVisualizer extends ItemImpl {
VISUALIZED_RAILS.clear(); VISUALIZED_RAILS.clear();
} }
public static <T> void visualize(PlayerEntity player, ListMultimap<DimensionType, T> map, DimensionType dim, T value) { public static <T> void visualize(PlayerEntity player, ListMultimap<RegistryKey<World>, T> map, RegistryKey<World> dim, T value) {
if (map.containsEntry(dim, value)) { if (map.containsEntry(dim, value)) {
map.remove(dim, value); map.remove(dim, value);
player.sendStatusMessage(new TranslationTextComponent("info." + NaturesAura.MOD_ID + ".range_visualizer.end"), true); player.sendStatusMessage(new TranslationTextComponent("info." + NaturesAura.MOD_ID + ".range_visualizer.end"), true);
@ -54,7 +54,7 @@ public class ItemRangeVisualizer extends ItemImpl {
@Override @Override
public ActionResult<ItemStack> onItemRightClick(World worldIn, PlayerEntity playerIn, Hand handIn) { public ActionResult<ItemStack> onItemRightClick(World worldIn, PlayerEntity playerIn, Hand handIn) {
ItemStack stack = playerIn.getHeldItem(handIn); ItemStack stack = playerIn.getHeldItem(handIn);
if (playerIn.isShiftKeyDown()) { if (playerIn.isSneaking()) {
clear(); clear();
playerIn.sendStatusMessage(new TranslationTextComponent("info." + NaturesAura.MOD_ID + ".range_visualizer.end_all"), true); playerIn.sendStatusMessage(new TranslationTextComponent("info." + NaturesAura.MOD_ID + ".range_visualizer.end_all"), true);
return new ActionResult<>(ActionResultType.SUCCESS, stack); return new ActionResult<>(ActionResultType.SUCCESS, stack);
@ -70,7 +70,7 @@ public class ItemRangeVisualizer extends ItemImpl {
Block block = state.getBlock(); Block block = state.getBlock();
if (block instanceof IVisualizable) { if (block instanceof IVisualizable) {
if (world.isRemote) if (world.isRemote)
visualize(context.getPlayer(), VISUALIZED_BLOCKS, world.getDimension().getType(), pos); visualize(context.getPlayer(), VISUALIZED_BLOCKS, world.func_234923_W_(), pos);
return ActionResultType.SUCCESS; return ActionResultType.SUCCESS;
} }
return ActionResultType.PASS; return ActionResultType.PASS;
@ -86,7 +86,7 @@ public class ItemRangeVisualizer extends ItemImpl {
Entity entity = event.getTarget(); Entity entity = event.getTarget();
if (entity instanceof IVisualizable) { if (entity instanceof IVisualizable) {
if (entity.world.isRemote) { if (entity.world.isRemote) {
DimensionType dim = entity.world.getDimension().getType(); RegistryKey<World> dim = entity.world.func_234923_W_();
visualize(event.getPlayer(), VISUALIZED_ENTITIES, dim, entity); visualize(event.getPlayer(), VISUALIZED_ENTITIES, dim, entity);
} }
event.getPlayer().swingArm(event.getHand()); event.getPlayer().swingArm(event.getHand());

View file

@ -13,7 +13,6 @@ import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material; import net.minecraft.block.material.Material;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.IRenderTypeBuffer; import net.minecraft.client.renderer.IRenderTypeBuffer;
import net.minecraft.client.renderer.Vector3f;
import net.minecraft.client.renderer.model.ItemCameraTransforms; import net.minecraft.client.renderer.model.ItemCameraTransforms;
import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.client.renderer.texture.OverlayTexture;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
@ -28,6 +27,7 @@ import net.minecraft.util.DamageSource;
import net.minecraft.util.SoundCategory; import net.minecraft.util.SoundCategory;
import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.vector.Vector3f;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
@ -45,7 +45,7 @@ public class ItemShockwaveCreator extends ItemImpl implements ITrinketItem {
if (worldIn.isRemote || !(entityIn instanceof LivingEntity)) if (worldIn.isRemote || !(entityIn instanceof LivingEntity))
return; return;
LivingEntity living = (LivingEntity) entityIn; LivingEntity living = (LivingEntity) entityIn;
if (!living.onGround) { if (!living.isOnGround()) {
CompoundNBT compound = stack.getOrCreateTag(); CompoundNBT compound = stack.getOrCreateTag();
if (compound.getBoolean("air")) if (compound.getBoolean("air"))
return; return;
@ -63,7 +63,7 @@ public class ItemShockwaveCreator extends ItemImpl implements ITrinketItem {
compound.putBoolean("air", false); compound.putBoolean("air", false);
if (!living.isShiftKeyDown()) if (!living.isSneaking())
return; return;
if (living.getDistanceSq(compound.getDouble("x"), compound.getDouble("y"), compound.getDouble("z")) > 0.75F) if (living.getDistanceSq(compound.getDouble("x"), compound.getDouble("y"), compound.getDouble("z")) > 0.75F)
return; return;
@ -115,7 +115,7 @@ public class ItemShockwaveCreator extends ItemImpl implements ITrinketItem {
matrices.translate(0, 0.125F, armor ? -0.195F : -0.1475F); matrices.translate(0, 0.125F, armor ? -0.195F : -0.1475F);
matrices.scale(0.3F, 0.3F, 0.3F); matrices.scale(0.3F, 0.3F, 0.3F);
matrices.rotate(Vector3f.XP.rotationDegrees(180)); matrices.rotate(Vector3f.XP.rotationDegrees(180));
Minecraft.getInstance().getItemRenderer().renderItem(stack, ItemCameraTransforms.TransformType.GROUND, packedLight, OverlayTexture.DEFAULT_LIGHT, matrices, buffer); Minecraft.getInstance().getItemRenderer().renderItem(stack, ItemCameraTransforms.TransformType.GROUND, packedLight, OverlayTexture.NO_OVERLAY, matrices, buffer);
} }
} }
} }

View file

@ -9,13 +9,14 @@ import net.minecraft.util.ActionResultType;
import net.minecraft.util.Hand; import net.minecraft.util.Hand;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraft.world.gen.feature.structure.Structure;
import net.minecraft.world.server.ServerWorld; import net.minecraft.world.server.ServerWorld;
public class ItemStructureFinder extends ItemImpl { public class ItemStructureFinder extends ItemImpl {
private final String structureName; private final Structure structureName;
private final int color; private final int color;
public ItemStructureFinder(String baseName, String structureName, int color) { public ItemStructureFinder(String baseName, Structure structureName, int color) {
super(baseName); super(baseName);
this.structureName = structureName; this.structureName = structureName;
this.color = color; this.color = color;
@ -25,7 +26,7 @@ public class ItemStructureFinder extends ItemImpl {
public ActionResult<ItemStack> onItemRightClick(World worldIn, PlayerEntity playerIn, Hand handIn) { public ActionResult<ItemStack> onItemRightClick(World worldIn, PlayerEntity playerIn, Hand handIn) {
ItemStack stack = playerIn.getHeldItem(handIn); ItemStack stack = playerIn.getHeldItem(handIn);
if (!worldIn.isRemote) { if (!worldIn.isRemote) {
BlockPos pos = ((ServerWorld) worldIn).getChunkProvider().getChunkGenerator().findNearestStructure(worldIn, this.structureName, playerIn.getPosition(), 1024, false); BlockPos pos = ((ServerWorld) worldIn).getChunkProvider().getChunkGenerator().func_235956_a_((ServerWorld) worldIn, this.structureName, playerIn.getPosition(), 1024, false);
if (pos != null) { if (pos != null) {
EntityStructureFinder entity = new EntityStructureFinder(ModEntities.STRUCTURE_FINDER, worldIn); EntityStructureFinder entity = new EntityStructureFinder(ModEntities.STRUCTURE_FINDER, worldIn);
entity.setPosition(playerIn.getPosX(), playerIn.getPosYHeight(0.5D), playerIn.getPosZ()); entity.setPosition(playerIn.getPosX(), playerIn.getPosYHeight(0.5D), playerIn.getPosZ());

View file

@ -7,9 +7,9 @@ import de.ellpeck.naturesaura.reg.ModArmorMaterial;
import de.ellpeck.naturesaura.reg.ModRegistry; import de.ellpeck.naturesaura.reg.ModRegistry;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.LivingEntity; import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.SharedMonsterAttributes;
import net.minecraft.entity.ai.attributes.AttributeModifier; import net.minecraft.entity.ai.attributes.AttributeModifier;
import net.minecraft.entity.ai.attributes.IAttributeInstance; import net.minecraft.entity.ai.attributes.Attributes;
import net.minecraft.entity.ai.attributes.ModifiableAttributeInstance;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.inventory.EquipmentSlotType; import net.minecraft.inventory.EquipmentSlotType;
import net.minecraft.item.*; import net.minecraft.item.*;
@ -81,7 +81,7 @@ public class ItemArmor extends ArmorItem implements IModItem {
@SubscribeEvent @SubscribeEvent
public void update(TickEvent.PlayerTickEvent event) { public void update(TickEvent.PlayerTickEvent event) {
PlayerEntity player = event.player; PlayerEntity player = event.player;
IAttributeInstance speed = player.getAttribute(SharedMonsterAttributes.MOVEMENT_SPEED); ModifiableAttributeInstance speed = player.getAttribute(Attributes.MOVEMENT_SPEED);
String key = NaturesAura.MOD_ID + ":sky_equipped"; String key = NaturesAura.MOD_ID + ":sky_equipped";
CompoundNBT nbt = player.getPersistentData(); CompoundNBT nbt = player.getPersistentData();
boolean equipped = isFullSetEquipped(player, ModArmorMaterial.SKY); boolean equipped = isFullSetEquipped(player, ModArmorMaterial.SKY);
@ -90,7 +90,7 @@ public class ItemArmor extends ArmorItem implements IModItem {
nbt.putBoolean(key, true); nbt.putBoolean(key, true);
player.stepHeight = 1.1F; player.stepHeight = 1.1F;
if (!speed.hasModifier(SKY_MOVEMENT_MODIFIER)) if (!speed.hasModifier(SKY_MOVEMENT_MODIFIER))
speed.applyModifier(SKY_MOVEMENT_MODIFIER); speed.applyNonPersistentModifier(SKY_MOVEMENT_MODIFIER);
} else if (!equipped && nbt.getBoolean(key)) { } else if (!equipped && nbt.getBoolean(key)) {
// we just unequipped it // we just unequipped it
nbt.putBoolean(key, false); nbt.putBoolean(key, false);

View file

@ -9,13 +9,13 @@ import de.ellpeck.naturesaura.reg.ICustomItemModel;
import de.ellpeck.naturesaura.reg.IModItem; import de.ellpeck.naturesaura.reg.IModItem;
import de.ellpeck.naturesaura.reg.ModRegistry; import de.ellpeck.naturesaura.reg.ModRegistry;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.LogBlock;
import net.minecraft.block.material.Material; import net.minecraft.block.material.Material;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.AxeItem; import net.minecraft.item.AxeItem;
import net.minecraft.item.IItemTier; import net.minecraft.item.IItemTier;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.CompoundNBT;
import net.minecraft.tags.BlockTags;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraftforge.common.capabilities.ICapabilityProvider; import net.minecraftforge.common.capabilities.ICapabilityProvider;
@ -47,7 +47,7 @@ public class ItemAxe extends AxeItem implements IModItem, ICustomItemModel {
@Override @Override
public boolean onBlockStartBreak(ItemStack itemstack, BlockPos pos, PlayerEntity player) { public boolean onBlockStartBreak(ItemStack itemstack, BlockPos pos, PlayerEntity player) {
if (itemstack.getItem() == ModItems.SKY_AXE) { if (itemstack.getItem() == ModItems.SKY_AXE) {
if (player.world.getBlockState(pos).getBlock() instanceof LogBlock) { if (player.world.getBlockState(pos).getBlock().getTags().contains(BlockTags.LOGS.getName())) {
TileEntityWoodStand.recurseTreeDestruction(player.world, pos, pos, false, true); TileEntityWoodStand.recurseTreeDestruction(player.world, pos, pos, false, true);
return true; return true;
} }

View file

@ -32,8 +32,8 @@ public class ItemHoe extends HoeItem implements IModItem, ICustomItemModel {
private final String baseName; private final String baseName;
public ItemHoe(String baseName, IItemTier material, float speed) { public ItemHoe(String baseName, IItemTier material, int speed) {
super(material, speed, new Properties().group(NaturesAura.CREATIVE_TAB)); super(material, speed, 0, new Properties().group(NaturesAura.CREATIVE_TAB));
this.baseName = baseName; this.baseName = baseName;
ModRegistry.add(this); ModRegistry.add(this);
} }

View file

@ -47,7 +47,7 @@ public class ItemShovel extends ShovelItem implements IModItem, ICustomItemModel
damage = 5; damage = 5;
} }
} else { } else {
int range = player.isShiftKeyDown() ? 0 : 1; int range = player.isSneaking() ? 0 : 1;
for (int x = -range; x <= range; x++) { for (int x = -range; x <= range; x++) {
for (int y = -range; y <= range; y++) { for (int y = -range; y <= range; y++) {
BlockPos actualPos = pos.add(x, 0, y); BlockPos actualPos = pos.add(x, 0, y);

View file

@ -24,7 +24,7 @@ public final class ColoredBlockHelper {
private static List<Block> collectBlocks(String name) { private static List<Block> collectBlocks(String name) {
List<Block> blocks = new ArrayList<>(); List<Block> blocks = new ArrayList<>();
for (DyeColor color : DyeColor.values()) for (DyeColor color : DyeColor.values())
blocks.add(ForgeRegistries.BLOCKS.getValue(new ResourceLocation(color.getName() + '_' + name))); blocks.add(ForgeRegistries.BLOCKS.getValue(new ResourceLocation(color.getString() + '_' + name)));
return Collections.unmodifiableList(blocks); return Collections.unmodifiableList(blocks);
} }

View file

@ -17,7 +17,7 @@ import net.minecraft.util.Direction;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraft.util.Tuple; import net.minecraft.util.Tuple;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.vector.Vector3d;
import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.util.Constants; import net.minecraftforge.common.util.Constants;
import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.common.util.LazyOptional;
@ -27,7 +27,7 @@ import javax.annotation.Nullable;
import java.util.*; import java.util.*;
public class WorldData implements IWorldData { public class WorldData implements IWorldData {
public final ListMultimap<ResourceLocation, Tuple<Vec3d, Integer>> effectPowders = ArrayListMultimap.create(); public final ListMultimap<ResourceLocation, Tuple<Vector3d, Integer>> effectPowders = ArrayListMultimap.create();
public final List<BlockPos> recentlyConvertedMossStones = new ArrayList<>(); public final List<BlockPos> recentlyConvertedMossStones = new ArrayList<>();
private final Map<String, ItemStackHandlerNA> enderStorages = new HashMap<>(); private final Map<String, ItemStackHandlerNA> enderStorages = new HashMap<>();
public final Set<TileEntitySpawnLamp> spawnLamps = new HashSet<>(); public final Set<TileEntitySpawnLamp> spawnLamps = new HashSet<>();

View file

@ -9,7 +9,6 @@ import net.minecraft.network.PacketBuffer;
import net.minecraft.particles.ParticleTypes; import net.minecraft.particles.ParticleTypes;
import net.minecraft.util.SoundEvents; import net.minecraft.util.SoundEvents;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.world.dimension.DimensionType;
import net.minecraftforge.fml.network.NetworkEvent; import net.minecraftforge.fml.network.NetworkEvent;
import java.util.function.Supplier; import java.util.function.Supplier;
@ -54,9 +53,9 @@ public class PacketClient {
if (mc.world != null) { if (mc.world != null) {
switch (message.type) { switch (message.type) {
case 0: // dimension rail visualization case 0: // dimension rail visualization
int goalDim = message.data[0]; /* int goalDim = message.data[0];
BlockPos goalPos = new BlockPos(message.data[1], message.data[2], message.data[3]); BlockPos goalPos = new BlockPos(message.data[1], message.data[2], message.data[3]);
ItemRangeVisualizer.visualize(mc.player, ItemRangeVisualizer.VISUALIZED_RAILS, DimensionType.getById(goalDim), goalPos); ItemRangeVisualizer.visualize(mc.player, ItemRangeVisualizer.VISUALIZED_RAILS, DimensionType.getById(goalDim), goalPos);*/
case 1: case 1:
Entity entity = mc.world.getEntityByID(message.data[0]); Entity entity = mc.world.getEntityByID(message.data[0]);
mc.particles.emitParticleAtEntity(entity, ParticleTypes.TOTEM_OF_UNDYING, 30); mc.particles.emitParticleAtEntity(entity, ParticleTypes.TOTEM_OF_UNDYING, 30);

View file

@ -28,8 +28,8 @@ public final class PacketHandler {
network.send(PacketDistributor.TRACKING_CHUNK.with(() -> world.getChunkAt(pos)), message); network.send(PacketDistributor.TRACKING_CHUNK.with(() -> world.getChunkAt(pos)), message);
} }
public static void sendToAllAround(IWorld world, BlockPos pos, int range, Object message) { public static void sendToAllAround(World world, BlockPos pos, int range, Object message) {
network.send(PacketDistributor.NEAR.with(() -> new PacketDistributor.TargetPoint(pos.getX(), pos.getY(), pos.getZ(), range, world.getDimension().getType())), message); network.send(PacketDistributor.NEAR.with(() -> new PacketDistributor.TargetPoint(pos.getX(), pos.getY(), pos.getZ(), range, world.func_234923_W_())), message);
} }
public static void sendTo(PlayerEntity player, Object message) { public static void sendTo(PlayerEntity player, Object message) {

View file

@ -236,7 +236,7 @@ public class PacketParticles {
message.posX + 0.5F, message.posX + 0.5F,
message.posY + 0.5F, message.posY + 0.5F,
message.posZ + 0.5F, message.posZ + 0.5F,
0.6F, BiomeColors.func_228361_b_(world, new BlockPos(sapX, sapY, sapZ)), 1.5F); 0.6F, BiomeColors.getGrassColor(world, new BlockPos(sapX, sapY, sapZ)), 1.5F);
if (releaseAura) if (releaseAura)
for (int i = world.rand.nextInt(10) + 10; i >= 0; i--) for (int i = world.rand.nextInt(10) + 10; i >= 0; i--)
NaturesAuraAPI.instance().spawnMagicParticle( NaturesAuraAPI.instance().spawnMagicParticle(

View file

@ -80,7 +80,7 @@ public final class ParticleHandler {
LightTexture lightmap = mc.gameRenderer.getLightTexture(); LightTexture lightmap = mc.gameRenderer.getLightTexture();
RenderSystem.pushMatrix(); RenderSystem.pushMatrix();
RenderSystem.multMatrix(stack.getLast().getPositionMatrix()); RenderSystem.multMatrix(stack.getLast().getMatrix());
lightmap.enableLightmap(); lightmap.enableLightmap();
RenderSystem.enableAlphaTest(); RenderSystem.enableAlphaTest();

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