Clarify in the LazyOptional which methods carry the lazyness over to the returned value and which don't. (#6750)
For consistency, this meant making a few changes: - Renamed the existing lazy mapping method to lazyMap, to indicate that it doesn't run the mapping immediately. - Added a new implementation of map(), which returns Optional<T>, and resolves the value in the process. - Changed filter() to return Optional, since there's no way to filter lazily. - Added a new method resolve(), which helps convert the custom LazyOptional class into a standard Optional, for use with library methods that expect Optional<T>. * Update License headers.
This commit is contained in:
parent
625cd746ef
commit
600e68cace
16 changed files with 208 additions and 20 deletions
|
@ -16,6 +16,7 @@
|
||||||
* License along with this library; if not, write to the Free Software
|
* License along with this library; if not, write to the Free Software
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Biomes are completely redone in 1.16.2, reevaluate
|
/* Biomes are completely redone in 1.16.2, reevaluate
|
||||||
package net.minecraftforge.common;
|
package net.minecraftforge.common;
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* License along with this library; if not, write to the Free Software
|
* License along with this library; if not, write to the Free Software
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Biomes are completely redone in 1.16.2, reevaluate
|
/* Biomes are completely redone in 1.16.2, reevaluate
|
||||||
package net.minecraftforge.common;
|
package net.minecraftforge.common;
|
||||||
|
|
||||||
|
|
|
@ -41,7 +41,7 @@ import net.minecraftforge.common.capabilities.Capability;
|
||||||
* (map/ifPresent) available, much like {@link Optional}.
|
* (map/ifPresent) available, much like {@link Optional}.
|
||||||
* <p>
|
* <p>
|
||||||
* It also provides the ability to listen for invalidation, via
|
* It also provides the ability to listen for invalidation, via
|
||||||
* {@link #addListener(Consumer)}. This method is invoked when the provider of
|
* {@link #addListener(NonNullConsumer)}. This method is invoked when the provider of
|
||||||
* this object calls {@link #invalidate()}.
|
* this object calls {@link #invalidate()}.
|
||||||
* <p>
|
* <p>
|
||||||
* To create an instance of this class, use {@link #of(NonNullSupplier)}. Note
|
* To create an instance of this class, use {@link #of(NonNullSupplier)}. Note
|
||||||
|
@ -150,7 +150,7 @@ public class LazyOptional<T>
|
||||||
* If non-empty, invoke the specified {@link NonNullConsumer} with the object,
|
* If non-empty, invoke the specified {@link NonNullConsumer} with the object,
|
||||||
* otherwise do nothing.
|
* otherwise do nothing.
|
||||||
*
|
*
|
||||||
* @param The {@link NonNullConsumer} to run if this optional is non-empty.
|
* @param consumer The {@link NonNullConsumer} to run if this optional is non-empty.
|
||||||
* @throws NullPointerException if {@code consumer} is null and this {@link LazyOptional} is non-empty
|
* @throws NullPointerException if {@code consumer} is null and this {@link LazyOptional} is non-empty
|
||||||
*/
|
*/
|
||||||
public void ifPresent(NonNullConsumer<? super T> consumer)
|
public void ifPresent(NonNullConsumer<? super T> consumer)
|
||||||
|
@ -171,19 +171,41 @@ public class LazyOptional<T>
|
||||||
* @apiNote This method supports post-processing on optional values, without the
|
* @apiNote This method supports post-processing on optional values, without the
|
||||||
* need to explicitly check for a return status.
|
* need to explicitly check for a return status.
|
||||||
*
|
*
|
||||||
* @param <U> The type of the result of the mapping function
|
* @apiNote The returned value does not receive invalidation messages from the original {@link LazyOptional}.
|
||||||
|
* If you need the invalidation, you will need to manage them yourself.
|
||||||
|
*
|
||||||
* @param mapper A mapping function to apply to the mod object, if present
|
* @param mapper A mapping function to apply to the mod object, if present
|
||||||
* @return A {@link LazyOptional} describing the result of applying a mapping
|
* @return A {@link LazyOptional} describing the result of applying a mapping
|
||||||
* function to the value of this {@link LazyOptional}, if a value is
|
* function to the value of this {@link LazyOptional}, if a value is
|
||||||
* present, otherwise an empty {@link LazyOptional}
|
* present, otherwise an empty {@link LazyOptional}
|
||||||
* @throws NullPointerException if {@code mapper} is null and this {@link LazyOptional} is non-empty
|
* @throws NullPointerException if {@code mapper} is null.
|
||||||
*/
|
*/
|
||||||
public <U> LazyOptional<U> map(NonNullFunction<? super T, ? extends U> mapper)
|
public <U> LazyOptional<U> lazyMap(NonNullFunction<? super T, ? extends U> mapper)
|
||||||
{
|
{
|
||||||
Objects.requireNonNull(mapper);
|
Objects.requireNonNull(mapper);
|
||||||
return isPresent() ? of(() -> mapper.apply(getValueUnsafe())) : empty();
|
return isPresent() ? of(() -> mapper.apply(getValueUnsafe())) : empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If a this {@link LazyOptional} is non-empty, return a new
|
||||||
|
* {@link Optional} encapsulating the mapped value. Otherwise, returns
|
||||||
|
* {@link Optional#empty()}.
|
||||||
|
*
|
||||||
|
* @apiNote This method explicitly resolves the value of the {@link LazyOptional}.
|
||||||
|
* For a non-resolving mapper that will lazily run the mapping, use {@link #lazyMap(NonNullFunction)}.
|
||||||
|
*
|
||||||
|
* @param mapper A mapping function to apply to the mod object, if present
|
||||||
|
* @return An {@link Optional} describing the result of applying a mapping
|
||||||
|
* function to the value of this {@link Optional}, if a value is
|
||||||
|
* present, otherwise an empty {@link Optional}
|
||||||
|
* @throws NullPointerException if {@code mapper} is null.
|
||||||
|
*/
|
||||||
|
public <U> Optional<U> map(NonNullFunction<? super T, ? extends U> mapper)
|
||||||
|
{
|
||||||
|
Objects.requireNonNull(mapper);
|
||||||
|
return isPresent() ? Optional.of(mapper.apply(getValueUnsafe())) : Optional.empty();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Resolve the contained supplier if non-empty, and filter it by the given
|
* Resolve the contained supplier if non-empty, and filter it by the given
|
||||||
* {@link NonNullPredicate}, returning empty if false.
|
* {@link NonNullPredicate}, returning empty if false.
|
||||||
|
@ -194,17 +216,26 @@ public class LazyOptional<T>
|
||||||
*
|
*
|
||||||
* @param predicate A {@link NonNullPredicate} to apply to the result of the
|
* @param predicate A {@link NonNullPredicate} to apply to the result of the
|
||||||
* contained supplier, if non-empty
|
* contained supplier, if non-empty
|
||||||
* @return A {@link LazyOptional} containing the result of the contained
|
* @return An {@link Optional} containing the result of the contained
|
||||||
* supplier, if and only if the passed {@link NonNullPredicate} returns
|
* supplier, if and only if the passed {@link NonNullPredicate} returns
|
||||||
* true, otherwise an empty {@link LazyOptional}
|
* true, otherwise an empty {@link Optional}
|
||||||
* @throws NullPointerException If {@code predicate} is null and this
|
* @throws NullPointerException If {@code predicate} is null and this
|
||||||
* {@link LazyOptional} is non-empty
|
* {@link Optional} is non-empty
|
||||||
*/
|
*/
|
||||||
public LazyOptional<T> filter(NonNullPredicate<? super T> predicate)
|
public Optional<T> filter(NonNullPredicate<? super T> predicate)
|
||||||
{
|
{
|
||||||
Objects.requireNonNull(predicate);
|
Objects.requireNonNull(predicate);
|
||||||
final T value = getValue(); // To keep the non-null contract we have to evaluate right now. Should we allow this function at all?
|
final T value = getValue(); // To keep the non-null contract we have to evaluate right now. Should we allow this function at all?
|
||||||
return value != null && predicate.test(value) ? of(() -> value) : empty();
|
return value != null && predicate.test(value) ? Optional.of(value) : Optional.empty();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resolves the value of this LazyOptional, turning it into a standard non-lazy {@link Optional<T>}
|
||||||
|
* @return The resolved optional.
|
||||||
|
*/
|
||||||
|
public Optional<T> resolve()
|
||||||
|
{
|
||||||
|
return isPresent() ? Optional.of(getValueUnsafe()) : Optional.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1,3 +1,22 @@
|
||||||
|
/*
|
||||||
|
* Minecraft Forge
|
||||||
|
* Copyright (c) 2016-2020.
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation version 2.1
|
||||||
|
* of the License.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
|
||||||
package net.minecraftforge.event;
|
package net.minecraftforge.event;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
|
|
|
@ -1,3 +1,22 @@
|
||||||
|
/*
|
||||||
|
* Minecraft Forge
|
||||||
|
* Copyright (c) 2016-2020.
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation version 2.1
|
||||||
|
* of the License.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
|
||||||
package net.minecraftforge.event;
|
package net.minecraftforge.event;
|
||||||
|
|
||||||
import com.mojang.brigadier.CommandDispatcher;
|
import com.mojang.brigadier.CommandDispatcher;
|
||||||
|
|
|
@ -1,3 +1,22 @@
|
||||||
|
/*
|
||||||
|
* Minecraft Forge
|
||||||
|
* Copyright (c) 2016-2020.
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation version 2.1
|
||||||
|
* of the License.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
|
||||||
package net.minecraftforge.event.entity;
|
package net.minecraftforge.event.entity;
|
||||||
|
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
|
|
|
@ -48,6 +48,8 @@ import net.minecraftforge.items.CapabilityItemHandler;
|
||||||
import net.minecraftforge.items.IItemHandler;
|
import net.minecraftforge.items.IItemHandler;
|
||||||
import net.minecraftforge.items.ItemHandlerHelper;
|
import net.minecraftforge.items.ItemHandlerHelper;
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
public class FluidUtil
|
public class FluidUtil
|
||||||
{
|
{
|
||||||
private FluidUtil()
|
private FluidUtil()
|
||||||
|
@ -428,7 +430,7 @@ public class FluidUtil
|
||||||
/**
|
/**
|
||||||
* Helper method to get the fluid contained in an itemStack
|
* Helper method to get the fluid contained in an itemStack
|
||||||
*/
|
*/
|
||||||
public static LazyOptional<FluidStack> getFluidContained(@Nonnull ItemStack container)
|
public static Optional<FluidStack> getFluidContained(@Nonnull ItemStack container)
|
||||||
{
|
{
|
||||||
if (!container.isEmpty())
|
if (!container.isEmpty())
|
||||||
{
|
{
|
||||||
|
@ -436,7 +438,7 @@ public class FluidUtil
|
||||||
return getFluidHandler(container)
|
return getFluidHandler(container)
|
||||||
.map(handler -> handler.drain(Integer.MAX_VALUE, IFluidHandler.FluidAction.SIMULATE));
|
.map(handler -> handler.drain(Integer.MAX_VALUE, IFluidHandler.FluidAction.SIMULATE));
|
||||||
}
|
}
|
||||||
return LazyOptional.empty();
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -15,9 +15,9 @@
|
||||||
* You should have received a copy of the GNU Lesser General Public
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
* License along with this library; if not, write to the Free Software
|
* License along with this library; if not, write to the Free Software
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
*//*
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
package net.minecraftforge.fml.client.gui.screen;
|
package net.minecraftforge.fml.client.gui.screen;
|
||||||
import net.minecraft.client.gui.widget.button.Button;
|
import net.minecraft.client.gui.widget.button.Button;
|
||||||
import net.minecraft.util.text.StringTextComponent;
|
import net.minecraft.util.text.StringTextComponent;
|
||||||
|
|
|
@ -15,9 +15,9 @@
|
||||||
* You should have received a copy of the GNU Lesser General Public
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
* License along with this library; if not, write to the Free Software
|
* License along with this library; if not, write to the Free Software
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
*//*
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
package net.minecraftforge.fml.client.gui.screen;
|
package net.minecraftforge.fml.client.gui.screen;
|
||||||
|
|
||||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||||
|
|
|
@ -1,3 +1,22 @@
|
||||||
|
/*
|
||||||
|
* Minecraft Forge
|
||||||
|
* Copyright (c) 2016-2020.
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation version 2.1
|
||||||
|
* of the License.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
|
||||||
package net.minecraftforge.fml.event.lifecycle;
|
package net.minecraftforge.fml.event.lifecycle;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -38,6 +38,7 @@ import org.apache.commons.lang3.tuple.Pair;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
public class VanillaInventoryCodeHooks
|
public class VanillaInventoryCodeHooks
|
||||||
{
|
{
|
||||||
|
@ -210,7 +211,7 @@ public class VanillaInventoryCodeHooks
|
||||||
return stack;
|
return stack;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static LazyOptional<Pair<IItemHandler, Object>> getItemHandler(IHopper hopper, Direction hopperFacing)
|
private static Optional<Pair<IItemHandler, Object>> getItemHandler(IHopper hopper, Direction hopperFacing)
|
||||||
{
|
{
|
||||||
double x = hopper.getXPos() + (double) hopperFacing.getXOffset();
|
double x = hopper.getXPos() + (double) hopperFacing.getXOffset();
|
||||||
double y = hopper.getYPos() + (double) hopperFacing.getYOffset();
|
double y = hopper.getYPos() + (double) hopperFacing.getYOffset();
|
||||||
|
@ -244,7 +245,7 @@ public class VanillaInventoryCodeHooks
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static LazyOptional<Pair<IItemHandler, Object>> getItemHandler(World worldIn, double x, double y, double z, final Direction side)
|
public static Optional<Pair<IItemHandler, Object>> getItemHandler(World worldIn, double x, double y, double z, final Direction side)
|
||||||
{
|
{
|
||||||
int i = MathHelper.floor(x);
|
int i = MathHelper.floor(x);
|
||||||
int j = MathHelper.floor(y);
|
int j = MathHelper.floor(y);
|
||||||
|
@ -262,6 +263,6 @@ public class VanillaInventoryCodeHooks
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return LazyOptional.empty();
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,22 @@
|
||||||
|
/*
|
||||||
|
* Minecraft Forge
|
||||||
|
* Copyright (c) 2016-2020.
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation version 2.1
|
||||||
|
* of the License.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
|
||||||
package net.minecraftforge.debug.block;
|
package net.minecraftforge.debug.block;
|
||||||
|
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
|
|
@ -1,3 +1,22 @@
|
||||||
|
/*
|
||||||
|
* Minecraft Forge
|
||||||
|
* Copyright (c) 2016-2020.
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation version 2.1
|
||||||
|
* of the License.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
|
||||||
package net.minecraftforge.debug.entity.player;
|
package net.minecraftforge.debug.entity.player;
|
||||||
|
|
||||||
import net.minecraft.util.text.StringTextComponent;
|
import net.minecraft.util.text.StringTextComponent;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Minecraft Forge
|
* Minecraft Forge
|
||||||
* Copyright (c) 2016-2019.
|
* Copyright (c) 2016-2020.
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
|
|
@ -1,3 +1,22 @@
|
||||||
|
/*
|
||||||
|
* Minecraft Forge
|
||||||
|
* Copyright (c) 2016-2020.
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation version 2.1
|
||||||
|
* of the License.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
|
||||||
package net.minecraftforge.debug.item;
|
package net.minecraftforge.debug.item;
|
||||||
|
|
||||||
import net.minecraft.entity.monster.EndermanEntity;
|
import net.minecraft.entity.monster.EndermanEntity;
|
||||||
|
|
|
@ -1,3 +1,22 @@
|
||||||
|
/*
|
||||||
|
* Minecraft Forge
|
||||||
|
* Copyright (c) 2016-2020.
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation version 2.1
|
||||||
|
* of the License.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
|
||||||
package net.minecraftforge.debug.world;
|
package net.minecraftforge.debug.world;
|
||||||
|
|
||||||
import net.minecraft.entity.EntityType;
|
import net.minecraft.entity.EntityType;
|
||||||
|
|
Loading…
Reference in a new issue