class VelocityTplEngine extends EngineTemplate<VelocityEngine> {

    @Override
    public Tpl.Engine engine() {
        return Tpl.Engine.Velocity;
    }

    @Override
    public VelocityEngine init() {<FILL_FUNCTION_BODY>}

    @Override
    public void render(VelocityEngine velocityEngine, String filePath, Map<String, Object> bindingMap, Writer out) {
        velocityEngine.getTemplate(filePath, StandardCharsets.UTF_8.name()).merge(new VelocityContext(bindingMap), out);
    }
}

        VelocityEngine ve = new VelocityEngine();
        ve.setProperty(Velocity.INPUT_ENCODING, StandardCharsets.UTF_8);
        ve.setProperty("file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
        ve.init();
        return ve;
    
<methods>public non-sealed void <init>() ,public abstract xyz.erupt.annotation.sub_erupt.Tpl.Engine engine() ,public VelocityEngine getEngine() ,public abstract VelocityEngine init() ,public abstract void render(VelocityEngine, java.lang.String, Map<java.lang.String,java.lang.Object>, java.io.Writer) ,public void setEngine(VelocityEngine) <variables>private VelocityEngine engine